Veränderung des Codes während der Laufzeit

Für Fragen von Einsteigern und Programmieranfängern...
Devstructor
Beiträge: 32
Registriert: Mi 7. Sep 2016, 18:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Kontaktdaten:

Re: Veränderung des Codes während der Laufzeit

Beitrag von Devstructor »

Da du das ganze im Array hast, können dir Tags doch egal sein?

Wenn der Computer ein Schiff im 2 dimensionalen Array aussuchen soll, dann mach doch einfach 2 Zufallszahlen. Eine für den x-Wert, die andere für den y-Wert.
www.devstructor.com Devstructor.com - Lazarus Tutorials and more

Mathias
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

Beitrag von Mathias »

Ich habe da noch ein Muster, dies wäre eine Alternative gegenüber den Buttons.
Man beachte die Array Feld, die zeigt den Status der Felder.
Im richtigen Spiel, wird die Array 2x gebraucht, einmal für dich und einmal für den Gegner.
Die Array kann natürlich noch um weiter Zustände des Feldes erweitert werden, da diese ein Record enthält.

In der DrawGrid, kannst anstelle der Rechtecke auch Bitmaps reinkopieren.
Dateianhänge
Schiffversenken_2.zip
(125.13 KiB) 58-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Minits
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

Beitrag von Minits »

Danke für die Datei, aber ich glaube dir hilft mir grad nicht weiter.
Bezüglich der Koordinaten habe ich Folgendes geschrieben:

procedure TForm1.B_gegnerClick(Sender: TObject);
var
zufall_x,zufall_y: INTEGER;
begin
zufall_y:=random(5)+5;
zufall_x:=random(10);
if Spielfeld[zufall_y div max.x,zufall_x mod max.x].NumGlyphs=1 then close;

Das close ist natürlich nur als Test, aber auch wenn ich showmessage oder Ähnliches eingebe, dann kriege ich immer die Nachricht, dass immer ein Feld mit einem Bild getroffen wurde, obwohl das nicht der Fall ist.

Mathias
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

Beitrag von Mathias »

Wieso machst das nicht so ?

Code: Alles auswählen

procedure TForm1.B_gegnerClick(Sender: TObject);
var
  zufall_x,zufall_y: INTEGER;
begin
  zufall_y:=random(10);
  zufall_x:=random(10);
  if Spielfeld[zufall_x ,zufall_y].NumGlyphs = 1 then close;

Oder fängt deine Array nicht bei x0,y0 an ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Mathias
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

Beitrag von Mathias »

So sieht das in etwa aus mit der Zufalls-Erzeugung.
Fehlt nur noch das abknallen der Schiffe.
Dateianhänge
Schiffversenken_2.zip
(125.8 KiB) 49-mal heruntergeladen
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Antworten