Erst im Programm weiter nach komplett feld[x][y] korrekt gefüllt

Previous topic - Next topic

x-tra

ich will ein dim[10][10]    alle felder    feld
  • [y].box mit einem rnd wert füllen.

ansich kein problem.

aber es sollen weder nebeneinander noch über einander gleiche werte sein.

die habe ich so gelöst.

Code (glbasic) Select
   IF x >= 0
       IF x < 9
         IF feld[x][y].box = feld[x+1][y].box
            feld[x][y].box = 0
            feld[x+1][y].box = 0
         ENDIF
       ENDIF  
    ENDIF
IF feld[x][0].box = 0 THEN feld[x][0].box = (RND(6)+1)    
// ende rechts
// keine nebeneinander oben unten
IF y >= 0
       IF y < 9
         IF feld[x][y].box = feld[x][y+1].box
            feld[x][y].box = 0
            feld[x][y+1].box = 0
         ENDIF
       ENDIF  
    ENDIF
IF feld[0][y].box = 0 THEN feld[0][y].box = (RND(6)+1)
//unten ende
der wert 0 entspricht einem transparenten wert und soll eigentlich nicht erfüllt werden, ist aber für das spätere vorgehen notwendig.
zuerst soll aber einmal das spielfeld 10x10 gefüllt werden.

dies würde ich gern in eine extra routine bzw. sub packen.

aabbeerr......  es soll erst aus der sub rausspringen, wenn das feld zu den oben genannten bedingungen gefüllt ist.

wie würdet ihr das am elegantesten lösen, da ja mehrer bedingungen zu erfüllen sind.
und das spielfeld erst freigegeben werden soll, wenn es mit werten ausser 0 komplett gefüllt ist und keine gleichen werte neben- oder übereinander liegen.

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

x-tra

farben?

achso, du meinst wegen dem zufallswert?

das sind nur zahlen, die später als index für sprites dienen.

nur der wert "0" steht für ein transparentes sprite


so der code um das feld mit zufallswerten zu füllen ohne 3 kombinationen über- oder untereinander.

wert 0 ist aussen vor, und funktioniert alles in einem satz.

Code (glbasic) Select
FOR x = 0 TO tilesX-1
  FOR y = 0 TO tilesY-1
    feld[x][y].box = (RND(5)+1)
    WHILE ( y>1 AND feld[x][y-1].box = feld[x][y].box AND feld[x][y-2].box = feld[x][y].box) OR ( x>1 AND feld[x-1][y].box = feld[x][y].box AND feld[x-2][y].box = feld[x][y].box)
      feld[x][y].box = (RND(5)+1)
    WEND
  NEXT
NEXT