Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Bewegung im einem Spiel mit Buttons
´|` R /\ I | ) O $ - Sa 05.04.08 11:29
Titel: Bewegung im einem Spiel mit Buttons
Hoi, ich hätte da mal ne Frage:
Ich bin grad am schreiben von nem kleinen Spiel. Dazu wollte ich folgendes machen, ich weiß aber nich genau, wie ich das in Delphi umsetzen kann, vlt. kann mir da jmd. n Hinweiß geben, oder sogar n Quelltext. Danke schonmal im Vorraus! :-)
Ich wollte:
Einen ganzen Haufen an Buttons nebeneinander, untereinander ect. machen und diese als Felder nehme, auf denen sich ein Charakter vortbewegen kann. Jetzt wollte ich, dass sich der Charaker immer nur auf ein Feld, dass direkt an seins angrenz bewegen kann, also nich hin-und herspringen kann. Zudem wollte ich, dass auf dem Button dann n Zeichen, oder n Wort is, dass man sieht, dass man dort ( Charakter ) steht.
THX
Moderiert von
Christian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 05.04.2008 um 11:33
Christian S. - Sa 05.04.08 11:32
Hallo und :welcome: ,
bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den
Richtlinien [
http://www.entwickler-ecke.de/richtlinien.html]:
| 1.2 Beiträge: |
| Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...] |
Einfach oben bei Deinem ersten Beitrag auf

oder

klicken und den Titel ändern. Danke Dir!
Viele Grüße,
Christian
´|` R /\ I | ) O $ - Sa 05.04.08 11:35
Danke! :-)
Besser der Name?
Christian S. - Sa 05.04.08 11:40
Japp, jetzt ist der Titel besser. :-)
Die Buttons würde ich
in einem Array verwalten [
http://www.delphi-library.de/topic_Komponenten+dynamisch+im+Array+verwalten_43052.html]. Darin kannst Du dann recht einfach mit ein oder zwei Schleifen (je nachdem, ob das Array ein- oder zweidimensional ist) durchgehen und abfragen, welcher Button direkt an den Charakter angrenzt. Bei allen anderen setzt Du
buttonX.Enabled := false;
Eigentlich gilt hier pro Frage ein Thread, aber die zweite Frage beantworte ich ganz kurz.
button1.Caption := 'hier';. Damit setzt Du den Text eines Buttons. Bei Nachfragen dazu aber bitte einen neuen Thread aufmachen. Danke! :-)
´|` R /\ I | ) O $ - Sa 05.04.08 12:08
:-/
Mir stellt sich dann grad die Frage, wie genau ich das machen soll *ist grad leicht verwirrt*
Christian S. - Sa 05.04.08 12:11
Wie weit bist Du denn gekommen? Probier's doch mal selber und wenn Du nicht weiter kommst, fragst Du nochmal konkret nach. Da lernst Du auf jeden Fall mehr bei :-)
´|` R /\ I | ) O $ - Sa 05.04.08 13:40
Ich versteht grad nich, wie ich dein Beispiel so umschreibe, dass ich von Button zu Button "laufen" kann, wobei halt nur die Felder, die direkt angrenzen begehbar sind.
Christian S. - Sa 05.04.08 13:42
Dazu musst Du erst einmal erklären, wie das Laufen funktionieren soll. Soll der Spieler auf einen Button klicken, damit der Charakter dorthin läuft?
´|` R /\ I | ) O $ - Sa 05.04.08 13:57
Ja. Also er steht auf dem Anfangsfeld und wenn er dann auf den Button rechts daneben klickt, dann "lauft" er dorthin. Es steht dann auf dem geklickten Button z.B. "Du", damit man weiß, wo man ist.
Christian S. - Sa 05.04.08 14:17
Welche Gedanken hast Du Dir dazu gemacht, wie das funktionieren könnte?
Und an welcher Stelle hakt es jetzt?
´|` R /\ I | ) O $ - Sa 05.04.08 14:23
Ich dachte mir das so:
Wenn ich auf den Button klicke, dann "wandert" das "Du" ( Angabe wo man sich befindet ) auf das geklickte Feld ( Button ). Dabei muss aber ne Festlegung erfolgen, dass ich nich auf ein Feld, was ewig weit weg ist springen kann. Also müssten alle, die nicht direkt angrenzen "abgesperrt" werden und wenn man n Feld geht, muss sich die Grenze ja verändern.
Das Problem wo ich hänge is im Moment die Grenze zu setzen.
Das "Du" wandern lassen hab ich schon eingebaut.
Christian S. - Sa 05.04.08 14:35
Du brauchst die Koordinaten des Buttons, auf den geklickt wird und die Koordinaten des Buttons, wo das "Du" aktuell steht. Und die dürfen nicht zu weit auseinander sein. Wenn Du wie in dem Link von mir beschrieben die Buttons im Quellcode erzeugst, kannst Du die Koordinaten direkt bei der Erstellung in der Tag-Eigenschaft des Buttons speichern.
IceBube - Sa 05.04.08 15:06
Hallo!
Also ich würde das so machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.Button1Click(Sender: TObject); var Sprung : integer; Default : TButton; begin Default := (Sender As TButton); Sprung := Default.Tag - Start;
if Sprung < 0 then Sprung := Sprung * (-1);
if (Sprung = 1) or (Sprung=4) then begin
Button.Caption := '';
Start := Default.Tag; Button := Default; Button.Caption := 'Du'; end;
end; |
Form onCreate
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.FormCreate(Sender: TObject); begin Start := 1; Button := Button1;
end; |
//
Wie schon im Code erwähnt, ist dabei wichtig die Tags von den Buttons!
Im Public/Private bereich noch zwei Variablen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure FormCreate(Sender: TObject); private public Start : integer; Button : TButton; end; |
lg
Hidden - Sa 05.04.08 15:28
Hi,
Hier einmal eine überarbeitete Version:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41:
| procedure TForm1.Button1Click(Sender: TObject); var Sprung: Integer; Default: TButton; begin Default := (Sender as TButton);
Sprung := Default.Tag - Start;
if Sprung < 0 then Sprung := -Sprung;
if Sprung in [1, 4] then begin Button.Caption := '';
Start := Default.Tag; Button := Default; Button.Caption := 'Du'; end; end;
procedure TForm1.FormCreate(Sender: TObject); begin Start := 1; Button := Button1;
end; |
Wie schon im Code erwähnt, ist dabei wichtig die Tags von den Buttons!
Im Public/Private bereich noch zwei Variablen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure FormCreate(Sender: TObject); private public Start : integer; Button : TButton; end; |
mfG,
´|` R /\ I | ) O $ - So 06.04.08 11:38
Ok, nur jetzt stellt sich mir die Fragem wie ich die "Tags" zuweisen kann mit den Zahlen. :-/
Edit: Die Buttons brauch ich nich erzeugen, die hab ich schon fest eingebaut.
Hidden - So 06.04.08 12:08
Hi,
Die Variable "Start" entfällt, die sie ja immer gleich des Tags des Buttons ist.
Wenn du die Buttons nicht automatisch erstellen willst, musst do wohl von hand die einzelnen Bittons anklicken und im opject inspector unter properties "Tag" auf den jeweiligen wert setzen.
mfG,
´|` R /\ I | ) O $ - So 06.04.08 12:25
Ok, hab ich jetzt gemacht.
Bei mir sieht es momentan so aus:
Quelltext
1: 2: 3:
| XX X Meine erstellte Karte: XXXXX |
Und so weiter
Start ist ganz links unten in der Ecke.
Quelltext dazu:( laufen war im oberen Bsp. "Sprung" )
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| procedure TForm1.Button9Click(Sender: TObject); var laufen:Integer; default:TButton; begin Default:=(Sender as TButton); laufen:=Default.Tag-1; if laufen<0 then laufen:=-laufen; if laufen in [1,4] then begin Button9.Caption := ''; laufen:=Default.Tag; Button9:=Default; Button9.Caption:='Sie'; end; |
Er startet das Programm, aber es geht nich :-/
Moderiert von
Christian S.: Delphi-Tags hinzugefügt
Hidden - So 06.04.08 12:38
Hi,
Bitte verwende Delphi-Tags für deine Code-Beiträge:
Quelltext
1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAG17050fc2ca09bd6452a71dfc8cb7a33c}</span></span> |
Hier einmal der Quelltext in formatierter und überarbeiteterVersion:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure TForm1.Button9Click(Sender: TObject); var laufen: Integer; default: TButton; begin Default := (Sender as TButton); if Abs(Default.Tag - 1) in [1, 4] then begin Button.Caption := ''; Button := Default; Button.Caption := 'Sie'; end; |
Dann noch: gehr nicht ist keine Fehlerbeschreibung. Was genau passiert?
mfG,
´|` R /\ I | ) O $ - So 06.04.08 13:03
k.A., warum es nicht geht.
Ich hab den überarbeitetet jetzt reingemacht, aber schonwieder passiert nix.
Es kommt nichtmal das "Du", wenn ich auf nen Button klicke.
Wäre super nett, wenn einer mal 3 Buttons, oder so sich erstellen würde und das mal testet, weil ich komm überhaupt garnich weiter im Moment. :-(
Wenn es klappt, bitte mal posten.
Keiner ne Idee?
THX
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!