Game of Life ( mir war langweilig :) )

Previous topic - Next topic

Schranz0r

Hi Leute,


hier ein kleines "Game of Life" nach Art von Conway ( link )
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
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

S.O.P.M.

Total cool 8) So wenig Code aber doch ein recht komplex wirkender Effekt, hätte keinen Plan, wie man sowas macht.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium