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: 6916
- 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
Hast du die Button alles mühsam von Hand platziert, oder hast du diese dynamisch erzeugt ?Da somit 100 Buttons existieren, habe ich allen den gleichen Code per On-Cklick Ereignis gegeben, anstatt 100 Prozeduren mit gleichem Inhalt zu erstelllen.
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: 6916
- 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.
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.
Wie hast du die Panel in den Button gebracht ?Um die Schiffe bzw. ihre Position festzulegen, lasse ich ein Panel auf dem Button erscheinen,
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: 6916
- 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
Etwa gleich wie bei der 1D-Array.wie kann ich BitButtons in einem zweiddimensionalem Array deflarieren?
Code: Alles auswählen
BootButton: array of array of TToggleBox;
...
SetLength(BootButton, 10, 10);
Ja das geht.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?
Code: Alles auswählen
BootButton[4].Checked := 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: 6916
- 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: 6916
- 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 man dazu noch etwas Code sehen würde, kann man dir eher helfen.Jedoch war es egal, welche Zahl erzeugt wurde, immer wurde der erste Button im array angesprochen.
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: 6916
- 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.