Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so

Previous topic - Next topic

Heiko

Soooo da ich das Bejeweled Thema nochmal aufgegriffen habe, ist etwas mehr code entstanden.

Soweit steht das Grundgerüst....

Man kann sogar spielen nur noch ohne animationsphasen.

Der Teil welcher dies bewirken soll, lautet:
Code (glbasic) Select
FOR x = 0 TO 9
FOR y = 1 TO 9
   IF feld[x][y].farbe = 0 THEN feld[x][y].ani = 1
    IF feld[x][y].ani = 1
       feld[x][y-1].pos_y = feld[x][y-1].pos_y + feld[x][y-1].count
       feld[x][y-1].count = feld[x][y-1].count + 0.0001
       IF feld[x][y-1].count = 50 THEN feld[x][y-1].count = 0
    ELSE 
      feld[x][y].farbe = feld[x][y-1].farbe
      feld[x][y-1].farbe = 0; feld[x][y].ani = 0
   ENDIF
NEXT
NEXT


wobei .farbe .ani .pos_y .count selbsterklärend sein sollten
.ani = animation 0 oder 1
.farbe = inhalt des feldes, wobei null ein leeres feld ist
.pos_y die y position eben
.count zählt in 1ér Schritten weiter für die Animation

funktioniert auch, nur dass beim starten des spiels das feld regulär gefüllt wird, und dann alle steine komplett nach unten wandern und somit das spielfeld leer ist.

P.S. hatte .count auf 50 gesetzt, habe .count bei den variablen nun mit 0 initiiert und nun gibt es auf dem Spielfeld lediglich die oberste Reihe, welche sich nun stetig nach unten bewegt.

-confused-

ohne animation und mit folgendem code funktioniert es jedoch:
Code (glbasic) Select
//FOR x = 0 TO 9
FOR y = 1 TO 9
  IF feld[x][y].farbe = 0
     feld[x][y].farbe = feld[x][y-1].farbe
     feld[x][y-1].farbe = 0
  ENDIF
NEXT
NEXT


hier noch der vollständigkeit halber der komplette quelltext, vielleicht hab ich ja was anderes übersehen.

Code (glbasic) Select
// --------------------------------- //
// Project: bejeweled_4
// Start: Sunday, June 02, 2013
// IDE Version: 10.283


SETCURRENTDIR("Media") // go to media files
SETSCREEN 500, 500, 0
LIMITFPS 60
//variablen
GLOBAL TileSize = 50
GLOBAL felder_x = 10
GLOBAL felder_y = 10
GLOBAL randy = 50
GLOBAL randx = 50
GLOBAL mx, my, b1, b2, flag

// Sprites
LOADSPRITE "pfeil.png",20
LOADSPRITE "box1.png",1
LOADSPRITE "box2.png",2
LOADSPRITE "box3.png",3
LOADSPRITE "box5.png",5
LOADSPRITE "box6.png",6
LOADSPRITE "box7.png",7
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"
//
// Type Felder
TYPE Tfeld
             pos_x
             pos_y
             farbe
             ani
             count = 50
             ENDTYPE

             GLOBAL  feld[] AS Tfeld

DIM feld[felder_x][felder_y]

FOR x = 0 TO 9
  FOR y = 0 TO 9

      feld[x][y].pos_x = x*TileSize
      feld[x][y].pos_y = y*TileSize

      feld[x][y].farbe = (RND(5)+1)

  NEXT
NEXT


//


WHILE TRUE
MOUSESTATE mx, my, b1, b2; IF mx >= 450 THEN mx = 450; IF my >= 450 THEN my = 450  //maus auslesen und begrenzen

FOR x = 0 TO 9
  FOR y = 0 TO 9

              IF feld[x][y].farbe = 0 THEN DRAWSPRITE 4, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 1 THEN DRAWSPRITE 1, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 2 THEN DRAWSPRITE 2, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 3 THEN DRAWSPRITE 3, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 4 THEN DRAWSPRITE 5, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 5 THEN DRAWSPRITE 6, feld[x][y].pos_x,feld[x][y].pos_y

              IF feld[x][y].farbe = 6 THEN DRAWSPRITE 7, feld[x][y].pos_x,feld[x][y].pos_y
// bei mausklick feld löschen
IF b1 = 0 THEN flag = 0
IF flag = 0 AND feld[x][y].farbe <> 0 AND b1 = 1
    IF mx >= feld[x][y].pos_x AND mx <= (feld[x][y].pos_x + 48) AND  my >= feld[x][y].pos_y AND my <= (feld[x][y].pos_y + 48)
      feld[x][y].farbe = 0
      flag = 1
    ENDIF
ENDIF

//Oberste Zeile mit neuen steinen füllen
IF y = 0 AND feld[x][y].farbe = 0
      feld[x][y].farbe = (RND(5)+1)
ENDIF

NEXT
NEXT
//x auf gleiche steine abfragen
FOR x = 0 TO 7
FOR y = 0 TO 9
     IF feld[x][y].farbe = feld[x+1][y].farbe AND feld[x+1][y].farbe = feld[x+2][y].farbe
        feld[x][y].farbe = 0; feld[x+1][y].farbe = 0; feld[x+2][y].farbe = 0;
     ENDIF
NEXT
NEXT

FOR x = 0 TO 9
FOR y = 0 TO 7
     IF feld[x][y].farbe = feld[x][y+1].farbe AND feld[x][y+1].farbe = feld[x][y+2].farbe
        feld[x][y].farbe = 0; feld[x][y+1].farbe = 0; feld[x][y+2].farbe = 0;
     ENDIF
NEXT
NEXT
//von oben nachfallen lassen
//FOR x = 0 TO 9
// FOR y = 1 TO 9
//   IF feld[x][y].farbe = 0
//      feld[x][y].farbe = feld[x][y-1].farbe
//      feld[x][y-1].farbe = 0
//   ENDIF
// NEXT
//NEXT


FOR x = 0 TO 9
FOR y = 1 TO 9
   IF feld[x][y].farbe = 0 THEN feld[x][y].ani = 1
    IF feld[x][y].ani = 1
       feld[x][y-1].pos_y = feld[x][y-1].pos_y + feld[x][y-1].count
       feld[x][y-1].count = feld[x][y-1].count + 0.0001
       IF feld[x][y-1].count = 50 THEN feld[x][y-1].count = 0
    ELSE 
      feld[x][y].farbe = feld[x][y-1].farbe
      feld[x][y-1].farbe = 0; feld[x][y].ani = 0
   ENDIF
NEXT
NEXT


   DRAWSPRITE 20, mx, my
   PRINT mx, 10, 20
   PRINT my, 10, 30

SHOWSCREEN
WEND