Hi Leute,
hier ein kleines "Game of Life" nach Art von Conway ( link (http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life) )
Ihr könnte ein bisschen mit den Parametern rumspielen, tilesize z.B :)
// GAME OF LIFE
//
//###### REGELN ##################################
//
// Tote Zelle mit >= 3 Nachbarn = neugeboren
// lebende Zelle mit < 2 Nachbarn = tot
// lebende Zelle mit 2/3 Nachbarn = bleibt leben
// lebende Zelle mit > 3 = tot
//
// Lebenscheck = tmp_Leben[x][y][live]
// AnzeigeArray = Leben[x][y][live]
//
// werte%:
// --------
// 0 = lebt, true oder false
// 1 = lebensdauer 0-127 für die farbe :)
GLOBAL SX%= 640, SY%= 480, werte% = 2
GLOBAL Leben%[], tmp_Leben%[]
GLOBAL tilesize = 4
REDIM Leben[SX/tilesize+2][SY/tilesize+2][werte]
REDIM tmp_Leben[SX/tilesize+2][SY/tilesize+2][werte]
FOR x = 1 TO SX/tilesize
FOR y = 1 TO SY/tilesize
LOCAL rand = RND(2)
IF rand = 1
Leben[x][y][0]= 1
ENDIF
NEXT
NEXT
LOCAL timer, verzoegerung = 150
WHILE TRUE
IF timer < GETTIMERALL()
Array_Swap()
timer = GETTIMERALL()+verzoegerung
ENDIF
FOR x = 1 TO SX/tilesize
FOR y = 1 TO SY/tilesize
IF Leben[x][y][0] = 1
DRAWRECT x*tilesize,y*tilesize,tilesize,tilesize, RGB(255, 255-Leben[x][y][1]*2, 255-Leben[x][y][1]*2)
ENDIF
NEXT
NEXT
SHOWSCREEN
WEND
END
FUNCTION Array_Swap:
tmp_Leben[] = Leben[]
FOR x = 1 TO SX/tilesize
FOR y = 1 TO SY/tilesize
Check_Nachbarn(x,y)
NEXT
NEXT
Leben[] = tmp_Leben[]
ENDFUNCTION
FUNCTION Check_Nachbarn: x, y
LOCAL nachbarn%, es_lebt%
es_lebt = Leben[x][y][0]
// links
IF Leben[x-1][y][0] THEN INC nachbarn, 1
// rechts
IF Leben[x+1][y][0] THEN INC nachbarn, 1
// oben
IF Leben[x][y-1][0] THEN INC nachbarn, 1
// unten
IF Leben[x][y+1][0] THEN INC nachbarn, 1
// linksoben
IF Leben[x-1][y-1][0] THEN INC nachbarn, 1
// rechtsoben
IF Leben[x+1][y-1][0] THEN INC nachbarn, 1
// linksunten
IF Leben[x-1][y+1][0] THEN INC nachbarn, 1
// rechtsunten
IF Leben[x+1][y+1][0] THEN INC nachbarn, 1
// Tote Zelle mit = 3 Nachbarn = neugeboren
// lebende Zelle mit < 2 Nachbarn = tot
// lebende Zelle mit 2/3 Nachbarn = bleibt leben
// lebende Zelle mit > 3 = tot
IF tmp_Leben[x][y][1] < 127 THEN INC tmp_Leben[x][y][1], 1
IF nachbarn < 2 AND es_lebt = TRUE THEN tmp_Leben[x][y][0] = FALSE
IF nachbarn = 2 OR nachbarn = 3
IF nachbarn = 3 AND es_lebt = FALSE
tmp_Leben[x][y][0] = TRUE
tmp_Leben[x][y][1] = 0
ENDIF
IF nachbarn = 2 AND es_lebt = TRUE
//nix los hier!
ENDIF
ENDIF
IF nachbarn > 3 AND es_lebt = TRUE THEN tmp_Leben[x][y][0] = FALSE
ENDFUNCTION
Total cool 8) So wenig Code aber doch ein recht komplex wirkender Effekt, hätte keinen Plan, wie man sowas macht.