Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Delphi Minesweeper (https://www.delphipraxis.net/212694-delphi-minesweeper.html)

Bob7 16. Mär 2023 12:07


Delphi Minesweeper
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo liebe Delphianer,

ich habe vor kurzer Zeit angefangen in Delphi zu programmieren.
Als neustes Projekt habe ich mir Minesweeper genommen.:-D
Das Spiel funktioniert Super, jedoch würde ich sehr gerne noch in das Spiel verschiedene "Level" (Feldgrößen) einfügen.
Ich habe schon mehreres Ausprobiert, jedoch löscht oder ergänzt sich das Feld auf die gewünschte Größe nicht.

Ich wäre euch für eure Hilfe Dankbar!

Liebe Grüße
Bob

So sieht mein derzeitiger Code aus.

Andreas13 16. Mär 2023 12:15

AW: Delphi Minesweeper
 
Herzlich willkommen im Forum, Bob7! :hello:
Du hast lediglich die (nichtssagende, fast immer identische Projektdatei) Project1.dpr hochgeladen. Damit Dir geholfen werden kann, solltest Du uns auch den eigentlichen Programmcode (bei Dir in der Datei: Unit1.pas) zeigen.

Viele Grüße
Andreas

Incocnito 17. Mär 2023 09:53

AW: Delphi Minesweeper
 
Moin moin,

könntest du alle 3 Dateien (dpr, pas und dfm) in einer zip zusammen hoch laden?
Dann könnte man da einfach mal durch tracen.
Das ist meistens einfacher, als einfach nur den Code zu lesen.
Gerade wenn visuelle Komponenten im Spiel sind.

Liebe Grüße
Incocnito

Bob7 17. Mär 2023 10:22

AW: Delphi Minesweeper
 
Moin,

ist jetzt hochgeladen als Zip Datei.

Liebe Grüße
Bob

Incocnito 17. Mär 2023 16:29

AW: Delphi Minesweeper
 
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

BigAl 18. Mär 2023 20:02

AW: Delphi Minesweeper
 
Auf die Schnelle:

MainPanel.Free

und danach

MainPanel.Left...

Ist das Panel freigegeben, dann existiert es nicht mehr. Du greifst nur noch auf eine Laiche im Speicher zurück.

Der besser Weg wäre Parent bzw. Owner für die generierten Panels auf das MainPanel zu setzen (also nicht Self). Dann kannst Du über MainPanel.Controls alle Panels bei Bedarf freigeben (for var I := 0 to MainPanel.ControlCount - 1 do ...).


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:48 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz