array bla(x,y) mit zufallszahlen unter bedingung füllen

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

X-tra

Betreff: array bla(x,y) mit zufallszahlen unter bedingung füllen

BeitragFr, Apr 04, 2008 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
ich mach zwar nicht mehr viel mit bb aber vielleicht kann einer euer schlauen köpfe dennoch helfen.

ich will ein array bla(10,10) mit werten per zufallswerten zwischen 0 und 6 füllen.
aber es dürfen nie 3 gleiche werte in x oder y direkt aufeinander folgen.

also
000xx000 oder

00x00
00x00
00000

ist okay.

aber
00xxx00 oder

00x00
00x00
00x00

ist nicht erlaubt.

jemand eine idee?

dreamora doch sicher, oder?

achja es soll eine sub routine sein, die erst verlassen werden darf wenn die felder so gefüllt worden sind.
 

Shark

BeitragFr, Apr 04, 2008 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wenn ich dich richtig verstanden habe, dann willst
du nicht das bei X oder Y 3 Zahlen aufeinander folgen.

Kein Plan wie du es bei deinem Beispiel meinst, aber hier ist mal der Code so wie ich es verstanden hab.

Code: [AUSKLAPPEN]

;Aufgabe: Nie 3 Werte bei X oder Y sollen aufeinander folgen.

SeedRnd = MilliSecs()
;Dim wird erstellt mit 10 * 10 Feld´
Dim test%(10,10)
Local temp%
Local tempString$
;Routine
For x = 0 To 10
   For y = 0 To 10
      ;Falls noch keine 3 Werte erstellt wurden sind,
      ;wird nix überprüft
      If y < 2 Then
         test(x,y) = Int(Rnd(0,6))
      Else
         ;
         .startY
         test(x,y) = Int(Rnd(0,6))
         ;Alle Beide Positionen vor Y werden zu einem String gefügt
          tempString$=String(test(x,y),1)+String(test(x,y-1),1)+String(test(x,y-2),1)
         ;Jetzt wird Überprüft ob es 3 aufeinander folgende Zahlen sind
         Select tempString$
            Case "000","111","222","333","444","555","666"
               ;Falls 3 aufeinander folgende Zahlen vorhanden sind, dann wird
               ;zu startY gesprungen und von dort aus wird nochmal ein neuer
               ;Rnd Wert erstellt
               Goto startY
         End Select
      EndIf 
      ;Bei X ist das selbe Schema wie bei Y
      If x < 2 Then
         test(x,y) = Int(Rnd(0,6))
      Else
         .startX
         test(x,y) = Int(Rnd(0,6))
          tempString$=String(test(x,y),1)+String(test(x-1,y),1)+String(test(x-2,y),1)
         Select tempString$
            Case "000","111","222","333","444","555","666"
               Goto startX
         End Select
      EndIf          
   Next
Next

Graphics 800,600,16,2
SetBuffer BackBuffer()

;Feld wird gezeichnet
For x = 0 To 10
   For y = 0 To 10
      Text 10+15*x,10+15*y,test%(x,y)
   Next
Next 

WaitKey()
End


Ist es so wie du es gemeint hast?

mfg Shark
 

X-tra

BeitragFr, Apr 04, 2008 16:57
Antworten mit Zitat
Benutzer-Profile anzeigen
ich hab den code von einem anderen post hier übernommen und umgeschrieben für eine andere sprache.

schau dir das spiel bejeweled an, dann weißt du was ich meine.

es wird ein spielfeld erstellt mit zufälligen steinen, welche ja zu beginn noch keine dreierkombinationen ergeben sollen.

und die werte sind 1-6 also für 7 steine weil 0 ist ein transparentes tile.
 

Shark

BeitragFr, Apr 04, 2008 17:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
es wird ein spielfeld erstellt mit zufälligen steinen, welche ja zu beginn noch keine dreierkombinationen ergeben sollen.

Das macht doch mein Code!? er lässt keine 3 Kombination zu Wink

mfg Shark
 

X-tra

BeitragFr, Apr 04, 2008 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Dein code funktioniert noch nicht so richtig.

ab und zu gibt es noch 3er kombinationen.

hab grad mal getestet und hab mitten drin auf der y achse dreimal die 5 hintereinander gesehen.

ich selber weiß aber nun auch nicht, wie man das behebt.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group