AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Pac Man programmieren

Offene Frage von "Mavarik"
Ein Thema von Jojo18 · begonnen am 31. Jan 2018 · letzter Beitrag vom 6. Feb 2018
Antwort Antwort
Seite 3 von 3     123
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Pac Man programmieren

  Alt 1. Feb 2018, 14:08
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
Miniaturansicht angehängter Grafiken
arrays.jpg  
Angehängte Dateien
Dateityp: txt Feld.txt (441 Bytes, 7x aufgerufen)

Geändert von Mavarik ( 1. Feb 2018 um 14:13 Uhr)
  Mit Zitat antworten Zitat
Jojo18

Registriert seit: 21. Jan 2018
20 Beiträge
 
#22

AW: Pac Man programmieren

  Alt 5. Feb 2018, 09:35
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.536 Beiträge
 
Delphi 11 Alexandria
 
#23

AW: Pac Man programmieren

  Alt 5. Feb 2018, 09:45
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#24

AW: Pac Man programmieren

  Alt 5. Feb 2018, 09:48
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...
  Mit Zitat antworten Zitat
Jojo18

Registriert seit: 21. Jan 2018
20 Beiträge
 
#25

AW: Pac Man programmieren

  Alt 5. Feb 2018, 19:45
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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#26

AW: Pac Man programmieren

  Alt 5. Feb 2018, 21:31
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!
Heiko

Geändert von hoika ( 5. Feb 2018 um 21:43 Uhr)
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#27

AW: Pac Man programmieren

  Alt 6. Feb 2018, 07:16
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?
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#28

AW: Pac Man programmieren

  Alt 6. Feb 2018, 08:20
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...
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:13 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