AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Pac Man programmieren

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

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

AW: Pac Man programmieren

  Alt 31. Jan 2018, 20:22
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.
  Mit Zitat antworten Zitat
Jojo18

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

AW: Pac Man programmieren

  Alt 31. Jan 2018, 20:25
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
  Mit Zitat antworten Zitat
Fukiszo
(Gast)

n/a Beiträge
 
#3

AW: Pac Man programmieren

  Alt 31. Jan 2018, 20:33
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
  Mit Zitat antworten Zitat
LTE5

Registriert seit: 13. Nov 2017
355 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#4

AW: Pac Man programmieren

  Alt 31. Jan 2018, 20:55
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.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

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

AW: Pac Man programmieren

  Alt 31. Jan 2018, 20:56
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.


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

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

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

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
Angehängte Grafiken
Dateityp: jpg Arrays.jpg (131,1 KB, 41x aufgerufen)
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
 
#7

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.656 Beiträge
 
Delphi 12 Athens
 
#8

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.154 Beiträge
 
Delphi 10.3 Rio
 
#9

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
Antwort Antwort

 

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 20:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz