GLBasic forum

Other languages => GLBasic - de => Topic started by: knut on 2008-Jul-19

Title: Array füllen aber ohne wiederholung
Post by: knut on 2008-Jul-19
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
Title: Re: Array füllen aber ohne wiederholung
Post by: Quentin on 2008-Jul-19
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
Title: Re: Array füllen aber ohne wiederholung
Post by: knut on 2008-Jul-19
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.