Zufallsgenerator für Memory

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

DonKrawallo

Betreff: Zufallsgenerator für Memory

BeitragMo, Jan 26, 2004 12:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich schreibe gerade ein Memory-Spiel.
Es sollen auf einem Spielfeld 16 Karten per Zufall verteilt werden.
Das heißt 8 Bilder und jedes Bild soll zweimal verteilt werden.
Kann mir bitte jemand helfen, wie ich das anstellen kann.


PS:Für mich ist das alles noch neu.




Gruß Don

Jan_

Ehemaliger Admin

BeitragMo, Jan 26, 2004 12:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist der Code zu sowas:

Zitat:
Graphics 320,240,0,2 ;Grafikmodus laden
SeedRnd MilliSecs() ;Zufallsgenerator setzten auf eine nichtberechenbare Zahl
Dim Karte(15) ;Kartenfelder Setzten
For Kartennummer=0 To 7 ;8 Kartenarten verteil schleife
For S= 0 To 1 ; 2 Karten gehören zu den 8
gelegt=0 ; Variable für die schleife!
Repeat ; Schleifenanfang
Nummer=Rand(0,15) ; Zufalls Zahl ermitteln (Zwischen 0 und 15 --> 16 Karten)
If Karte(nummer) = 0 Then ; Wenn Feld noch nicht Belegt
Karte(nummer) = Kartennummer ; Dann karte dorthin Legen
gelegt=1 ; Variable für schleife verlassen
End If ;Abfrage beendet
Until gelegt=1 ; Schleifenende
Next ; bis die 2. Karte gelegt
Next ; bis 8 Kartenartengelegt
For X= 0 To 3
For Y= 0 To 3
Text X*30,y*30,Karte((X*4)+Y) ;Kartennummern angeben
Next
Next
WaitKey() ; auf taste warten!


Kann das bitte jemand anders erklären?Ich habe es auskommertiert!

THx
between angels and insects

Jan_

Ehemaliger Admin

BeitragMo, Jan 26, 2004 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Etwas mehr! Bitte!

Code: [AUSKLAPPEN]
Graphics 320,240,0,2 ;Grafikmodus laden
SetBuffer BackBuffer()

Local KartenPaareAnzahl,X,Y
KartenPaareAnzahl=8

Bild=LoadAnimImage ("MemoryBilder.BMP", 32, 32, 0, KartenPaareAnzahl+1); lädt alle Bilder aus einer Datei. die Bilder müssen 8(+1 dsa verdeckt ist) sein und die Größe 32*32 haben!


SeedRnd MilliSecs()
Dim Karte(0)
Dim Aufgedeckt(0)

Karten_mischen(KartenPaareAnzahl)

;--------------------Das ein paar aufgedeckt sind und ein paar nicht!
For s= 0 To KartenPaareAnzahl*2
   Aufgedeckt(s)=Rand(0,1)
Next
;--------------------

Repeat
For X= 0 To 3
   For Y= 0 To 3
      If aufgedeckt((X*4)+Y) = 1 Then
         DrawImage Bild,X*40,y*40,Karte((X*4)+Y) ;Wird gezeichnet, wenn aufgedeckt!
      Else
         DrawImage Bild,X*40,y*40,KartenPaareAnzahl+1
      End If
   Next
Next
Flip
Until KeyHit(1)

Function Karten_mischen(KartenPaareAnzahl)
Dim Karte(KartenPaareAnzahl*2)
Dim Aufgedeckt(KartenPaareAnzahl*2)
For Kartennummer=0 To KartenPaareAnzahl-1
   For S= 0 To 1
      gelegt=0
      Repeat
         Nummer=Rand(0,KartenPaareAnzahl*2-1)
         If Karte(nummer) = 0 Then
            Karte(nummer) = Kartennummer
            gelegt=1
         End If
      Until gelegt=1
   Next
Next
End Function
between angels and insects

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragMo, Jan 26, 2004 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
das Prinzip ist einfach:
gib jeder Karte noch eine Zufallszahl (hier 16 karten),zb; rnd (0,255)
dabei spielt es keine Rolle ob 2 karten dann nachher mal die Gleiche zufalls Zahl bekommen
dann das feld anhand der Zahlen sortieren mit BubbleSort
und schon sind diese gemischt!

jetzt weiß ich aber nicht wie du deine Memorykarten verarbeitest um auf weitere Details eingehen zu können!
hier jetzt irgendwas zu coden ist ziemlich sinnlos, da ja schon Code vorhanden ist und du das dann garnicht gebrauchen kannst!
[BB2D | BB3D | BB+]
 

DonKrawallo

BeitragMo, Jan 26, 2004 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,
ich werde mal versuchen mit dem Code von oben klar zu kommen.

Wobei das Progamm beim starten immer folgende Fehlermeldung bringt:

Runtime Error Illegal Memory address


Gruß Don Question
 

Absoluter Beginner

BeitragMo, Jan 26, 2004 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
dim Feld(4,4)

For n=1 To 8
  For i=1 To 2
    Repeat
       x=Rand(1,4)
       y=Rand(1,4)
    Until feld(x,y)=0
    Feld(x,y)=n
  Next
Next


Erklärung:
Als erstes mal ein 4*4-Array erstellen, da passen ja jetzt 16 Karten rein, jede Karte hat eine Nummer (1 bis 8). Beim füllen des Arrays muß man nur aufpassen das man jede Karte genau 2 mal "speichert" dabei muß man wiederrum aufpassen das da nicht schon eine Karte hinterlegt war.
Das n gibt an welche Karte gerade dran ist, das i ist dazu da das jede Karte 2 mal gesichert wird. Jetzt werden x und y Koordinaten im Array zufällig gewählt, dies wird so lange gemacht bis die Position im Array noch unbelegt ist (keine Karte zugewiesen wurde). Wenn das nicht der Fall ist werden neue Koordinaten berechnet, ansonsten wird dem Array(x,y) die Kartennummer "mitgeteilt", und es geht wieder von vorne los, bis beide Next-Schleifen abgearbeitet sind, und das Array mit 2*8 Karten gefüllt worden ist

Zitat:
Hi,
das Prinzip ist einfach:
gib jeder Karte noch eine Zufallszahl (hier 16 karten),zb; rnd (0,255)
dabei spielt es keine Rolle ob 2 karten dann nachher mal die Gleiche zufalls Zahl bekommen
dann das feld anhand der Zahlen sortieren mit BubbleSort
und schon sind diese gemischt!


Versteh ich nicht, sortieren damit die Zahlen gemischt sind Question
Error Inside!

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDi, Jan 27, 2004 1:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi, da gibt es jetzt ein kleines Memo-Tutorial !
https://www.blitzforum.de/viewtopic.php?t=956
probierts aus!
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group