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

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5014
  • 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 2666Mhz 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