Announcement

Collapse
No announcement yet.

Ein Frage zu einem Würfelspiel

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ein Frage zu einem Würfelspiel

    Hallo, ich bin neu hier und sag erst einmal guten Tag =)
    Ich bin noch nicht so lange in VB.Net dabei und hab dadurch noch recht wenig Programmiererfahrung darin. Aber das hält mich nicht davon ab ins Volle zu gehen. Hehe... Ich weiß viele würden mir jetzt am liebsten erstmal n Link zu nem Einsteigerbuch geben, aber ich denk ich kann mich da gut einfinden.. Ich mein ein großer Teil ist Logik.

    Ich bastel gerade an einem Kniffelspiel (Win-Form-basiert also kein Konsolenspiel), die Hälfte ist schon fertig, nur jetzt häng ich beim eintragen der Wurfergebnisse in eine Textbox.

    Ich habe 1 Button zum Würfeln, eine Textbox in die eine 5-stellige Zahlenfolge beliebig der 6 Augenzahlen reingeschrieben wird (z.B. 3-5-1-6-6), 5 Textbox in die jeweils die Zahlen geschrieben werden um durch den Inhalt dieser 5 Boxen kleine Würfelbildchen anzuzeigen. (z.B. Box1.Text = 2 -> PictureBox.Image = Würfel2.png) und dann noch 5 Textboxen die zum Eintragen der ausgewählten Würfel dienen. Man klickt auf einen Button und die Zahl aus z.B. Textbox 2, hier im Beispiel die 5, wird in die 2 Textbox der Auswahl geschrieben und in der anderen Textbox gelöscht... Alles soweit so gut. Jetzt gibt es noch Eintragebuttons, um die Auswahlen in eine Zelle der Punktetabelle zu schreiben.
    Die Möglichkeiten 1er bis 6er des Spiels hab ich schon umgesetzt nur jetzt hakts bei dem Dreierpasch: Ich weiß nicht wie ich dem VB.Net sagen kann, dass mindestens 3 der Auswahltextboxen mit gleichen Zahlen belegt sein sollen, damit man erst eintragen darf (Ansonsten soll eine kleine Fehlermeldung mit Erläuterung angezeigt werden).
    Hier der Code meines Button_Dreierpasch:
    AZx.Text ist der Inhalt der jeweiligen AuswahlTextBox

    [highlight=vbnet]
    Private Sub Button_Dreierpasch_Click() Handles Button_Dreierpasch.Click
    Dim Ergebnis As Integer = 0
    If AZ1.Text <> AZ2.Text <> AZ3.Text And AZ1.Text <> AZ2.Text <> AZ4.Text And AZ1.Text <> AZ2.Text <> AZ5.Text And AZ1.Text <> AZ3.Text <> AZ4.Text And AZ1.Text <> AZ3.Text <> AZ5.Text And AZ1.Text <> AZ4.Text <> AZ5.Text And AZ2.Text <> AZ3.Text <> AZ4.Text And AZ2.Text <> AZ3.Text <> AZ5.Text And AZ2.Text <> AZ4.Text <> AZ5.Text And AZ3.Text <> AZ4.Text <> AZ5.Text Then
    Fehler_Titel.Visible = True
    Fehler_Text.Visible = True
    Fehler_Text.Text = "Sie müssen mindestens drei gleiche Augenzahlen" & vbCrLf & "in der Auswahl haben."
    ElseIf AZ1.Text = AZ2.Text = AZ3.Text Or AZ1.Text = AZ2.Text = AZ4.Text Or AZ1.Text = AZ2.Text = AZ5.Text Or AZ1.Text = AZ3.Text = AZ4.Text Or AZ1.Text = AZ3.Text = AZ5.Text Or AZ1.Text = AZ4.Text = AZ5.Text Or AZ2.Text = AZ3.Text = AZ4.Text Or AZ2.Text = AZ3.Text = AZ5.Text Or AZ2.Text = AZ4.Text = AZ5.Text Or AZ3.Text = AZ4.Text = AZ5.Text Then
    Fehler_Titel.Visible = False
    Fehler_Text.Visible = False
    If MsgBox("Möchtest Du das Ergebnis wirklich eintragen?", vbYesNo, "") = vbYes Then
    Ergebnis = Ergebnis + AZ1.Text + AZ2.Text + AZ3.Text + AZ4.Text + AZ5.Text
    Eintrag_7.Text = Ergebnis
    'Auswahl resetten
    AZ1.Text = ""
    Auswahl_W1.Image = Nothing
    AZ2.Text = ""
    Auswahl_W2.Image = Nothing
    AZ3.Text = ""
    Auswahl_W3.Image = Nothing
    AZ4.Text = ""
    Auswahl_W4.Image = Nothing
    AZ5.Text = ""
    Auswahl_W5.Image = Nothing
    End If
    Else
    End If
    End Sub
    [/highlight]

    Hoffe das reicht als Beschreibung, wenn nicht fragt =)

  • #2
    wäre es nicht besser dein Programm sagt was der jenige gewürfelt hat und er entscheidet ob er weiterwürfelt oder nicht?
    Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

    Comment


    • #3
      Ja beim Kniffeln hat man ja 3 Würfelchancen, die darf der Spieler natürlich auch nutzen oder soll er zumindest dann können hab ich auch noch nicht fertig wie ich den Würfelbutton nach 3mal blockiere.
      Er darf natürlich auch nach dem ersten Wurf schon beenden wenn er was gutes geworfen hat. da könnt ich ja einen button machen der direkt seinen zug beendet und die eintragbuttons freischaltet bzw. einfach sichtbar macht. Aber das hilft mir doch noch nicht bei meinem Problem oder wie könnte man es am besten machen?

      Comment


      • #4
        nein ich würde jedem würfler die Chance geben 3mal zu würfeln, dann einen beenden button. Dann würde ich sagen beim würfeln wird Würfelanzahl - 1 gerechnet ... und dann gewürfelt. Sind die würfel gefallen dann kann der spieler sagen beenden ja nein ... dann einfach den Computer erkennen lassen was er gewürfelt hat und dem Spieler auswählen lassen was er aus seiner Liste streichen willst ...

        ich würde net mit sovielen Textboxen arbeiten ein spiel visueller zu gestalten machts viel schöner.

        Und zum Dreierpasch problem. Die Zahl die gewürfelt wurde würde ich als Integer speichern und dann wäre wohl das einfachste durch zuvergleichen. Mir fällt nix besseres ein.
        Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

        Comment


        • #5
          Originally posted by das-d View Post
          ich würde net mit sovielen Textboxen arbeiten ein spiel visueller zu gestalten machts viel schöner.

          Und zum Dreierpasch problem. Die Zahl die gewürfelt wurde würde ich als Integer speichern und dann wäre wohl das einfachste durch zuvergleichen. Mir fällt nix besseres ein.
          Das finde ich auch besser. Durch die vielen Text-Vergleiche wird der Code unübersichtlich; deshalb habe ich keine Antwort gewagt.

          Wie wird es denn beim Vierer-Pasch oder beim FullHouse?

          Gruß Jürgen

          Comment


          • #6
            ja das hab ich mich auch gefragt wie es bei so würfen mit noch mehr bedingen aussehen könnte. aber wegen den textboxen muss ich mal schauen die ersten 11 genannten sind ja für den spieler später gar nicht mehr sichtbar, dadurch soll VB.Net einfach nur erkennen können welchen würfel er in den einzelnen pictureBoxen anzeigen soll. aber die einträge wüste ich sonst nicht wie man die machen könnte.. der spieler soll ja schliesslich seine punkte sehen können die er schon hat.

            so soll es später in etwa aussehen.. natürlich kommen noch ein paar Grafiken rein
            http://i209.photobucket.com/albums/b...ck/Kniffel.jpg
            Zuletzt editiert von Skyce; 08.01.2009, 18:06. Reason: Bild anhängen

            Comment


            • #7
              Hallo,

              Du solltest zwischen der eigentlichen Funktionalität (interne Registrierung der Würfe, interne Auswertung und Prüfung) und der Darstellung für den Anwender trennen. Eine TextBox hat mit der Auswertung nix zu tun: wenn sie für den Spieler gar nicht mehr sichtbar sein soll, ist es sowieso Quatsch, für irgendetwas eine TextBox zu nehmen; dafür wird ein Typ genommen, der dafür passt.

              Dass Du während der Testphase zusätzliche Anzeigen brauchst, ist kein Widerspruch dazu. Aber Vorrang bei der Auswahl eines Typs muss die Bedeutung für die Funktion haben, nicht für die Anzeige.

              Vorschlag: Mach eine eigene Klasse Wurf. Die hat vor allem ein int[5]-Array. Bei jedem Wurf werden per Random die 5 Werte eingetragen und sofort ausgewertet: welche Bedingungen sind erfüllt, welche Punktzahl gäbe es dafür. In der Klasse kannst Du auch zählen, wie viele neue Würfe noch möglich sind und welcher der Würfel dabei benutzt werden darf.

              Allgemeiner Tipp: Mach die einzelnen Methoden möglichst einfach und übersichtlich!

              Gruß Jürgen

              Comment


              • #8
                Danke an alle,
                okay wie gesagt kenn ich micht mit VB.Net noch nicht so gut aus, dass man eine eigene Klasse so der Art gestalten kann aber die Idee hört sich sehr gut an ich werde es so schnell wie möglich ausprobieren.
                Die Textboxen habe ich also wie diese Klasse behandelt oder wie kann ich das verstehen? Habe dort ja auch erst einen String hineinschreiben lassen und danach durch ein Array gesplittet..

                Könntest du mir vielleicht noch ein kleines Beispiel dafür posten, nur wenn es nicht zuviel Aufwand ist natürlich

                Comment


                • #9
                  Nun hinter der Textbox steht ja auch eine Klasse. Du hast die Textboxen dazu verwendet irgendwelche Würfelwerte zu speichern. Das ist natürlich nicht optimal, denn eine Textbox ist wie Jürgen schon erwähnt hat etwas zur Visualisierung. Aber nicht zum speichern und auswerten von Werten. Dafür gibt es Variablen. Variablen sind auch in Klassen enthalten und speichern deren Zustände. Auf diese Variablen bekommst du über Eigenschaften Zugriff. Wenn du Textbox1.Text abrufst ist .Text die Eigenschaft und der Wert den du zurück bekommst ist in einer Variable in der Textbox Klasse gespeichert. Dann gibt es noch Methoden einer Klasse. Beim Beispiel der Textbox ist das zum Beispiel .Undo diese Methode macht die letzte Änderung rückgängig. Zusammenfassen können wir folgendes sagen:

                  Eine Klasse bildet das Gründgerüst der ObjektorientiertenProgrammierung. Sie beinhaltet Variablen zum Speichern von Werten, Zuständen oder ähnlichem. Diese Variablen sind von außen nicht zugänglich. Dafür stellt die Klasse aber Eigenschaften (Propertys) bereit. Mit ihnen ist es möglich Zustände zu überprüfen oder sogar zu ändern. Außerdem gibt es noch Methoden um komplexere Dinge auszuführen.

                  Ein Beispiel noch: Wir nehmen als Beispiel ein Auto. Dieses Auto ist unsere Klasse, denn es gibt viele Autos. Diese Autos haben alle eines gemeinsam --> sie können Fahren. Dies ist eine Methode unserer Klasse, denn sie ist allen gemein, ähnlich der Rückgängig Aktion einer Textbox. Allerdings unterscheiden sich die Autos durch Farbe, Anzahl der Türen, Form etc. das sind also alles Eigenschaften unserer Autos die sie Einzigartig machen. So wie ein gewisser Text es ermöglicht eventuell visuell die eine Textbox von der anderen zu Unterscheiden.

                  Ich bitte dich die weiteren Grundlagen, wie Vererbung etc. noch einmal genau nachzulesen, sonst glaub ich bist du sehr verloren. Eine gute Grundlage bietet das Openbook vom GalileoVerlag. Es ist im Internet sogar kostenlos nutzbar und zugänglich. Je nach Version vom VisualStudio die du benutzt empfehl ich dir folgende Bücher durchzulesen:
                  Außerdem empfehle ich dir noch das Buch über C#, vielleicht kommst du mit dem Lesen der Code passagen nicht zurecht, jedoch finde ich dass die grundzüge der Objektorientierten Programmierung hier in Kapitel 3 recht gut umschrieben sind.
                  Hier klicken für Kapitel 3 des C# Buches


                  Ich hoffe das hilft dir ein wenig. Mit diesen Ansätzen sollte es dir, bei Lesen des Materials, möglich sein dein Problem in den Griff zu bekommen und von einer ganz anderen Seite anzugehen.

                  Übrigens im Großen und Ganzen spricht mich das Grunddesign deiner Anwendung schon sehr an.

                  Eine gute Nacht wünscht

                  Daniel

                  Edit: NOch als Ergänzung zu Jürgens Klassengedanken. Dein Problem komplett abstahiert würde bedeuten du brauchst eine Klasse Würfel. Mögliche Werte 1-6 und dieser Würfel besitzt eine Methode Wurf --> diese lässt dann einen neuen Wert des Würfels nach zufall berechnen Mehrere Würfelklassen würden sich dann gut zusammenfassen lassen in einer Klasse die die Würfel beherbergt und prüfen kann was mit dem Gewürfelten möglich ist. In diesem Sinne Gute Nacht
                  Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

                  Comment


                  • #10
                    Vielen Dank für die tolle Erklärung das-d =) Ich werde mich dann demnächst mal in das Buch reinlesen und versuchen Visual Basic besser zu verstehen. wusste noch nicht dass man wert auch anders speichern kann daher hab ich textboxen genommen
                    danke das dich mein grundgerüst anspricht aber ich werd mal sehen wie ich das besser lösen kann.

                    Comment

                    Working...
                    X