Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Pac Man programmieren (https://www.delphipraxis.net/195088-pac-man-programmieren.html)

Jojo18 31. Jan 2018 15:45

Delphi-Version: 6

Pac Man programmieren
 
Liste der Anhänge anzeigen (Anzahl: 3)
Sehr geehrte Community,

ich habe ein paar Fragen zu dem Thema Pac Man. Ich muss in der Schule Pac Man programmieren und habe bisher das Spielfeld, dieses Spielfeld habe ich mit einem String Grid erstellt. Aber es ist nur in Farbe Anhang 48468


Für die Wände habe ich schon eine Idee und habe sie versucht umzusetzen. Anhang 48469


Um dies auch zu prüfen brauche ich Pac Man, ich würde ihn gerne mit den Pfeiltasten steuern. Da ich nicht weis wie ich dies anstellen soll wollte ich euch fragen ob ihr mir bitte dabei helfen könnt, dies wäre wirklich sehr nett von euch.

Hier ist das was ich bisher habe. Anhang 48470


Vielen Dank im voraus schon für eure Hilfe.

Neutral General 31. Jan 2018 15:57

AW: Pac Man programmieren
 
Das StringGrid hat ein OnKeyDown Event. In dem kannst du auf VK_RIGHT/VK_LEFT/VK_UP/VK_DOWN prüfen und Pacman in die entsprechende Richtung bewegen

Fukiszo 31. Jan 2018 15:58

AW: Pac Man programmieren
 
http://www.delphipraxis.net/166328-pacman.html da ging es auch um Pac-Man.
Vielleicht ist ja das eine oder andere für Dich dabei,
ich schau mal weiter.

Grüße

Mavarik 31. Jan 2018 16:31

AW: Pac Man programmieren
 
Zitat:

Zitat von Jojo18 (Beitrag 1392727)
Ich muss in der Schule Pac Man programmieren und habe bisher das Spielfeld,

Pac Man als Schulprojekt - Respekt... Bisschen kleiner ging es nicht?

Hier ein paar von meinen alte Postings, die Dir vielleicht weiter helfen.

Link Link LINK

Abgesehen davon würde ich kein StringGrid nehmen... Das ist die falsche Komponente für so etwas...
ggf. ne PaintBox...

Falls Du Fragen hast...

Mavarik

Neutral General 31. Jan 2018 16:40

AW: Pac Man programmieren
 
Zitat:

Zitat von Mavarik (Beitrag 1392748)
Abgesehen davon würde ich kein StringGrid nehmen... Das ist die falsche Komponente für so etwas...
ggf. ne PaintBox...

Eine Paintbox ist die falsche Komponente dafür. Wie wärs mit OpenGL oder DirectX?
Was ich sagen will: Ja du hast Recht, aber ich weiß nicht inwiefern es ratsam ist ihn in Komponenten und Code reinzustürzen von denen er noch nichts gehört bzw. mit denen er noch nicht gearbeitet hat. Ich denke es ist anfangs wichtiger, DASS er sein Ziel erreicht und nebensächlich wie (gut) er es erreicht hat.

Mavarik 31. Jan 2018 16:52

AW: Pac Man programmieren
 
Zitat:

Zitat von Neutral General (Beitrag 1392752)
Eine Paintbox ist die falsche Komponente dafür. Wie wärs mit OpenGL oder DirectX?
Was ich sagen will: Ja du hast Recht, aber ich weiß nicht inwiefern es ratsam ist ihn in Komponenten und Code reinzustürzen von denen er noch nichts gehört bzw. mit denen er noch nicht gearbeitet hat. Ich denke es ist anfangs wichtiger, DASS er sein Ziel erreicht und nebensächlich wie (gut) er es erreicht hat.

Da hast Du natürlich recht... Aber ein StringGrid? Ok, neuer Versuch:

Male doch ein Bild des Hintergrunds... Dass kannst Du auf ein Form übertragen... Hierdrauf kannst Du Labels setzen und die Labels mit Top und Left an die richtigen Stellen verschieben...
Delphi-Quellcode:
Shadow.Caption := 'B'; //  "Blinky"
Speedy.Caption := 'P'; //  "Pinky"
Bashful.Caption := 'I'; //  "Inky"
Pokey.Caption  := 'C'; //  "Clyde"

PacMan.Caption := '>'; // < ^
Besser?

Mavarik

Fukiszo 31. Jan 2018 17:20

AW: Pac Man programmieren
 
Mein erstes Spiel war ein Pong-Klon, auch wenn es einfach klingt, mich hatte dieses "Ball prallt ab, mit wieviel Schwung, mit was für Winkel" ohne Ende Kopfzerbrechen gekostet obwohls ja nur ein Ball ist der hin und her fliegt.
Mit der Zeit wurde aus einem bewegten Panel ein Shape und dann eine 3D OpenGL Version.

Pac-Mac find ich da simpler, egal mit was für Methode und er hat ja schon eine Vorstellung wie er es haben mag.
Legitime Pfade auf denen der Pac sich bewegen kann und eine KI für die Monster sind auch eine Herausforderung.
Das drum-herum kann man ja immernoch umstellen, aber ein Spiele-Motor der dies alles antreibt ist erstmal wichtiger.


Grüße

Jojo18 31. Jan 2018 17:42

AW: Pac Man programmieren
 
Danke erstmal an all eure Vorschläge:-D



Zitat:

Zitat von Neutral General (Beitrag 1392735)
Das StringGrid hat ein OnKeyDown Event. In dem kannst du auf VK_RIGHT/VK_LEFT/VK_UP/VK_DOWN prüfen und Pacman in die entsprechende Richtung bewegen

Also dies verstehe ich ein bisschen aber wie kann ich das denn anwenden, also ich habe noch nichts das sich bewegen kann, wenn ihr versteht was ich meine?

Ich habe mich für das String Grid entschieden, da ich jede Zelle ansprechen kann und dachte so wäre es einfacher. Was haltet ihr denn von den Wänden, ist das so umsetzbar? Aber hättet ihr bitte noch konkretere Vorschläge für mich bitte.

Mavarik 31. Jan 2018 17:57

AW: Pac Man programmieren
 
Zitat:

Zitat von Fukiszo (Beitrag 1392768)
Pac-Mac find ich da simpler, egal mit was für Methode und er hat ja schon eine Vorstellung wie er es haben mag.

Simpler als Pong? Echt jetzt...

Pacman der sich um die Kurve schneller bewegt als die Geister und somit einen micro Vorsprung erhalten kann.

Unterschiedliche Agro-Modes und Geschwindigkeiten je nach Level?

Sodas bei 60 FPS die Geister und Pacman sich mit Pixelgeschwindigkeiten bewegen können die Bruchteile von ganzes Frames sind?

Das im Thread mit interaktiver PrePress-Tastaturabfrage?

Simpler? OK...

Mavarik

Luckie 31. Jan 2018 19:37

AW: Pac Man programmieren
 
Ihr wollt einem Schüler doch nicht ernsthaft vorschlagen, dass er mit OpenGL arbeiten soll? :roll:

Paintbox ist schon der passende Ansatz.

Mavarik 31. Jan 2018 19:56

AW: Pac Man programmieren
 
Zitat:

Zitat von Luckie (Beitrag 1392792)
Ihr wollt einem Schüler doch nicht ernsthaft vorschlagen, dass er mit OpenGL arbeiten soll? :roll:

Natürlich nicht...

Die Frage ist eher: Womit ist der Lehrer zufrieden - bzw. wie nahe muss es am Original sein... Reicht es, wenn da einfach etwas rumläuft mit einem Zufalls-Geist oder muss es besser werden...

Mavarik

LTE5 31. Jan 2018 19:59

AW: Pac Man programmieren
 
Wir sollten vor vielen Jahren in Java Pong entwickeln und ich kann euch sagen, schon das ist nicht einfach als Anfänger.
Pacman will ich mir da gar nicht erst vorstellen.

Ich würde erstmal kleine Brötchen backen und mit Pong anfangen.

Jojo18 31. Jan 2018 20:02

AW: Pac Man programmieren
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also in erster Linie sollte es funktionieren mit allem drum und dran (Geister, mehrere Level). Aber String Grid ist okay, meinte mein Lehrer und ich glaube damit komme ich auch am besten klar.

Ich bin jetzt soweit und weiß wirklich nicht wie es nun weitergeht. Ich bin wirklich auf eure Hilfe angewiesen und hoffe ihr könnt mir helfen.
Anhang 48473

Mavarik 31. Jan 2018 20:07

AW: Pac Man programmieren
 
Zitat:

Zitat von Jojo18 (Beitrag 1392799)
Also in erster Linie sollte es funktionieren mit allem drum und dran (Geister, mehrere Level). Aber String Grid ist okay, meinte mein Lehrer und ich glaube damit komme ich auch am besten klar.

Ich bin jetzt soweit und weiß wirklich nicht wie es nun weitergeht. Ich bin wirklich auf eure Hilfe angewiesen und hoffe ihr könnt mir helfen.
Anhang 48473

Oje... Tick-Tak-Toe oder 4 Gewinnt? Vielleicht eher als PacMan?

Key kannst Du so nicht zuweisen, Du must den Key abfragen und dann entsprechend darauf reagieren...

Delphi-Quellcode:
Case Key of
oder auch
Delphi-Quellcode:
if Key = vk_Left then
Wir helfen hier alle gerne, aber wir machen keine Hausaufgaben!

Mavarik

Jojo18 31. Jan 2018 20:18

AW: Pac Man programmieren
 
Zitat:

Zitat von Mavarik (Beitrag 1392801)

Wir helfen hier alle gerne, aber wir machen keine Hausaufgaben!

Mavarik

Ich möchte auch nicht das ihr meine Hausaufgaben macht. Ich habe mir dieses Projekt freiwillig ausgesucht und weis auch was ich mir da angetan habe. Ich kenne mich nur nicht in dieser Materie aus und bin deswegen auf Hilfe angewiesen. Alles was ich bisher gemacht habe, haben wir so noch nicht im Unterricht gemacht und das habe ich auch alles nur durch Recherche geschafft.

LTE5 31. Jan 2018 20:22

AW: Pac Man programmieren
 
Mach besser Pong, 4-gewinnt oder sowas. Das wird dich schon genug fordern.

Ach ja, hier im Editor... oben drüber ist ein roter Helm. Drück mal drauf dann brauchst du keine Screenshots mehr.

Jojo18 31. Jan 2018 20:25

AW: Pac Man programmieren
 
Zitat:

Zitat von LTE5 (Beitrag 1392805)
Mach besser Pong, 4-gewinnt oder sowas. Das wird dich schon genug fordern.


Ach ja, hier im Editor... oben drüber ist ein roter Helm. Drück mal drauf dann brauchst du keine Screenshots mehr.


Das kann ich nicht, da ich mein Thema schon ausgewählt habe.
Danke für den Tipp :)

Fukiszo 31. Jan 2018 20:33

AW: Pac Man programmieren
 
Ich würde auch liebend gerne helfen aber ich besitze null erfahrung um eine fließende animation auf diese weise hinzubekommen. mavarik ist der pac profi, sein fmx pac schaut aus wie eine 1:1 kopie des arcade pac.
Vielleicht hat mavarik ja auch eine non-fmx version?
OT @mavarik: sehr gut gelungen, gefällt mir, fullscreen wär cool und paar töne ;)

Viel Erfolg bei Deinem Vorhaben!!


Grüße

LTE5 31. Jan 2018 20:55

AW: Pac Man programmieren
 
Zitat:

Vielleicht hat mavarik ja auch eine non-fmx version?
Mavarik macht keine Hausaufgaben.

Selbst wenn er eine hätte, würde er die nicht veröffentlichen.

Mavarik 31. Jan 2018 20:56

AW: Pac Man programmieren
 
Zitat:

Zitat von Jojo18 (Beitrag 1392809)
Das kann ich nicht, da ich mein Thema schon ausgewählt habe.

hmm... Also ich habe mir mal Dein Projekt 111 angeschaut...

Ich will Dich nicht entmutigen, aber so wird das nix. Nimm hier die Suche und schau Dir die anderen Pac-Man Threads mal an.

Fangen wir mal an mit dem Aufbau des Spielbereiches... Wie lange hast Du an den ganzen Schleifen gebastelt?

Wie wäre es mit

GELÖSCHT // Leider hat das Forum beim ändern alles zerstört, Sorry

OK, Nur die obere Hälfte, aber dafür genau wie das Original... in unter 5 Min.


Zitat:

Zitat von Fukiszo (Beitrag 1392810)
OT @mavarik: sehr gut gelungen, gefällt mir, fullscreen wär cool und paar töne ;)

Danke war nur mal so ein Projekt statt Urlaub... 14 Tage... Und das sind nur ca. 3000 LOC
Für Sound war keine Zeit mehr übrig...

Mavarik

Mavarik 1. Feb 2018 14:08

AW: Pac Man programmieren
 
Liste der Anhänge anzeigen (Anzahl: 2)
OK,
Kleine Anleitung wie man Spiele Programmiert.

Ein Thread erzeugt alle 16.6 ms ein neues Frame – schneller macht heute bei TFT’s mit 60Hz keinen Sinn. Klar gib es auch schnellere TFT’S! Aber bleiben wir mal bei diesen 60Hz
Man benötigt also eine Routine die so ein neues Frame erzeugen kann.
Die Main-Game-Loop sieht also im groben so aus:

Delphi-Quellcode:
begin
  while InGame do
    begin
      Timer.Start;
      NewFrame := GameEngine.GetFrame;
      Timer.Stop
      if Timer.Elapsed < 16.6666 then
        GameEngine.PreprocessnextFame(16.66 – Timer.Elapsed); // Zeit nutzen sonst sleep
      MainScreen.BeginUpdate
      try
        MainScreen.Assign(NewFrame);
      finally
        MainScreen.EndUpdate
      end;
    end;
end;
Außerhalb gibt s noch die Maus/Keyboard Abfrage die ihre Daten an die Gameengine weiter gibt.
Wer das nicht im Thread machen möchte (also für Anfänger einfacher) nimmt einfach einen Timer.
Den stellt man auf 15. Wirklich schneller geht es eh nicht.

Jetzt zu PacMan: Man braucht:
Einiges an array’s und Definitionen
StartPos Geister und PacMan, Imagefolge für die Bewegungen in allen Richtungen, Variablen für Position und Richtungen.
Am besten je ein Object pro Geist und PacMan mit allen Daten

Neben den „hochauflösenden“ X/Y Positionen, führt man intern ein LowRes Array mit der Position mit. Einfache XY Koordinaten. Um Wende und andere Objekte zu finden.
Ein Aufruf von GameEngine.GetFrame erzeugt also genau ein Frame und entscheidet wo was gemalt werden muss.
Nicht jeder Frame muss alles bewegen. Ggf. bewegt sich ein Geist nicht, weil er sich nur alle 2 Frames bewegen darf (sonst ist er zu schnell) oder die Power-Points blinken halt auch nicht mit 60Hz. USW.

So das war es erstmal für den Anfang.

Mavarik

PS.: Das gelöschte vom letzten Posting

Jojo18 5. Feb 2018 09:35

AW: Pac Man programmieren
 
Tut mir leid das ich jetzt erst antworte. Also ich bin noch nicht weiter, mein Problem ist nach wie vor Pacman zu bewegen. Ich habe auch zuerst mit einem Button versucht aber es möchte einfach nicht funktionieren.

Delphi-Quellcode:
procedure TForm2.FormCreate(Sender: TObject);
var a,b,i:Integer;
begin

for a:=0 to 40 do                          //füllt alle Zellen mit 0
for b:=0 to 40 do
  begin
  StringGrid1.Cells[a,b]:='1';          //alle Zellen sollten 1 sein, überall wo die eins ist kann Pac Man nicht laufen
  end;
For i:=1 to 38 do
  begin
  StringGrid1.Cells[i*1,1]:='0';     //wo die 0 ist soll Pac Man laufen
  end;


  image4:=timage.Create(self);
  image4.Parent  := Stringgrid1;   // Image soll auf Stringgrid1 angezeigt werden
  image4.Left    := 20;   //Position
  image4.Top     := 20;    //Position
  image4.AutoSize := True;
  image4.Picture.LoadFromFile('C:\Users\johan_jlh8bh3\Desktop\Schule\IV\Bilder PacMan\pac3.bmp'); //Ort von dem das Bild geladen wird
  image4.Visible:= true;
  image4.Transparent:=true;
end;


procedure TForm2.Button2Click(Sender: TObject);
var PacmanY,PacmanX,a,b:Integer;
begin
for a:=0 to 40 do
for b:=0 to 40 do
begin

if StringGrid1.Cells[a,b]=Inttostr(0)
then
        begin
        PacmanX:=a;
        PacmanY:=b;
        end;
     end;

if PacmanX<40 then                       //nicht über den Rand
begin
 if StringGrid1.Cells[(PacmanX*2)+1,PacmanY*2]=Inttostr(0) then   //Abfrage, ob es eine Mauer gibt
  begin
  image4.Left:= 20+(PacmanX);         //Bild verrücken
  end;
end;

end;


Also dies habe ich bisher aber es möchte nicht funktionieren, könnt ihr mir bitte weiterhelfen.

DeddyH 5. Feb 2018 09:45

AW: Pac Man programmieren
 
Du musst die Bewegung in einem Timer realisieren, nicht in einer internen Schleife. Letztere wird einfach abgearbeitet, ohne dass man eine Änderung sehen würde.

Mavarik 5. Feb 2018 09:48

AW: Pac Man programmieren
 
Zitat:

Zitat von Jojo18 (Beitrag 1393092)
Tut mir leid

Sorry, aber das solltest Du zu Deinem Lehrer sagen und dann ein anderes Programm schreiben...

Hast Du auch nur eine Zeile von dem gelesen, was ich geschrieben habe?

Was willst Du den mit dem Button erreichen? PacMan finden? Du solltest eigentlich wissen wo er ist...

Außerdem hast Du nicht nur eine 0 im Grid, sondern viele...

naja und pacmanX ist immer < 40 den sonst würde Pacman schon in der Wand stehen... Da du aber die for Schleife eh von 0 bis 40 laufen läßt sollte das immer zutreffen. dann kannst Du auch direkt die Schleife bis 39 laufen lassen...

Jojo18 5. Feb 2018 19:45

AW: Pac Man programmieren
 
Ich habe es gelesen aber davon habe ich keine Ahnung, für dieses Projekt muss ich mir alles erarbeiten und das ist auch der ganze Reiz an der Sache. Ich bin halt nun mal auf Hilfe angewiesen. Ich versuche es Schritt für Schritt denn es ist noch nie ein Meister vom Himmel gefallen.

Mit dem Button habe ich versucht ihn erstmal zum laufen zu bringen. Bevor ich es mit dem keydown versuche.

hoika 5. Feb 2018 21:31

AW: Pac Man programmieren
 
Hallo,
Zitat:

und das ist auch der ganze Reiz an der Sache
Wie viel Zeit hast Du für den Reiz?

Du scheinst wirklich nicht verstanden zu haben,
was Du dir für eine Mordsarbeit angetan hast.

Du brauchst eine State-Engine, wo Du alle Objekte in einem
Koordinatensystem positionieren kannst, und die sich beim nächsten Zeit-Event
neu berechnen lassen.
Es bewegen sich ja doch einige Objekte neben dem PacMan.

Per ButtonClick kannst Du das "nächstes Zeitevent" manuell natürlich anstossen für Tests.

Ich kann Dir nur raten, das Projekt zurückzugeben!

Bjoerk 6. Feb 2018 07:16

AW: Pac Man programmieren
 
Frag' ggf. mal deinen Lehrer, ob du ein an Pacman angelehntes eigenes Spiel gestalten darfst? Denkbar wäre zum Beispiel ein Area (kein Irrgarten) in dem Pacman Pallets aufsammelt und dabei von Blinky und Co. verfolgt wird?

Mavarik 6. Feb 2018 08:20

AW: Pac Man programmieren
 
Zitat:

Zitat von Jojo18 (Beitrag 1393143)
Ich habe es gelesen... Ich versuche es Schritt für Schritt...

Dann fang doch mal mit Schritt Eins an...

1. Überlege dir was alles und vor allem in welcher Reihenfolge passieren muss
2. Definiere Dir die Variablen / Records / Classen die alle Daten halten (so wie ich es beschrieben habe)
a. Position PacMan, Laufrichtung
b. Position Greist 1-3 mit Status ´(Blau oder Farbe), welche Farbe, Laufrichtung, InBox, OutBox, OutBoxTime
c. Anzahl der Pillen, Status der PowerPillen und Position
d. Anzahl Leben, Aktiver Spieler, Punktestand
3. Initialisiere alle Variablen auf die richtige Startwerte.

Zu (1) Nimm Dir einen Timer
a.) Bei jeden onTimerEvent setze Pacman und die Geister auf die neue Position(Laufrichtung)
b.) Prüfe ob PacMan in die gespeicherte Richtung überhaupt laufen kann, sonst anhalten
c.) Prüfe ob die Position von PacMan gleich der Position von einem der Geister ist
d.) Prüfe ob PacMan beim nächsten Schrit auf einer PowerPill ist
e.) Prüfe ob Geist 1-3 an einer Abzweigung ist und entscheide pro Geist in welche Richtung er laufen soll

So lange Du Punkt 1,2,3 nicht erledigt hast, brauchen wir nicht versuchen Dir zu helfen...


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:58 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz