Veränderung des Codes während der Laufzeit
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Veränderung des Codes während der Laufzeit
Hallo zusammen,
ich möchte in Lazarus "Schiffe versenken" programmieren und habe folgendes Problem:
Um die Schiffe bzw. ihre Position festzulegen, lasse ich ein Panel auf dem Button erscheinen, der gedrückt wurde (Buttons sind hier sozusagen die Spielfelder).
Da somit 100 Buttons existieren, habe ich allen den gleichen Code per On-Cklick Ereignis gegeben, anstatt 100 Prozeduren mit gleichem Inhalt zu erstelllen.
Nun soll der Spieler seinen Flugzeugträger auf dem Spielfeld, durch Klicken von 5 Buttons in einer Reihe, positionieren. Dafür habe ich eine Zählvariable i eingebaut, die bei jedem Klick auf einen Button sich um 1 erhöht.
Darauf hin erscheint ein MessageDLG, in dem der Spieler gefragt wird, ob er seine Positionierung bestätigen möchte.
Nun sollen die weiteren Schiffstypen auf dem Spielfeld untergebracht werden. Da aber in jeder Prozedur der Flugzeugträger aufgeführt ist, wird auch immer wieder das Codefragment zur Positionierung des Flugzeugträgers
durchgenommen. Kann ich diese Stelle während der Laufzeit irgendwie disablen?
Danke im Vorraus!
ich möchte in Lazarus "Schiffe versenken" programmieren und habe folgendes Problem:
Um die Schiffe bzw. ihre Position festzulegen, lasse ich ein Panel auf dem Button erscheinen, der gedrückt wurde (Buttons sind hier sozusagen die Spielfelder).
Da somit 100 Buttons existieren, habe ich allen den gleichen Code per On-Cklick Ereignis gegeben, anstatt 100 Prozeduren mit gleichem Inhalt zu erstelllen.
Nun soll der Spieler seinen Flugzeugträger auf dem Spielfeld, durch Klicken von 5 Buttons in einer Reihe, positionieren. Dafür habe ich eine Zählvariable i eingebaut, die bei jedem Klick auf einen Button sich um 1 erhöht.
Darauf hin erscheint ein MessageDLG, in dem der Spieler gefragt wird, ob er seine Positionierung bestätigen möchte.
Nun sollen die weiteren Schiffstypen auf dem Spielfeld untergebracht werden. Da aber in jeder Prozedur der Flugzeugträger aufgeführt ist, wird auch immer wieder das Codefragment zur Positionierung des Flugzeugträgers
durchgenommen. Kann ich diese Stelle während der Laufzeit irgendwie disablen?
Danke im Vorraus!
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
Da somit 100 Buttons existieren, habe ich allen den gleichen Code per On-Cklick Ereignis gegeben, anstatt 100 Prozeduren mit gleichem Inhalt zu erstelllen.
Hast du die Button alles mühsam von Hand platziert, oder hast du diese dynamisch erzeugt ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
mit copy & paste eingefügt
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
Wen du die Button dynamisch in einem Array hättest, könntest du die Array in einer Schleife durchgehen, ob alle Boote gesetzt sind.
Ich denke eine Array wirst du sowieso haben, irgendwo muss ja gespeichert sein, wo die Boote sind.
Wie hast du die Panel in den Button gebracht ?
Vielleicht wäre für deine Zweck auch ein TToggleBox geeignet.
Noch ein Tip, wie du sehr schnell das Spielfeld erstellen kannst, ohne da 100x Copy&Paste.
Ich denke eine Array wirst du sowieso haben, irgendwo muss ja gespeichert sein, wo die Boote sind.
Um die Schiffe bzw. ihre Position festzulegen, lasse ich ein Panel auf dem Button erscheinen,
Wie hast du die Panel in den Button gebracht ?
Vielleicht wäre für deine Zweck auch ein TToggleBox geeignet.
Noch ein Tip, wie du sehr schnell das Spielfeld erstellen kannst, ohne da 100x Copy&Paste.
Code: Alles auswählen
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
public
BootButton: array of TToggleBox;
procedure OnBootClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i: integer;
begin
SetLength(BootButton, 100);
for i := 0 to Length(BootButton) - 1 do begin
BootButton[i] := TToggleBox.Create(Self);
with BootButton[i] do begin
Tag := i;
Parent := Self;
Width := 22;
Height := 22;
Left := i mod 10 * 25;
Top := i div 10 * 25;
OnClick := @OnBootClick;
end;
end;
end;
procedure TForm1.OnBootClick(Sender: TObject);
var
t: integer;
begin
t := TToggleBox(Sender).Tag;
BootButton[t].Caption := 'X';
end;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 168
- Registriert: Sa 8. Okt 2016, 08:38
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Wohnort: Polska
Re: Veränderung des Codes während der Laufzeit
Bei VB gibt es die Möglichkeit Objekten den selben Namen zu geben, sie unterschieden sich dann nur durch den Index-Wert.
Gibt es so was nicht für Lazarus? Wer so was nicht sinnvoll?
Gibt es so was nicht für Lazarus? Wer so was nicht sinnvoll?
Jeder der sagt, ich könnte programmieren, der hat noch weniger Ahnung vom programmieren als ich!!!
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Hi,
wie kann ich BitButtons in einem zweiddimensionalem Array deflarieren? Und um nicht später mehrmals zu fragen, kann ich sie dann einfach durch den" x- und y-Wert" des BitButtons ansprechen? Und wie kann ich den Status des BitButtons bestimmen?
wie kann ich BitButtons in einem zweiddimensionalem Array deflarieren? Und um nicht später mehrmals zu fragen, kann ich sie dann einfach durch den" x- und y-Wert" des BitButtons ansprechen? Und wie kann ich den Status des BitButtons bestimmen?
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
wie kann ich BitButtons in einem zweiddimensionalem Array deflarieren?
Etwa gleich wie bei der 1D-Array.
Code: Alles auswählen
BootButton: array of array of TToggleBox;
...
SetLength(BootButton, 10, 10);
Und um nicht später mehrmals zu fragen, kann ich sie dann einfach durch den" x- und y-Wert" des BitButtons ansprechen?
Ja das geht.
Und wie kann ich den Status des BitButtons bestimmen?
Code: Alles auswählen
BootButton[4].Checked := True;
Setzt den 5 Button in meinem Beispiel auf True.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Da kriege ich die ganze Zeit die Fehlermeldung "identifier not found "TToggleBox"
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
Du musst den Code noch auf die 2D-Array anpassen.
Code: Alles auswählen
type
TForm1 = class(TForm)
ToggleBox1: TToggleBox;
procedure FormCreate(Sender: TObject);
private
public
BootButton: array of array of TToggleBox;
procedure OnBootClick(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
const
max: TPoint = (x: 16; y: 7);
procedure TForm1.FormCreate(Sender: TObject);
var
x, y: integer;
begin
SetLength(BootButton, max.y, max.x);
for x := 0 to max.x - 1 do begin
for y := 0 to max.y - 1 do begin
BootButton[y, x] := TToggleBox.Create(Self);
with BootButton[y, x] do begin
Tag := y * max.x + x;
Parent := Self;
Width := 22;
Height := 22;
Left := x * 25;
Top := y * 25;
OnClick := @OnBootClick;
end;
end;
end;
BootButton[4, 4].Checked := True;
end;
procedure TForm1.OnBootClick(Sender: TObject);
var
t: integer;
begin
t := TToggleBox(Sender).Tag;
BootButton[t div max.x, t mod max.x].Caption := 'X';
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Hallo,
ich bin gerade dabei dem die Stellung siner Schiffe beizubringen. Habe versucht 2 Zufallszahlen erzeugen zu lassen und diese in die x bzw. y-Werte einzugeben.
Jedoch war es egal, welche Zahl erzeugt wurde, immer wurde der erste Button im array angesprochen. Habe bestimmt einen simplen Fehler gemacht, finde ihn aber leider nicht.
Kann mir wer helfen?
ich bin gerade dabei dem die Stellung siner Schiffe beizubringen. Habe versucht 2 Zufallszahlen erzeugen zu lassen und diese in die x bzw. y-Werte einzugeben.
Jedoch war es egal, welche Zahl erzeugt wurde, immer wurde der erste Button im array angesprochen. Habe bestimmt einen simplen Fehler gemacht, finde ihn aber leider nicht.
Kann mir wer helfen?
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
Jedoch war es egal, welche Zahl erzeugt wurde, immer wurde der erste Button im array angesprochen.
Wen man dazu noch etwas Code sehen würde, kann man dir eher helfen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Hat sich soeben erledigt.
Trotzdem Danke!
Trotzdem Danke!
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Hab doch mal wieder eine Frage:
Ich möchte den PC eine Zufallszahl erzeugen lassen und dann soll geprüft werden, ob auf dem BitBtn im array mit dem jeweiligem Index, welcher die Zufallszahl sein soll, ein Bild ist oder nicht. Wie kann ich sozusagen die Zufallszahl dem Tag der BitBtns zuweisen?
Ich möchte den PC eine Zufallszahl erzeugen lassen und dann soll geprüft werden, ob auf dem BitBtn im array mit dem jeweiligem Index, welcher die Zufallszahl sein soll, ein Bild ist oder nicht. Wie kann ich sozusagen die Zufallszahl dem Tag der BitBtns zuweisen?
-
- Beiträge: 6194
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Veränderung des Codes während der Laufzeit
Verstehe ich es richtig, der Computer soll zufällig die Schiffe generieren ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 30
- Registriert: So 30. Okt 2016, 21:13
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Veränderung des Codes während der Laufzeit
Nicht ganz.
Er soll sozusagen tippen, sprich eine zufällige Zahl erzeugen und der Button mit diesem Tag soll überprüft werden, ob ein Bil drauf ist oder nicht.
Er soll sozusagen tippen, sprich eine zufällige Zahl erzeugen und der Button mit diesem Tag soll überprüft werden, ob ein Bil drauf ist oder nicht.