![]() |
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. |
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
|
AW: Pac Man programmieren
![]() Vielleicht ist ja das eine oder andere für Dich dabei, ich schau mal weiter. Grüße |
AW: Pac Man programmieren
Zitat:
Hier ein paar von meinen alte Postings, die Dir vielleicht weiter helfen. ![]() ![]() ![]() 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 |
AW: Pac Man programmieren
Zitat:
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. |
AW: Pac Man programmieren
Zitat:
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:
Besser?
Shadow.Caption := 'B'; // "Blinky"
Speedy.Caption := 'P'; // "Pinky" Bashful.Caption := 'I'; // "Inky" Pokey.Caption := 'C'; // "Clyde" PacMan.Caption := '>'; // < ^ Mavarik |
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 |
AW: Pac Man programmieren
Danke erstmal an all eure Vorschläge:-D
Zitat:
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. |
AW: Pac Man programmieren
Zitat:
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 |
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. |
AW: Pac Man programmieren
Zitat:
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 |
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. |
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 |
AW: Pac Man programmieren
Zitat:
Key kannst Du so nicht zuweisen, Du must den Key abfragen und dann entsprechend darauf reagieren...
Delphi-Quellcode:
oder auch
Case Key of
Delphi-Quellcode:
Wir helfen hier alle gerne, aber wir machen keine Hausaufgaben!
if Key = vk_Left then
Mavarik |
AW: Pac Man programmieren
Zitat:
|
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. |
AW: Pac Man programmieren
Zitat:
Danke für den Tipp :) |
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 |
AW: Pac Man programmieren
Zitat:
Selbst wenn er eine hätte, würde er die nicht veröffentlichen. |
AW: Pac Man programmieren
Zitat:
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:
Für Sound war keine Zeit mehr übrig... Mavarik |
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:
Außerhalb gibt s noch die Maus/Keyboard Abfrage die ihre Daten an die Gameengine weiter gibt.
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; 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 |
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. |
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.
|
AW: Pac Man programmieren
Zitat:
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... |
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. |
AW: Pac Man programmieren
Hallo,
Zitat:
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! |
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?
|
AW: Pac Man programmieren
Zitat:
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 06:24 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 by Thomas Breitkreuz