Hi,
ich bin seit 4 Wochen frischer Azubi und habe mir, da ich mit Delphi arbeiten werde bereits alle Grundlagen wieder hervorgeholt (habe es in der Schule gehabt) und habe mich bis zur Objektorientierung vorgearbeitet (Mit Theorie und Praxis). Nun versuche ich mit Hilfe der OOP ein kleines Mensch-ärger-dich-nicht-Spiel zu programmieren. Leider haperts an einer Stelle und ich komme patu nicht weiter und deswegen wende ich mich heute an euch
Für eine leichtere Programmierung für mich selbst, habe ich das Projekt auf ein Minimum heruntergebrochen, da mein Fokus momentan auf der korrekten Bewegung der Figuren über das Spielfeld liegt.
Zur Grundidee:
Ein StringGrid dient mir als optisches Spielfeld. Im Hintergrund fülle ich ein zweidimensionales Array mit folgenden Werten:
Wie habe ich nun vor die Figuren zu bewegen?:
Mein Ansatz besteht daraus, von der Position, an der meine Figur steht nach oben, unten, links, und rechts 'zu schauen', also alle angrenzenden Feldkoodinaten zu nehmen und mit den Werten aus meinem Array zu vergleichen. Findet er eine 1, 2 oder 3 und ist die Figur noch nicht einmal rum (Fortschritt-Variable), dann bewegeRichtung(). Dabei lass ich noch schaun ob Y < oder > 5 ist sodass beispielsweise nur nach links oder nach rechts gegangen werden kann um rückwärtslaufen auszuschließen.
Worin liegt mein Problem?:
Probierts euch mal aus. Tragt ihr in das EditFeld eine '1' ein, so kommt ihr prima um das Feld. Setzt ihr aber etwas Größeres als 1 ein und landet zufällig auf den Feldern [0,4],[0,6] oder [6,10] zeigt mein Programm ein komisches Verhalten. Per Haltepunkte habe ich gesehen das mein Programm an diesen Punkten das Programm einmal anstandslos durchführt und dann nochmal in die Schleife geht obwohl die Startbedingung nicht mehr erfüllt wird.
Was ich dabei garnicht verstehe: All diese Punkte an denen es hapert, sind kommende Startpunkte (1) der selben oder anderen Farbe, aber der mittlere unten bei [10,4] funktioniert einwandfrei wenn die Figur nach links geht. Allerdings kann ich keinen Fehler in den Bewegungsfunktionen finden.
Vielleicht könnt ihr mir ja helfen, ich such derweil weiter.
Mit freundlichen Grüßen
Kev
PS: Ich häng euch mal meinen Projektteil als Source an, ich habe versucht vieles so einfach wie möglich zu strukturieren und zu kommentieren damit ihr euch zurrecht findet.
Figuren bewegen durch ein Stringgrid.zip
PPS: Stört euch nicht an den Warnungen wegen der Rückgabewerte der Funktionen. Die brauch ich im vollen Programm, habe sie aber entfernt damit der Quelltext für mich übersichtlicher bleibt
ich bin seit 4 Wochen frischer Azubi und habe mir, da ich mit Delphi arbeiten werde bereits alle Grundlagen wieder hervorgeholt (habe es in der Schule gehabt) und habe mich bis zur Objektorientierung vorgearbeitet (Mit Theorie und Praxis). Nun versuche ich mit Hilfe der OOP ein kleines Mensch-ärger-dich-nicht-Spiel zu programmieren. Leider haperts an einer Stelle und ich komme patu nicht weiter und deswegen wende ich mich heute an euch
Für eine leichtere Programmierung für mich selbst, habe ich das Projekt auf ein Minimum heruntergebrochen, da mein Fokus momentan auf der korrekten Bewegung der Figuren über das Spielfeld liegt.
Zur Grundidee:
Ein StringGrid dient mir als optisches Spielfeld. Im Hintergrund fülle ich ein zweidimensionales Array mit folgenden Werten:
0 - Nicht begehbares Gebiet
1 - Startspot
2 - Weg
3 - Feld vor der sicheren Zone
4 - Sichere Zone
0 0 0 0 2 3 1 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
1 2 2 2 2 4 2 2 2 2 2
3 4 4 4 4 0 4 4 4 4 3
2 2 2 2 2 4 2 2 2 2 1
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 1 3 2 0 0 0 0
1 - Startspot
2 - Weg
3 - Feld vor der sicheren Zone
4 - Sichere Zone
0 0 0 0 2 3 1 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
1 2 2 2 2 4 2 2 2 2 2
3 4 4 4 4 0 4 4 4 4 3
2 2 2 2 2 4 2 2 2 2 1
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 2 4 2 0 0 0 0
0 0 0 0 1 3 2 0 0 0 0
Mein Ansatz besteht daraus, von der Position, an der meine Figur steht nach oben, unten, links, und rechts 'zu schauen', also alle angrenzenden Feldkoodinaten zu nehmen und mit den Werten aus meinem Array zu vergleichen. Findet er eine 1, 2 oder 3 und ist die Figur noch nicht einmal rum (Fortschritt-Variable), dann bewegeRichtung(). Dabei lass ich noch schaun ob Y < oder > 5 ist sodass beispielsweise nur nach links oder nach rechts gegangen werden kann um rückwärtslaufen auszuschließen.
Worin liegt mein Problem?:
Probierts euch mal aus. Tragt ihr in das EditFeld eine '1' ein, so kommt ihr prima um das Feld. Setzt ihr aber etwas Größeres als 1 ein und landet zufällig auf den Feldern [0,4],[0,6] oder [6,10] zeigt mein Programm ein komisches Verhalten. Per Haltepunkte habe ich gesehen das mein Programm an diesen Punkten das Programm einmal anstandslos durchführt und dann nochmal in die Schleife geht obwohl die Startbedingung nicht mehr erfüllt wird.
Was ich dabei garnicht verstehe: All diese Punkte an denen es hapert, sind kommende Startpunkte (1) der selben oder anderen Farbe, aber der mittlere unten bei [10,4] funktioniert einwandfrei wenn die Figur nach links geht. Allerdings kann ich keinen Fehler in den Bewegungsfunktionen finden.
Vielleicht könnt ihr mir ja helfen, ich such derweil weiter.
Mit freundlichen Grüßen
Kev
PS: Ich häng euch mal meinen Projektteil als Source an, ich habe versucht vieles so einfach wie möglich zu strukturieren und zu kommentieren damit ihr euch zurrecht findet.
Figuren bewegen durch ein Stringgrid.zip
PPS: Stört euch nicht an den Warnungen wegen der Rückgabewerte der Funktionen. Die brauch ich im vollen Programm, habe sie aber entfernt damit der Quelltext für mich übersichtlicher bleibt
Comment