GLBasic forum

Other languages => GLBasic - de => Topic started by: x-tra on 2008-Apr-02

Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
Code (glbasic) Select
                   DIM brett[9][9]


FOR a = 0 TO 9
    FOR b = 0 TO 9
                               brett[a][b] = 0
    NEXT
NEXT
warum kommt hier die fehlermeldung "Ausserhalb des DIM Bereichs"


ich verzweifle grad.....


[edit] ich habs schon, wußte nicht, dass man lieber 0 -10 nehmen soll, und dann immer -1.  warum auch immer, aber funktioniert jetzt.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: D2O on 2008-Apr-02
DIM brett[9][9]  // je 9 felder erstellen ;)

// 0- 9 sind 10 felder, also 0-8 machen :)
FOR a = 0 TO 8
    FOR b = 0 TO 8
                               brett[a] = 0
    NEXT
NEXT
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
achso, nadann.....dachte dim fängt auch bei 0 an.


P.S. da hab ich gleich mal eine andere Frage.Wie kann ich in solch einem Dim       Types?

       Womit auch immer, kann mir das jemand kurz anhand von einem Beispiel erklären, also im feld
        Und wie kann man diese dann gezielt auslesen?
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-02
Code (glbasic) Select
TYPE Tabcd
 a
 b
 c
 d
ENDTYPE

LOCAL abcd[] AS Tabcd

DIM abcd[100]
abcd[99].a = 42
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
ich weiß dass es vielleicht unnötig ist, aber geht das auch mit zweidimensionalen dims?

ich will eine art schachbrett machen, welches mit sprites, bzw. tiles gefüllt werden soll.
und dann durch verschieben der tiles werden kombinationen erzeugt, deren resultat die löschung derer ist.und dann füllen sich von oben die felder wieder neu.also alles rutscht wieder nach unten, ähnlich wie tetris, nur mit einem ständig gefüllten spielfeld.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-02
Code (glbasic) Select
LOCAL abcd[] AS Tabcd
DIM abcd[15][24]
Yo, geht.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
super, danke, hoffe mal ich bekomm das alles so hin, wie ich will.


und dann müsste es heißen:
Code (glbasic) Select
abcd[x][y].a = 42richtig?
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-02
jo.
Wenn Du Zeilen haben willst, kannst Du's auch so machen:
Code (glbasic) Select
TYPE TZeile
   werte[20] // 20 Werte (x) pro Zeile
ENDTYPE

LOCAL feld[] AS TZeile

DIM feld[30] // Zeilen

feld[iZeile].werte[ispalte] = wert
DIMDEL feld[], iZeile // Zeile rauswerfen

LOCAL z AS TZeile
DIMPUSH feld[], z // Zeile anhängen
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
ich hab das jetzt nur überflogen, aber ich will ein feld also dim mit x spalten und y zeilen erstellen, und in jedem x, y feldchen sollen mehrere daten liegen, also via types.

ist mein ansatz da richtig, oder nicht.

dein beispiel sieht doch etwas komplizierter aus.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-02
Sieht es?
Ja, der Vorteil ist dann, wenn die Zeile in einem TYPE ist, dass Du mit DIMPUSH und DIMDEL ganze Zeilen auf einmal löschen kannst.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
naja ich will in meinem code keine zeilen löschen.

kennst du bejeweled? dann weißt du was ich meine.

ich will so ein spiel schreiben.

hatte so einen grundsatz in einem bb forum gesehen, und umgeschrieben für glb.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Schranz0r on 2008-Apr-02
Gernot seine Methode ist wohl die schnellste!
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-02
Für ein reines 2D Feld ist ein Feld besser (also - mein erstes Beispiel).
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Schranz0r on 2008-Apr-02
Naja kommt auch die große drauf an :)
Und ich glaub Bejuweld hatte ja eine feste Faldanzahl?
Da wird der wohl den unterscheid zu einen LEVEL[X][Y][Felder_pro_Feld] net merken :D
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
also würde ich das ganze eindimensional machen, und mittels den types definiere ich ja auch x und y koordinaten des feldinhaltes, bspw. ein tile.
hab ich das jetzt richtig so verstanden?

oder wie würdet ihr sowas machen?

ein 10x10 spielbrett gefüllt mit bsp. 3 unterschiedlichen stein(tile)arten.
wenn ich zwei austausche durch anklicken und sich dadurch eine kombination aus 3 steinen ergibt, verschwinden diese und die darüberliegenden steine fallen nach, sowie wird das spielfeld wieder bis zum rand oben gefüllt.

jemand noch ein paar denkanstösse dazu.

wenn möglich easytounderstand, hab ne weile nix mehr programmiert, war paar monate mit webdesign beschäftigt und muss mich erst wieder reinfrickeln.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Schranz0r on 2008-Apr-02
LEVEL[X][Y] = Steinsorte

so würde ich es machen ;)
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
soweit bin ich ja schon gewesen, nur will ich auch animationen einbinden, bzw. wenn steine fallen, sollen diese auch fallen und nicht nur die position ändern.ich denke dazu müssen koordinaten vorhanden sein, um die tiles so verschieben.und so muss ich ja auch jedem feld koordinaten zuweisen.

hier mein bisheriger code:

Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
LIMITFPS 20
 x=0
 y=0
 TileSize = 30
 tileX = 10
 tileY = 10
                    DIM feld[tileX][tileY]



feld[1][1] = 2
feld[1][2] = 1
feld[1][3] = 3
feld[2][1] = 2
feld[3][0] = 3
   WHILE TRUE


      FOR x = 0 TO tileX-1
      FOR y = 0 TO tileY-1

     IF y <> 9

             IF feld[x][y+1] = 0
                 feld[x][y+1] = feld[x][y]
                 feld[x][y] = 0

             ENDIF

     ENDIF



              IF feld[x][y] = 0 THEN DRAWRECT (x*TileSize),(y*TileSize), TileSize, TileSize, RGB(0, 0, 0)

              IF feld[x][y] = 1 THEN DRAWRECT (x*TileSize),(y*TileSize), TileSize, TileSize, RGB(255, 0, 0)

              IF feld[x][y] = 2 THEN DRAWRECT (x*TileSize),(y*TileSize), TileSize, TileSize, RGB(0, 255, 0)

             IF feld[x][y] = 3 THEN  DRAWRECT (x*TileSize),(y*TileSize), TileSize, TileSize, RGB(0, 0, 255)

      NEXT
     NEXT

 SHOWSCREEN
WEND
erstmal so zum test, und weil ich den code umschreiben musste.
die steine fallen nach unten, aber ich würde das halt gern sehen, wie sie langsam nach unten gleiten, hat jemand eine idee?
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Schranz0r on 2008-Apr-02
Du musst dir die Zielposition merken und dann pro durchlauf eins nach unten wandern.
Wenn Ziel erreicht, dann  ist die neue Position der Wert vom gewanderten Stein :)
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-02
Uhhh kannst du mir das mal codeschnippseln, wäre lieb.

Also den Gedanken hatte ich schon ähnlich, dass der Wert vom vorherigen Feld erst nach dem nach unten bewegen angenommen wird.

Wie merke ich mir diese Position?Da es ja theoretisch für viele Steine zutreffen kann.

Achja, das Drawrect wird später durch ein tile bzw. sprite ersetzt.


so hab das jetzt mal umgestellt auf sprites und mit einem schicken hintergrund.im anhang mal zum testen, und vielleicht nen tipp geben.

game.zip - 0.40MB (http://www.zshare.net/download/9970539bf86d93/)


so bin etwas weiter, gernot hat mir in einem anderen thread ein wenig weitergeholfen.



Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 1
LIMITFPS 60
 x=0
 y=0
 TileSize = 50   //laenge/breite der sprites
 tiles = 100        
 rand = 50    //Randverschiebung
  DIM feld[tiles]


feld[40] = 2
feld[50] = 2
feld[51] = 2


LOADSPRITE "box1.bmp",1
LOADSPRITE "box2.bmp",2
LOADSPRITE "box3.bmp",3
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"

WHILE TRUE


  FOR x = 0 TO tiles-1

         IF x < 90

             IF feld[x+10] = 0
                 feld[x+10] = feld[x]
                 feld[x] = 0
             ENDIF

          ENDIF
                                     
                                                                      boxx = ((MOD(x,10)*TileSize)+rand)
                                                                      boxy = (((INTEGER(x/10))*TileSize)+rand)


              IF feld[x] = 0 THEN DRAWSPRITE 4, (boxx),(boxy)

              IF feld[x] = 1 THEN DRAWSPRITE 1, (boxx),(boxy)

              IF feld[x] = 2 THEN DRAWSPRITE 2, (boxx),(boxy)

              IF feld[x] = 3 THEN  DRAWSPRITE 3, (boxx),(boxy)
             
             
  NEXT
       SHOWSCREEN
WEND
jetzt muss ich nur noch das nach unten wandern hinbekommen....


so update, bzw. neuer code.
wollte nur nen type erstellen, aber kommt fehler.

bitteschön, bzw. gernot kannst du mal schauen?

Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 1
LIMITFPS 60
 x=0
 y=0
 TileSize = 50   //laenge/breite der sprites
 tiles = 100        
 rand = 50    //Randverschiebung
             
///Typedefinition            
           TYPE Tinfo
             altx
             alty
             neux
             neuy
             ENDTYPE
 
             LOCAL feld[] AS Tinfo  
///Ende Typedefinition

///Dimensionierung
  DIM feld[tiles]
///Ende Dimensionierung

///Zufällige Sprites als Test
feld[40] = 2
feld[50] = 2
feld[51] = 2
///.....


///Material laden
LOADSPRITE "box1.bmp",1
LOADSPRITE "box2.bmp",2
LOADSPRITE "box3.bmp",3
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"
///Ende Material laden

///Hauptschleife
WHILE TRUE


  FOR x = 0 TO tiles-1

         IF x < 90

             IF feld[x+10] = 0
                 feld[x+10] = feld[x]
                 feld[x] = 0
             ENDIF

          ENDIF
                                     
                                                                      boxx = ((MOD(x,10)*TileSize)+rand)
                                                                      boxy = (((INTEGER(x/10))*TileSize)+rand)


              IF feld[x] = 0 THEN DRAWSPRITE 4, (boxx),(boxy)

              IF feld[x] = 1 THEN DRAWSPRITE 1, (boxx),(boxy)

              IF feld[x] = 2 THEN DRAWSPRITE 2, (boxx),(boxy)

              IF feld[x] = 3 THEN  DRAWSPRITE 3, (boxx),(boxy)
             
             
  NEXT
       SHOWSCREEN
WEND

///Ende Hauptschleife
hier die Fehlermeldung:

Code (glbasic) Select
_______________________________________
*** Configuration: WIN32 ***
precompiling:
GPC - GLBasic Precompiler V.2008.073 - 3D, NET
"aqua.gbas"(7) warning : implicitly created GLOBAL  : x
"aqua.gbas"(8) warning : implicitly created GLOBAL  : y
"aqua.gbas"(9) warning : implicitly created GLOBAL  : TileSize
"aqua.gbas"(10) warning : implicitly created GLOBAL  : tiles
"aqua.gbas"(11) warning : implicitly created GLOBAL  : rand
"aqua.gbas"(58) warning : implicitly created GLOBAL  : boxx
"aqua.gbas"(59) warning : implicitly created GLOBAL  : boxy
Wordcount:35 commands

compiling:
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp: In function `int __GLBASIC__::__MainGameSub_()':
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:39: error: no match for 'operator=' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](40, 0, 0, 0) = 2'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp_class.h:18: note: candidates are: __GLBASIC__::Tinfo& __GLBASIC__::Tinfo::operator=(const __GLBASIC__::Tinfo&)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:41: error: no match for 'operator=' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](50, 0, 0, 0) = 2'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp_class.h:18: note: candidates are: __GLBASIC__::Tinfo& __GLBASIC__::Tinfo::operator=(const __GLBASIC__::Tinfo&)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:43: error: no match for 'operator=' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](51, 0, 0, 0) = 2'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp_class.h:18: note: candidates are: __GLBASIC__::Tinfo& __GLBASIC__::Tinfo::operator=(const __GLBASIC__::Tinfo&)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:68: error: no match for 'operator==' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) == 0'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note: candidates are: DGInt __GLBASIC__::operator==(int, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(int, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, double)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, double)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:73: error: no match for 'operator=' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) = 0'
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp_class.h:18: note: candidates are: __GLBASIC__::Tinfo& __GLBASIC__::Tinfo::operator=(const __GLBASIC__::Tinfo&)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:83: error: no match for 'operator==' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) == 0'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note: candidates are: DGInt __GLBASIC__::operator==(int, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(int, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, double)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, double)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:86: error: no match for 'operator==' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) == 1'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note: candidates are: DGInt __GLBASIC__::operator==(int, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(int, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, double)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, double)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:89: error: no match for 'operator==' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) == 2'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note: candidates are: DGInt __GLBASIC__::operator==(int, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(int, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, double)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, double)
C:\Users\Nutzer\AppData\Local\Temp\glbasic\gpc_temp0.cpp:92: error: no match for 'operator==' in '(&feld)->__GLBASIC__::DGArray::operator() [with T = __GLBASIC__::Tinfo](#`fix_trunc_expr' not supported by dump_expr#, 0, 0, 0) == 3'
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note: candidates are: DGInt __GLBASIC__::operator==(int, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(int, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(float, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(double, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(__GLBASIC__::CGStr, double)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, __GLBASIC__::CGStr)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, const __GLBASIC__::DGStr&)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, int)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, float)
C:/Program Files/GLBasic/Compiler/platform/Include/glb.h:232: note:                 DGInt __GLBASIC__::operator==(const __GLBASIC__::DGStr&, double)
*** FATAL ERROR - Bitte die Compiler-Ausgabe ins Forum kopieren
_______________________________________
*** Fertig ***
Zeit: 1.7 sek
Erstellen: 0 erfolgreich
*** 1 FEHLGESCHLAGEN ***
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-03
Code (glbasic) Select
LOCAL feld[] AS Tinfo  
DIM feld[tiles]
feld[40] = 2
Aua! feld[] ist ein Feld von "Tinfo"s. Aber Du weist einem Tinfo den Wert "2" zu!?
Also - entweder feld[] ist nur ein Feld von Zahlen, oder
feld[40].altx = 2
oder so... Kapiert?

Schon doof, dass der Compiler nicht meckert. Muss ich ändern.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-03
achso, ich dachte man kann einmal dem feld[] einen wert zuweisen, und die types sind seperat.
mit der definition eines types fällt somit die möglichkeit weg dem array feld[] einen einzelnen wert zuzuweisen, weil an dessen stelle sozusagen jetzt das type steht.(ein hub für dim feld[] sozusagen)

richtig?

so hier?

Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 1
LIMITFPS 60
 x=0
 y=0
 TileSize = 50   //laenge/breite der sprites
 tiles = 100        
 rand = 50    //Randverschiebung
             
///Typedefinition            
           TYPE Tinfo
             altx
             alty
             neux
             neuy
             box
             ENDTYPE
 
             LOCAL feld[] AS Tinfo  
///Ende Typedefinition

///Dimensionierung
  DIM feld[tiles]
///Ende Dimensionierung

///Zufällige Sprites als Test
feld[40].box = 2
feld[50].box = 2
feld[51].box = 2
///.....


///Material laden
LOADSPRITE "box1.bmp",1
LOADSPRITE "box2.bmp",2
LOADSPRITE "box3.bmp",3
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"
///Ende Material laden

///Hauptschleife
WHILE TRUE


  FOR x = 0 TO tiles-1

         IF x < 90

             IF feld[x+10].box = 0
                 feld[x+10].box = feld[x].box
                 feld[x].box = 0
             ENDIF

          ENDIF
                                     
                                                                      boxx = ((MOD(x,10)*TileSize)+rand)
                                                                      boxy = (((INTEGER(x/10))*TileSize)+rand)


              IF feld[x].box = 0 THEN DRAWSPRITE 4, (boxx),(boxy)

              IF feld[x].box = 1 THEN DRAWSPRITE 1, (boxx),(boxy)

              IF feld[x].box = 2 THEN DRAWSPRITE 2, (boxx),(boxy)

              IF feld[x].box = 3 THEN  DRAWSPRITE 3, (boxx),(boxy)
             
             
  NEXT
       SHOWSCREEN
WEND

///Ende Hauptschleife
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-03
Ich wollte jetzt keinen extra Thread aufmachen, da ich immer noch an meinem Quellcode hänge, und es hilft aller Kaffee nichts, ich muss feststellen, dass man mit der Zeit die eigenen Fehler nicht mehr sieht.

Kann mir jemand, vielleicht sogar Schranzi helfen?fg.

Ich hab das jetzt mal mit dem Wandern der Sprites versucht, aber irgendwas mach ich wohl total falsch, aber ich seh grad im Moment garnicht durch.
In paar Stunden sieht das wohl schonwieder anders aus, aber grad blick ichs net.

Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 1
LIMITFPS 60
 x=0
 y=0
 TileSize = 50   //laenge/breite der sprites
 tiles = 100        
 randy = 50    //Randverschiebung
 randx = 49          
///Typedefinition            
           TYPE Tinfo
             posx
             posy
             posneuy
             box
             ENDTYPE
 
             LOCAL feld[] AS Tinfo  
///Ende Typedefinition

///Dimensionierung
  DIM feld[tiles]
///Ende Dimensionierung

///Zufällige Sprites als Test
feld[1].box = 2
feld[2].box = 3
feld[3].box = 2
feld[4].box = 2
feld[5].box = 3
feld[6].box = 2
feld[7].box = 2
feld[8].box = 2
feld[9].box = 3
feld[10].box = 2
///.....


///Material laden
LOADSPRITE "pfeil.png",20
LOADSPRITE "box1.bmp",1
LOADSPRITE "box2.bmp",2
LOADSPRITE "box3.bmp",3
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"
///Ende Material laden

///Hauptschleife
WHILE TRUE

  FOR x = 0 TO tiles-1

         IF x < 90
//////////////////////////////////////////////////////////////////////////////////////////////////////
             IF feld[x+10].box = 0
                 stp = 1
                 feld[x].posneuy = feld[x].posy + stp
                 IF feld[x].posy = feld[x+10].posy
                        feld[x+10].box = feld[x].box
                        stp = 0
                 ENDIF      
                 feld[x].box = 0
             ENDIF

          ENDIF
                                           boxx = ((MOD(x,10)*TileSize)+randx)
                                                    feld[x].posx = boxx                
                                           boxy = (((INTEGER(x/10))*TileSize)+randy)
                                                    feld[x].posy = boxy

              IF feld[x].box = 0 THEN DRAWSPRITE 4, (boxx),(boxy)

              IF feld[x].box = 1 THEN DRAWSPRITE 1, (boxx),(boxy)

              IF feld[x].box = 2 THEN DRAWSPRITE 2, (boxx),(boxy)

              IF feld[x].box = 3 THEN  DRAWSPRITE 3, (boxx),(boxy)
             
  NEXT
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//mausbewegung
MOUSESTATE mx, my, b1, b2
DRAWSPRITE 20, mx, my
//mausbewegung ende

       SHOWSCREEN
WEND

///Ende Hauptschleife
ich entschuldige mich auch gleich mal wegen dem doppelpost, kann auch gern zusammengeführt werden, nur ich wollt schnell für aufmerksamkeit sorgen, da ich grad laune hab das spiel bald fertig zu haben.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Schranz0r on 2008-Apr-03
Ich hab gestern auch mal ein wenig versucht, mach aber selber einen Fehler beim runterrutschen ^^
Muss erst selber gucken dann stell ich es online für jedermann ;)
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-03
na aber ich bin hoffentlich mal schon nahe dran, so bisschen positives denken halt.
aber ich wart auf deinen post, ich blick grad nix mehr.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-03
so...
Code (glbasic) Select
IF block[x][y] = leer
 FOR neuy = y-1 TO 1 STEP -1
    block[x][neuy] = block[x][neuy-1]
 NEXT
 block[x][0] = neuer_zufallsblock();

ENDIF
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-03
ich hab nur noch ein eindimensionales array, also block
aber das habe ich sowieso, denn ich hab ihn versucht an meinen obigen post anzupassen, geht nicht.

ich hab dann mal selber überlegt, und war bei folgender lösung:

1. Ursprungsfeld mit 0 sozusagen vom sichtbaren sprite entfernen.
2. mittels drawsprite beginnen an den x, y koordinaten des ursprungssprites auf der y koordinate nach unten wandern.
3. wenn y position vom zielsprite erreicht, zielfeld feld
nur die umsetzung bekomm ich nicht hin.

es sieht aus wie vorher, nr ein sprite hat eine position wo es nun garnicht hingehört, nämlich nicht mehr im spielfeld, sondern im rahmen.

mmmm gernot, kannst du eventuell ein paar easy comments bei deinem lösungsvorschlag posten, zum besseren verständnis.

und auf schran0rs lösung bin ich mal gespannt, ist bestimmt total einfach, man muss nur drauf kommen...


[edit] okay auf ein neues, denke es wäre richtig, aber es funktioniert nicht, obwohl ich dachte es müsste klappen.vielleicht ja jemand wo der fehler liegt.

Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 1
LIMITFPS 60
 x=0
 y=0
 TileSize = 50   //laenge/breite der sprites
 tiles = 100
 randy = 50    //Randverschiebung
 randx = 49
///Typedefinition
           TYPE Tinfo
             posx
             posy
             posneuy
             box
             alt
             marker
             zahl
             boxalt
             ENDTYPE

             LOCAL feld[] AS Tinfo
///Ende Typedefinition

///Dimensionierung
  DIM feld[tiles]
///Ende Dimensionierung

///Zufällige Sprites als Test
feld[1].box = 2
feld[2].box = 3
feld[3].box = 2
feld[4].box = 2
feld[5].box = 3
feld[6].box = 2
feld[7].box = 2
feld[8].box = 2
feld[9].box = 3
feld[10].box = 2
///.....


///Material laden
LOADSPRITE "pfeil.png",20
LOADSPRITE "box1.bmp",1
LOADSPRITE "box2.bmp",2
LOADSPRITE "box3.bmp",3
LOADSPRITE "boxclear.png",4
LOADBMP "hintergrund.bmp"
///Ende Material laden

///Hauptschleife
WHILE TRUE

  FOR x = 0 TO tiles-1



IF x < 90

      IF feld[x+10].box = 0
          IF feld[x].marker = 0
           feld[x].alt = feld[x].posy
            feld[x].zahl = 50
             feld[x].boxalt=feld[x].box
          ENDIF

          feld[x].marker = 1

          DRAWSPRITE feld[x].box, feld[x].posx, (feld[x].alt-feld[x].zahl)
          feld[x].box = 0
          feld[x].zahl=feld[x].zahl+1
          IF feld[x].alt-feld[x].zahl = feld[x+10].posy THEN feld[x+10].box = feld[x].boxalt

      ENDIF
ENDIF


                                           boxx = ((MOD(x,10)*TileSize)+randx)
                                                    feld[x].posx = boxx
                                           boxy = (((INTEGER(x/10))*TileSize)+randy)
                                                    feld[x].posy = boxy

              IF feld[x].box = 0 THEN DRAWSPRITE 4, (boxx),(boxy)

              IF feld[x].box = 1 THEN DRAWSPRITE 1, (boxx),(boxy)

              IF feld[x].box = 2 THEN DRAWSPRITE 2, (boxx),(boxy)

              IF feld[x].box = 3 THEN DRAWSPRITE 3, (boxx),(boxy)

  NEXT
////////////////////////////////////////////////////////////////////////////////////////////////////////////
//mausbewegung
MOUSESTATE mx, my, b1, b2
DRAWSPRITE 20, mx, my
//mausbewegung ende


 SHOWSCREEN
WEND

///Ende Hauptschleife
ich glaub auf jeden fall muss von oben ja eins nachrutschen, sonst wird ja immer wieder das farblose von ganz oben runterrutschen.
es zeichnet irgendwie alle felder mit feld
nicht elegant, aber sowas könnte oder müsste ja da irgendwo rein.......nur funktioniert es bei mir nicht richtig.

Code (glbasic) Select
IF feld[1].box = 0 THEN feld[1].box = (RND(3)+1)
IF feld[2].box = 0 THEN feld[2].box = (RND(3)+1)
IF feld[3].box = 0 THEN feld[3].box = (RND(3)+1)
IF feld[4].box = 0 THEN feld[4].box = (RND(3)+1)
IF feld[5].box = 0 THEN feld[5].box = (RND(3)+1)
IF feld[6].box = 0 THEN feld[6].box = (RND(3)+1)
IF feld[7].box = 0 THEN feld[7].box = (RND(3)+1)
IF feld[8].box = 0 THEN feld[8].box = (RND(3)+1)
IF feld[9].box = 0 THEN feld[9].box = (RND(3)+1)
IF feld[10].box = 0 THEN feld[10].box = (RND(3)+1)
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-04
Also... ein 2-dimensionales Feld eindimensional abzubilden halte ich für ziemlichen Unfug. Warum!?
Das kostet nur Rechenzeit + Kopfscmerzen. Wri progammieren doch  nicht in FORTRAN.

Mach ein 2D-Feld und dann geht mein Code so wie er ist. Copy+Paste.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-04
ich hatte es ja erst 2d und da hieß es doch dann 1d würde besser gehen wegen den types.aber okay ich machs wieder 2d
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Kitty Hello on 2008-Apr-04
1D geht besser, wenn du die 2. Dimension in dem Type realisierst, weil Du dann Zeilen schnell tauschen kannst. Willst Du aber nicht.
Für Bejeweled is ein klassisches 2D Feld ideal.
Title: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: x-tra on 2008-Apr-04
[mal ein großes edit]

wir habens wieder mal fast um 3 Nachts, und ich poste hier mal nen aktuellen stand, aber nicht wundern, in der SUB "Movement" hauts wohl noch garnicht hin....

Nur meine Konzentration läßt langsam nach, und vielleicht erbarmt sich ja einer meiner, und hilft mir den code zu vervollstöndigen, dass er auch läuft.

so, nun schaut her:


Code (glbasic) Select
// --------------------------------- //
// Project: aqua
// Start: Tuesday, April 01, 2008
// IDE Version: 5.204
SETSCREEN 600, 600, 0
LIMITFPS 25
GOSUB variablen
GOSUB initdim
GOSUB material
GOSUB initfeld

WHILE TRUE
GOSUB statik
GOSUB movement
SHOWSCREEN
WEND

///Ende Hauptschleife


// ------------------------------------------------------------- //
// ---  VARIABLEN  ---
// ------------------------------------------------------------- //
SUB variablen:
GLOBAL TileSize = 50
GLOBAL tilesX = 10
GLOBAL tilesY = 10
GLOBAL randy = 50
GLOBAL randx = 49


ENDSUB // VARIABLEN




// ------------------------------------------------------------- //
// ---  INITDIM  ---
// ------------------------------------------------------------- //
SUB initdim:

             TYPE Tinfo
             posx
             posy

             box
             boxalt
             posyalt
             ENDTYPE

             GLOBAL  feld[] AS Tinfo



 DIM feld[tilesX][tilesY]



ENDSUB // INITDIM




// ------------------------------------------------------------- //
// ---  MATERIAL  ---
// ------------------------------------------------------------- //
SUB material:
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"


ENDSUB // MATERIAL




// ------------------------------------------------------------- //
// ---  INITFELD  ---
// ------------------------------------------------------------- //
SUB initfeld:
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
FOR x = 0 TO tilesX-1
 FOR y = 0 TO tilesY-1
 GLOBAL feld[x][y].posx = ((x*TileSize)+randx)
 GLOBAL feld[x][y].posy = ((y*TileSize)+randy)
 NEXT
NEXT

ENDSUB // INITFELD


// ------------------------------------------------------------- //
// ---  STATIC  ---
// ------------------------------------------------------------- //
SUB statik:

FOR x = 0 TO tilesX-1
FOR y = 0 TO tilesY-1

MOUSESTATE mx, my, b1, b2
DRAWSPRITE 20, mx, my
feld[x][y].boxalt = feld[x][y].box

IF y > 0
 feld[x][y-1].boxalt = feld[x][y-1].box
 feld[x][y-1].posyalt = feld[x][y-1].posy
ENDIF
IF b1 = 1
   IF mx >= feld[x][y].posx AND mx <= (feld[x][y].posx + 48) AND  my >= feld[x][y].posy AND my <= (feld[x][y].posy + 48)
    feld[x][y].box = 0
    feld[x][y-1].box = 0
ENDIF
ENDIF





IF feld[x][0].box = 0
     feld[x][0].box = (RND(5)+1)
ENDIF


              IF feld[x][y].box = 0 THEN DRAWSPRITE 4, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 1 THEN DRAWSPRITE 1, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 2 THEN DRAWSPRITE 2, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 3 THEN DRAWSPRITE 3, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 4 THEN DRAWSPRITE 5, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 5 THEN DRAWSPRITE 6, feld[x][y].posx,feld[x][y].posy

              IF feld[x][y].box = 6 THEN DRAWSPRITE 7, feld[x][y].posx,feld[x][y].posy

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



NEXT
NEXT

ENDSUB // STATIC




// ------------------------------------------------------------- //
// ---  MOVEMENT  ---
// ------------------------------------------------------------- //
//SUB movement:
FOR x = 0 TO tilesX-1
 FOR y = 0 TO tilesY-1
  IF y > 0
   IF feld[x][y].box = 0 AND  feld[x][y-1].box = 0
     feld[x][y-1].posyalt = feld[x][y-1].posyalt + 1
     DRAWSPRITE feld[x][y].boxalt, feld[x][y-1].posx, feld[x][y-1].posyalt
       IF feld[x][y-1].posyalt = feld[x][y].posy          
           feld[x][y].box = feld[x][y-1].boxalt            
        ENDIF              
             
   ENDIF              
  ENDIF
 NEXT
NEXT
//ENDSUB // MOVEMENT
ich weiß, die beiden letzten subs könnte man sicher zusammenfassen, aber der übersicht halber, vorerst einfach durchzusehen.

hoffe jemandem fällt was dazu ein....
Title: Re: Dim brett[a][b] mit werten füllen funktioniert irgendwie nich so
Post by: Heiko on 2013-Jun-03
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