Minesweeper

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    Guten Tag!

    Im Informatikunterricht muss ich das Spiel Minesweeper programmieren. Leider habe ich aber keine Ahnung, wie ich das machen soll. Könnte mir jemand von euch vielleicht weiterhelfen? In 3 Wochen muss ich es fertig haben aber ich weiss echt nicht weiter. Ich hab noch keine Zeile programmiert, ich versteh einfach nix! :(

    LG Eleara
    Na ihr werdet doch nicht in der 1 Stunde vorn PC gesetzt und gesagt Programmiert mal. Ihr habt doch sicher im Unterricht vorher über Programmierung, Logik und Struktur gesprochen das ihr die Grundlagen der Programmierung versteht.
    Wenn du nichts verstehst, wirst du wohl nicht genug aufgepasst haben im Unterricht.
    Du hast doch sicherlich mal in deinem Leben das Windows - Minesweeper gespielt ?! ...

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Folgendes solltest du dir überlegen:

    1) Wie viele Felder soll es geben?
    2) Wie hoch ist die Wahrscheinlichkeit, dass das Feld ne "Bombe" enthält?

    Diese beiden Sachen sind erstmal das wichtigste.

    Wenn du also zB. 30 Felder nimmst und die Wahrscheinlichkeit auf 20% liegt, wären von den 30 Feldern hinter 6 Feldern eine "Bombe"...

    Nun musst du dir überlegen wie du das ganze grafisch darstellen willst.
    Und wenn das ganze grafisch verfügbar ist, sollten die "Bomben" "versteckt" werden.

    Wenn man danach nun auf ein Feld klickt, muss überprüft werden ob dort etwas "versteckt" ist.
    Wenn nichts gefunden wurde, muss das obere, untere, linke und rechte Feld neben dem geklickten überprüft werden.

    Diese Überprüfung geht so lange bis iwo ein "Versteck" entdeckt wird. Denn nun haben wir dort die "Grenze" des freigeschalteten Bereichs.


    Dies muss man nu sooft machen, bis entweder alle leeren Felder als leere Felder ermittelt wurden oder eine versteckte "Bombe" angeklickt wurde


    Das wars jetzt erstmal, nu darfst du bißchen selber nachdenken...


    Btw. KlickMich

    eleara schrieb:

    In 3 Wochen muss ich es fertig haben aber ich weiss echt nicht weiter.

    Abhängig davon, wie "schön" du es haben willst, dürfte das Schreiben des Programms keinen Tag (=8 Stunden Arbeit) dauern. Es bleibt dir also noch genügend Zeit das (offensichtlich) versäumte nachzuholen. Mach dir nen groben Plan, was du an "Funktionen" brauchst und formuliere, was sie "tun" sollen. Dann fang an das ganze in VB niederzuschreiben. Und wenn du ein (spezielles!) Problem hast, fragst du hier wieder nach.
    Ansonsten würde ich empfehlen, im Marktplatz auf "Anbietersuche" zu gehen. Aber aufgepasst: Einige Leute könnten dir Code schreiben, der wäre so gut, dass DU dafür ne 6 bekämst ;)
    Erwartest du jetzt das dir jemand das Programmiert oder wie kommst du auf so etwas?

    Wie oben schon genannt, ihr müsst im Unterricht schon etwas über die Programmierung, Logik & Syntax eines Projekts gelernt haben....

    Und vielleicht liege ich auch falsch, aber ich kenne keine Schule (und kann es mir auch nicht vorstellen, da es keinen Sinn macht), welche Basic als Programmiersprache anbietet. (C# , C++ , Java, Python, LUA sind so die am meisten angebotenen.)
    Wenn ich mal eingreifen darf:

    1. Geile Idee, das wird mein nächstes Projekt ^^
    2. In Minesweeper gibt es ja Felder, die keine Bomben in den acht Feldern rundherum haben. Wenn man auf so eins klickt, werden ja alle Felder gedeckt, bis praktisch eine 'Wand' von Zahlen entsteht. Also so wie in Paint wo man den Fülleimer nutzt. Ich rede etwas verwirrend grade, das meine ich:

    Wie stellt man sowas an ? Über ein rekursiven Algorithmus ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ThePlexian schrieb:

    Wie stellt man sowas an ? Über ein rekursiven Algorithmus ?

    Ich habs rekursiv gemacht, ja. Zweimal bisher sogar. Einmal in "Schneider Basic" und einmal in Java. Ist aber beides schon ein Weilchen her - das eine mehr das andere weniger :D
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.

    Eistee schrieb:

    Das angeklickte Feld überprüfen, wenn Leer die Nachbarn prüfen

    Ja, die Nachbarn von jedem Nachbar prüfen usw. :D Ich bin so doof, warum dachte ich daran nicht :D
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Dodo schrieb:

    Meinst du Locomotive Basic auf nem alten Schneider CPC 464?

    Jep. Wusste nur den offiziellen Namen nicht mehr, darum die Anführungszeichen.
    Weltherrschaft erlangen: 1%
    Ist dein Problem erledigt? -> Dann markiere das Thema bitte entsprechend.
    Waren Beiträge dieser Diskussion dabei hilfreich? -> Dann klick dort jeweils auf den Hilfreich-Button.
    Danke.
    @eleara: Hier mal vlt. ein Vorschlag, wie man da drangehen könnte.

    Zuerst würde ich mir das ganze mal bei Wikipedia anschauen. de.wikipedia.org/wiki/Minesweeper
    Da steht ja erstmal lang und detailreich erklärt wie das Spiel funktioniert. Brauche ich das schon so genau zu wissen ? Nein, denn ich will ja zuerst mein Grundgerüst, da interessiert mich irgendeine Stoppuhr etc. nicht die Bohne (sollte man trotzdem im Hinterkopf haben)

    Schauen wir uns mal den Spielverlauf an
    Am Anfang wird eine von drei Schwierigkeitsstufen gewählt, welche die Größe des Spielfeldes (Anzahl der Felder) und die Anzahl der Minen festlegt. Vor Spielbeginn sind alle Felder verdeckt. Ziel des Spiels ist es, alle Felder aufzudecken, hinter denen sich keine Mine verbirgt.
    Aha, man soll also einiges einstellen können. Merke: Die Sachen die man einstellen soll, müssen dynamisch (Parameter, Properties) im Code verarbeitet werden.
    Was erkenne ich noch aus diesem Satz, richtig, ich brauche wohl etwas, was mir das ganze anzeigt, und etwas, was mir hilft Felder zu befüllen und zu schauen ob eine Mine auf dem Feld liegt, also die eigentliche Logik.

    Schauen wir uns zuerst mal die Logik an.
    Was brauche ich da ? Zuerst wäre ein Spielfeld nicht schlecht. Zusätzlich irgendwas wo ich die Felder speicher und noch etwas Spiellogik.
    Da wäre doch sowas in der Art nicht schlecht

    VB.NET-Quellcode

    1. ''' <summary>Stellt ein Spielfeld dar</summary>
    2. Public Class Spielfeld
    3. 'Speicher für die einzelnen Felder
    4. Public Property Felder As List(Of List(Of Feld)) = New List(Of List(Of Feld))
    5. Public Sub FuelleFelder(ByVal x As Integer, ByVal y As Integer)
    6. 'Felder füllen (2 Schleifen vielleicht ?)
    7. End Sub
    8. Public Class Feld
    9. Public Property Position As Point
    10. Public Property Nummer As Integer
    11. 'Fehlr hier vielleicht noch etwas bombastisches ? :)
    12. Sub New(ByVal position As Point, ByVal nummer As Integer)
    13. 'Zuweisen
    14. End Sub
    15. End Class
    16. End Class


    So, jetzt habe ich ja schonmal die Felder gefüllt.
    Jetzt würde ich mir vielleicht eine kleine Anzeige basteln.
    Zuerst muss ich mich entscheiden wie ich zeichnen will, Ich würde GDI nehmen. [VB 2008] [Tutorial] GDI+
    Damit ich auch Tastendrücke etc. verwerten kann würde ich vielleicht ein eigenes Control basteln.
    Das Control muss mein Spielfeld kennen und es anhand der Einträge zeichnen.
    Gesagt, getan.

    VB.NET-Quellcode

    1. ''' <summary>Stellt die grafische Ansicht des Spielfeldes dar</summary>
    2. Public Class UiSpielfeld
    3. Inherits Control
    4. Public Property Spielfeld As Spielfeld
    5. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    6. MyBase.OnPaint(e)
    7. If Not Spielfeld Is Nothing Then
    8. Zeichne(e, Spielfeld)
    9. End If
    10. End Sub
    11. Sub Zeichne(ByVal e As PaintEventArgs, ByVal s As Spielfeld)
    12. 'Hier sollte etwas gezeichnet werden
    13. End Sub
    14. Protected Overrides Sub OnMouseDown(e As MouseEventArgs)
    15. MyBase.OnMouseDown(e)
    16. 'Welches Kästchen wurde wohl gedrückt und was muss ich mit dieser Info machen ?
    17. End Sub
    18. End Class

    Fast fertig, der Aufruf fehlt nur noch.
    Dabei will ich ein neues Spielfeld erzeugen und ein grafisches Spielfeld ebenfalls.
    Also kompiliere ich das Programm einmal (F5) und schon erscheint das gute Stück in der Toolbox.
    Jetzt nur noch den Form-Code anpassen.

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Dim s As New Spielfeld()
    3. s.FuelleFelder(0, 0)
    4. UiSpielfeld1.Spielfeld = s
    5. UiSpielfeld1.Invalidate()
    6. End Sub


    Jetzt hast du ohne großen Aufwand ein Spielfeld gezeichnet, kannst jedes der Felder abfragen, und bei Bedarf etwas beim Zeichnen ändern (z.B wenn jemand etwas klickt)
    Die SpielfeldUI muss also beim Spielfeld anfragen was denn jetzt gemacht werden soll wenn wenn ich auf ein Feld drücke.
    Bilder
    • mindesweeper.png

      23,83 kB, 892×582, 166 mal angesehen

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „LaMiy“ ()