Autor Beitrag
´|` R /\ I | ) O $
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: Sa 05.04.08 11:29 
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 user profile iconChristian S.: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Sa 05.04.2008 um 11:33


Zuletzt bearbeitet von ´|` R /\ I | ) O $ am Sa 05.04.08 11:34, insgesamt 1-mal bearbeitet
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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:

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 user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

Viele Grüße,
Christian

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: Sa 05.04.08 11:35 
Danke! :-)
Besser der Name?
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Sa 05.04.08 11:40 
Japp, jetzt ist der Titel besser. :-)

Die Buttons würde ich in einem Array verwalten. 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! :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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 :-)

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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?

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: 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.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
IceBube
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 231



BeitragVerfasst: Sa 05.04.08 15:06 
Hallo!

Also ich würde das so machen:

ausblenden 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
//Diese Fuktion muss allen Buttons zugewiesen werden
Default := (Sender As TButton); //Der geklickte Button

//Sprung berechnen;
Sprung := Default.Tag - Start;

//Wenn negativ dann umwandeln
if Sprung < 0 then Sprung := Sprung * (-1);

//Erlaubt?
if (Sprung = 1or (Sprung=4then
begin
//Springen und Variablen ändern

//Caption vom alten Button entfernen
Button.Caption := '';

Start := Default.Tag; //Derzeitiger StartPunkt
Button := Default;    //Der geklickte Button

//Neue Caption
Button.Caption := 'Du';
end;

end;


Form onCreate

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.FormCreate(Sender: TObject);
begin
//Festlegen der Variablen
Start := 1;
Button := Button1;

//Die Tags der Buttons müssen so angelegt sein
// 1  2  3  4
// 5  6  7  8
// 9 10 11 12
// Sodass man kontrollieren kann ob die Sprünge richtig sind
// ^Wenn man nun auf 1 steht wäre erlaubt(2,5)
// Bedeute 1 +1 = 2, 1+4 = 5
end;

//

Wie schon im Code erwähnt, ist dabei wichtig die Tags von den Buttons!
Im Public/Private bereich noch zwei Variablen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Start : integer; //StartPosition;
    Button : TButton; //StartButton;
  end;



lg
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Sa 05.04.08 15:28 
Hi,

Hier einmal eine überarbeitete Version:

ausblenden volle Höhe 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;  //Der geklickte Button
begin
  Default := (Sender as TButton);

  //Sprung berechnen;
  Sprung := Default.Tag - Start;

  //Wenn negativ dann umwandeln
  if Sprung < 0 then
    Sprung := -Sprung;

  if Sprung in [14then begin
    //Springen und Variablen ändern

    //Caption vom alten Button entfernen
    Button.Caption := '';

    Start := Default.Tag; //Derzeitiger StartPunkt
    Button := Default; //Der geklickte Button

    //Neue Caption
    Button.Caption := 'Du';
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  //Festlegen der Variablen
  Start := 1;
  Button := Button1;

  //Die Tags der Buttons müssen so angelegt sein
  // 1  2  3  4
  // 5  6  7  8
  // 9 10 11 12
  // Sodass man kontrollieren kann ob die Sprünge richtig sind
  // Wenn man nun auf 1 steht wäre erlaubt(2,5)
end;


Wie schon im Code erwähnt, ist dabei wichtig die Tags von den Buttons!
Im Public/Private bereich noch zwei Variablen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Start : integer; //StartPosition;
    Button : TButton; //StartButton;
  end;


mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: 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,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: So 06.04.08 12:25 
Ok, hab ich jetzt gemacht.
Bei mir sieht es momentan so aus:

ausblenden 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" )

ausblenden 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,4then
begin
Button9.Caption := '';
laufen:=Default.Tag;
Button9:=Default;
Button9.Caption:='Sie';
end;


Er startet das Programm, aber es geht nich :-/

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: So 06.04.08 12:38 
Hi,

Bitte verwende Delphi-Tags für deine Code-Beiträge:
ausblenden Quelltext
1:
<span class="inlineSyntax"><span class="codecomment">{PROTECTTAG17050fc2ca09bd6452a71dfc8cb7a33c}</span></span>					


Hier einmal der Quelltext in formatierter und überarbeiteterVersion:
ausblenden 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 - 1in [14then begin  //Im Prinzip kannst du auch direkt den Tag um eins höher reinschreiben
    Button.Caption := '';  //Wenn ich das richtig verstanden habe, ist "Button" eine globale Variable, die den aktiven Button enthält.
    Button := Default;
    Button.Caption := 'Sie';
  end;


Dann noch: gehr nicht ist keine Fehlerbeschreibung. Was genau passiert?

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
´|` R /\ I | ) O $ Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 62



BeitragVerfasst: 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