GLBasic forum

Other languages => GLBasic - de => Topic started by: Schranz0r on 2013-Apr-07

Title: Game of Life ( mir war langweilig :) )
Post by: Schranz0r on 2013-Apr-07
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 :)
Code (glbasic) Select
// 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
Title: Re: Game of Life ( mir war langweilig :) )
Post by: S.O.P.M. on 2013-Apr-07
Total cool 8) So wenig Code aber doch ein recht komplex wirkender Effekt, hätte keinen Plan, wie man sowas macht.