Hallo,
ich wollte mich mal an ein kleines Spiel heranwagen, in dem sich eine Figur durch W, A, S und D bewegen kann.
Den Raum lade ich über ein Image. Die Figur lade ich über ein zweites Image. Die Figur soll immer zentral bleiben, sodass beim Bewegen der Figur sich das erste Image (der Raum) in die entsprechende Richtung verschiebt (so ähnlich wie bei den ersten Pokemon Generationen). Um die Gehbewegung darzustellen, lade ich mit jedem neuen Tastendruck in der gleichen Richtung ein anderes Bild in das zweite Image (Image der Figur). Im ersten Image (dem Raum) habe ich Shapes über die Wände, Möbel und Hindernisse gesetzt und wollte somit erreichen, dass die Figur nicht durch bzw über die Wände, Möbel und Hindernisse laufen kann. Dass die Figur nicht durch Wände läuft habe ich noch geschafft. Nu weiß ich jedoch nicht, wie man es so programmiert, dass die Figur sich nicht über Möbel und Hindernisse bewegt, sondern vor denen stehen bleibt. Hat jemand für mich einen Vorschlag?
[EDIT] Das ist nicht mein erstes Projekt, das ich schreibe. Habe mit meinem schulischen Wissen bisher sowas wie Mensch ärgere Dich nicht, Schach, Tetris, Snake usw programmiert. Wollte nu einfach mal die Bewegung von alten Adventure Spielen versuchen zu programmieren.
Hier ist der bisherige Quelltext:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState);
var moeg:boolean;
begin
case Key of
Ord('W'):
begin
moeg:= false;
if (image2.top>obenShape.top+2*72) then moeg:= true; {obenShape= obere Grenze, sodass die Figur nicht
durch die obere Wand läuft}
if moeg then begin
if bild = 'figur_hinten' then //Variable bild ist global deklariert
begin
bild:= 'figur_hinten_gehend';
image1.top:= image1.top+72; //72, da die Schrittweite der Figur nach oben und unten 72 beträgt
bettShape.top:= bettShape.top+72;
pflanzeShape.top:= pflanzeShape.top+72;
tischShape.top:= tischShape.top+72;
tvShape.top:= tvShape.top+72;
treppenShape.top:= treppenShape.top+72;
linksShape.top:= linksShape.top+72;
rechtsShape.top:= rechtsShape.top+72;
untenShape.top:= untenShape.top+72;
obenShape.top:= obenShape.top+72;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_hinten_linker_fuß.png');
end
else
begin
bild:= 'figur_hinten';
image1.top:= image1.top+72;
bettShape.top:= bettShape.top+72;
pflanzeShape.top:= pflanzeShape.top+72;
tischShape.top:= tischShape.top+72;
tvShape.top:= tvShape.top+72;
treppenShape.top:= treppenShape.top+72;
linksShape.top:= linksShape.top+72;
rechtsShape.top:= rechtsShape.top+72;
untenShape.top:= untenShape.top+72;
obenShape.top:= obenShape.top+72;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_hinten_rechter_fuß.png');
end;
end;
end;
Ord('S'):
begin
moeg:= false;
if (image2.top<untenshape.top-2*72) then moeg:= true; {untenShape= unten Grenze, sodass die Figur nicht
durch die untere Wand läuft}
if moeg then begin
if bild = 'figur_vorne' then
begin
bild:= 'figur_vorne_gehend';
image1.top:= image1.top-72;
bettShape.top:= bettShape.top-72;
pflanzeShape.top:= pflanzeShape.top-72;
tischShape.top:= tischShape.top-72;
tvShape.top:= tvShape.top-72;
treppenShape.top:= treppenShape.top-72;
linksShape.top:= linksShape.top-72;
rechtsShape.top:= rechtsShape.top-72;
untenShape.top:= untenShape.top-72;
obenShape.top:= obenShape.top-72;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_vorne_linker_fuß.png');
end
else
begin
bild:= 'figur_vorne';
image1.top:= image1.top-72;
bettShape.top:= bettShape.top-72;
pflanzeShape.top:= pflanzeShape.top-72;
tischShape.top:= tischShape.top-72;
tvShape.top:= tvShape.top-72;
treppenShape.top:= treppenShape.top-72;
linksShape.top:= linksShape.top-72;
rechtsShape.top:= rechtsShape.top-72;
untenShape.top:= untenShape.top-72;
obenShape.top:= obenShape.top-72;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_vorne_rechter_fuß.png');
end;
end;
end;
Ord('A'):
begin
moeg:=false;
(image2.left>linksShape.left+96)) then moeg:= true; {linksShape= linke Grenze, sodass die Figur nicht
durch die linke Wand läuft}
if moeg then begin
if bild = 'figur_links' then
begin
bild:= 'figur_links_gehend';
image1.left:= image1.left+96; //96, da die Schrittweite der Figur nach links und rechts 96 beträgt
bettShape.left:= bettShape.left+96;
pflanzeShape.left:= pflanzeShape.left+96;
tischShape.left:= tischShape.left+96;
tvShape.left:= tvShape.left+96;
treppenShape.left:= treppenShape.left+96;
linksShape.left:= linksShape.left+96;
rechtsShape.left:= rechtsShape.left+96;
untenShape.left:= untenShape.left+96;
obenShape.left:= obenShape.left+96;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_links.png');
end
else
begin
bild:= 'figur_links';
image1.left:= image1.left+96;
bettShape.left:= bettShape.left+96;
pflanzeShape.left:= pflanzeShape.left+96;
tischShape.left:= tischShape.left+96;
tvShape.left:= tvShape.left+96;
treppenShape.left:= treppenShape.left+96;
linksShape.left:= linksShape.left+96;
rechtsShape.left:= rechtsShape.left+96;
untenShape.left:= untenShape.left+96;
obenShape.left:= obenShape.left+96;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_links_gehend.png');
end;
end;
end;
Ord('D'):
begin
moeg:= false;
if (image2.left<rechtsShape.left-96) then moeg:= true; {rechts Shape= rechte Grenze, sodass die Figur
nicht durch die rechte Wand läuft}
if moeg then begin
if bild = 'figur_rechts' then
begin
bild:= 'figur_rechts_gehend';
image1.left:= image1.left-96;
bettShape.left:= bettShape.left-96;
pflanzeShape.left:= pflanzeShape.left-96;
tischShape.left:= tischShape.left-96;
tvShape.left:= tvShape.left-96;
treppenShape.left:= treppenShape.left-96;
linksShape.left:= linksShape.left-96;
rechtsShape.left:= rechtsShape.left-96;
untenShape.left:= untenShape.left-96;
obenShape.left:= obenShape.left-96;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_rechts.png');
end
else
begin
bild:= 'figur_rechts';
image1.left:= image1.left-96;
bettShape.left:= bettShape.left-96;
pflanzeShape.left:= pflanzeShape.left-96;
tischShape.left:= tischShape.left-96;
tvShape.left:= tvShape.left-96;
treppenShape.left:= treppenShape.left-96;
linksShape.left:= linksShape.left-96;
rechtsShape.left:= rechtsShape.left-96;
untenShape.left:= untenShape.left-96;
obenShape.left:= obenShape.left-96;
image2.picture.loadfromfile(GetcurrentDir+'\Bilder\figur\figur_rechts_gehend.png');
end;
end;
end;