AW: Delphi Minesweeper
17. Mär 2023, 17:29
Hi Bob,
ich glaube du musst dein Problem noch etwas genauer beschreiben.
Je nachdem, was ich in FormCreate für eine Anzahl eingebe, das Feld wird korrekt erweitert.
Mir ist noch aufgefallen, dass es auch weniger Minen sein können, als gewünscht,
da du nicht prüfst, ob eine zu setzende Mine auf ein Feld legst auf dem schon eine Miene liegt.
Hinweis hierzu: Das ist zwar nur ein Spiel, aber um sicher zu gehen, dass er nur einen Durchlauf braucht,
um die Minen zu setzen, könntest du das Array als Liste sehen und dann die Minen absteigend platzieren.
Zur Veranschaulichung, soll das dein Spielfeld sein:
a b c
d e f
g h i
Erste Zufallszahl Random(9){+1} = 3
also nimmst du das dritte Feld und platzierst eine Mine
a b X
d e f
g h i
Zweite Zufallszahl Random(8){+1} = 6
also nimmst du das sechste freie Feld
1=a 2=b 3=d 4=e 5=f 6=g
a b X
d e f
X h i
Dritte Mine Random(7){+1} = 6
1=a ... c und g ja auslassen ... 6=h
a b X
d e f
X X i
So könntest du 3 Minen platzieren, ohne Gefahr zu laufen, dass ein Feld mehrfach belegt wird und gleichzeitig
verhinderst du eine theoretische Endlosschleife, falls der Zufallsgenerator nie die freien Felder trifft.
Als zweites nehme mal in CreateMinesAndCounts
A:=random(Gamesize) + 1;
B:=random(Gamesize) + 1;
und schmeiß die beiden "if(A=0) then A=1" und "if(B=0) then B=1"
raus. Denn so waren
- Nie die letzte Zeile und Spalte besetzen
- Die ersten Zeilen und Spalten waren doppelt so oft besetzt
Ansonsten läuft es schon recht gut.
Liebe Grüße
Incocnito
Geändert von Incocnito (17. Mär 2023 um 17:31 Uhr)
|