AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Delphi Minesweeper

Ein Thema von Bob7 · begonnen am 16. Mär 2023 · letzter Beitrag vom 18. Mär 2023
Antwort Antwort
Bob7

Registriert seit: 16. Mär 2023
2 Beiträge
 
#1

Delphi Minesweeper

  Alt 16. Mär 2023, 12:07
Hallo liebe Delphianer,

ich habe vor kurzer Zeit angefangen in Delphi zu programmieren.
Als neustes Projekt habe ich mir Minesweeper genommen.
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.
Angehängte Dateien
Dateityp: zip Programm.zip (4,2 KB, 13x aufgerufen)

Geändert von Bob7 (17. Mär 2023 um 11:08 Uhr)
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
711 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Delphi Minesweeper

  Alt 16. Mär 2023, 12:15
Herzlich willkommen im Forum, Bob7!
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
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (16. Mär 2023 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#3

AW: Delphi Minesweeper

  Alt 17. Mär 2023, 09:53
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
  Mit Zitat antworten Zitat
Bob7

Registriert seit: 16. Mär 2023
2 Beiträge
 
#4

AW: Delphi Minesweeper

  Alt 17. Mär 2023, 10:22
Moin,

ist jetzt hochgeladen als Zip Datei.

Liebe Grüße
Bob
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
210 Beiträge
 
#5

AW: Delphi Minesweeper

  Alt 17. Mär 2023, 16: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 16:31 Uhr)
  Mit Zitat antworten Zitat
BigAl

Registriert seit: 6. Sep 2008
Ort: Kehl
495 Beiträge
 
Delphi 12 Athens
 
#6

AW: Delphi Minesweeper

  Alt 18. Mär 2023, 20:02
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 ...).
Man sollte nie so viel zu tun haben, dass man zum Nachdenken keine Zeit mehr hat. (G.C. Lichtenberg)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:11 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