Author Topic: Game of Life ( mir war langweilig :) )  (Read 1722 times)

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5069
  • O Rly?
    • View Profile
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
« Last Edit: 2013-Apr-07 by Schranz0r »
I <3 DGArray's :D

PC:
AMD Ryzen 7 1700 @3.9GHz, 16GB HyperX Fury 3000MHz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: Game of Life ( mir war langweilig :) )
« Reply #1 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.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium