Bmx call-by-value, cant update TList objects
BlitzMax Forums/BlitzMax Beginners Area/Bmx call-by-value, cant update TList objects| 
 | ||
| I'm working on programming a "snakes" game in Blitzmax. This is basic idea; 1. The snake can move on tile objects which represents a big chessboard. The tiles are added to a TList. Each tile itself is a Type ("class") with some properties X,Y, tilenumber etc etc. 2. When the worm moves, the tile on which it is located gets a flag set. 3. This flagged tile is (temporarily) flagged as occupied. 4. My code loops throught the Tlist-"Chessboard" calling an update on each tile, like this: the code here was typed at work from my head in MS-Word, not in the compiler. it can contain (spelling) mistakes. 
Type MySnakesGame
 Method manage()
   Graphics(800,600,0);
  '//...add about 480 tiles (32x30 pixels) on 800x600 display..
   local chessboardList:TList = new TList;
   for Local count1:int = 0 to 470
      Local chessTile:clsTile = new clsTile;
      chessTile.X = 30;  '//ofcoz increments..
      chessTile.Y = 30;  '// same here
      chessTile.TileCounter = count1;
      chessTile.tiledOcuppiedBy = enumNobody;
      chessboardList.Addlast(chessTile);
   Next
   While not keyhit(key_escape)
     cls();
    '//player moves, flag the tile as occupied
     '//handle keybord input, new X/Y is at 'tilenumber'.
     Local objOccupiedTile1:clsTile =  clsTile(ChessboardList.ValueAtIndex(tilenumber));
     objOccupiedTile1.tiledOcuppiedBy = enumPlayer; '//this is suppeds to call-by-ref, or not?
    '// the display will be filling up, visually showing where your player was.
    For Local objTile1:clsTile = EachIn ChessboardList:TList
      objTile1.Update();
    Next
    flip();
  Wend
 EndMethod
 '// here sumthing strange happens, call by value?  Call-by-reference?
endType
 type clsTile
    field myImage:TImage;
    Field x:int;
    Field y:int;
 
     '//stupid constructur emulated. call this in your code.. Blitzmax forum exmaple ;).
    function Create:clsTile()
       local objTile3:clsTile = new clsTile
       objTile3.MyImage = loadImage("snakehead1.png");
        return objTile3;
    endfunction
    method update()
       If(Self.tiledOcuppiedBy = enumPlayer)       
          DrawImage(Self.MyImage, self.x, self.y);
       EndIf
    endmethod
 end type
The above attempts to; 1. fill a tlist chessboard containing tiles. 2. aloow the player to move onto a tile. 3. Flag the tile as occupied. 4. Loop through all tiles in chessboard, updating it. Problem: the clsTile.Update doesnt do anything. The tile isnt rendered. The reference obtained from the Tlist (probably) dont update the object it obtained. Is that true? How can i modify a object in Tlist by reference? | 
| 
 | ||
| This is going to be very tricky. Your clstile type doesn't have any X or Y attributes and isn't extended either. The same type doesn't have a TiledOccupiedby method or field either. In short, I don't think the code you have posted gives much chance in suggesting anything. How about waiting until you get home and posting the actual code? <edit> In answer to your question you can take the clstile off the list exactly as you have done and then call its update method. | 
| 
 | ||
| Here is the complete program code. Out of the box it wont run coz it needs a few .png files, which ofcoz can be swapped for any other image file. TIA for any help :) | 
| 
 | ||
| Just a hint, use [codebox] instead. |