Array füllen aber ohne wiederholung

Previous topic - Next topic

knut

Ich hab mich mal ein bisschen mit den arrays und types hier beschäftigt und würde gern ein spielfeld generieren, sagen wir 10 mal 10 felder, gefüllt mit jeweils einer zufälligen zahl.

Soweit hab ich das auch geschafft, aber wie kann man eine abfrage unterbringen, das weder horizontal noch vertikal 3 gleiche zahlen nebeneinander liegen?

Also soweit hatte ich es ja schon:

Code (glbasic) Select
FOR x = 0 TO felderx-1
FOR y = 0 TO feldery-1
    Arr[x][y].Inhalt = (RND(9)+1)
next
next


Da füllt es aber eben alles zufällig und ich möchte jedoch keine drei aufeinanderfolgende gleiche Zahlen

Quentin

#1
schreib dir ein zweites Array, daß die Zahlen, die du auf dem Spielfeld haben willst, enthält. Aus diesem Array wählt zu zufällig ein Element aus, überträgst das in dein erstes Array und löschst den Eintrag im zweiten. Damit kannst du sicher sein, daß jeder Eintrag einmalig ist bzw. aus der Menge, die du haben willst.

Beispiel:
Code (glbasic) Select

DIM array1[10]
DIMDATA array2[], 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

FOR i = 0 TO 9
  idx = RND(9-i)
  array1[i] = array2[idx]
  DIMDEL array2[], idx
NEXT

FOR i = 0 TO 9
  PRINT array1[i], 0,i * 20
NEXT
SHOWSCREEN
MOUSEWAIT

knut

naja es dürfen ja schon zwei gleiche nebeneinander liegen.
ich hab da auch mal irgendwo so eine while schleife gesehen irgendwo eben, wo das während des füllens gemacht wird.

es können schon gern zwei nebeneinander liegen, nur 3 eben nicht.