cbLife - elämänpeli

Jaa meneillään olevat projektisi tai valmiit pelit muun yhteisön kanssa täällä.
Post Reply
User avatar
Kokkelkhan
Newcomer
Posts: 6
Joined: Tue Mar 15, 2011 9:25 pm
Location: Pk-seutu

cbLife - elämänpeli

Post by Kokkelkhan »

Tervehdys tännekin autiotaloon.

Kaivoin pitkästä aikaa vanhan kunnon CB:n esiin ja töräytin oman versioni Conwayn kuuluisuudesta.

Idea kaikille varmasti tuttu, joten asiaan.

Tuosta latauslinkkiä:
https://drive.google.com/file/d/0B0UknX ... sp=sharing
Päräjää...!
MaGetzUb
Guru
Posts: 1715
Joined: Sun Sep 09, 2007 12:35 pm
Location: Alavus

Re: cbLife - elämänpeli

Post by MaGetzUb »

Hyvältä näytti, koodailin itse kans tätä keväällä, mutta jostain syystä en saanut omaani toimimaan. :D Oletko katsonut tämän?
Solar Eclipse
Meneillä olevat Projektit:
We're in a simulation, and God is trying to debug us.
User avatar
Kokkelkhan
Newcomer
Posts: 6
Joined: Tue Mar 15, 2011 9:25 pm
Location: Pk-seutu

Re: cbLife - elämänpeli

Post by Kokkelkhan »

Ihan mielenkiintonen pätkä, thanks :)

Tässä muuten pohja omalle toteukselle:

Code: Select all

//Paina välilyöntiä

Const SW=800
Const SH=600
Rate=50         //Päivitysnopeus
cSize=50        //Solujen koko

sX=SW/cSize
sY=SH/cSize
cells=sX*sY
cell_i=1

SCREEN SW,SH,0,1

Dim cGrid(cells,4)
//1 = X 
//2 = Y
//3 = Elossa
//4 = Naapurit

//Alustetaan solut:
For y=1 To sY
    For x=1 To sX
        cGrid(cell_i,1)=x : cGrid(cell_i,2)=y : cGrid(cell_i,3)=Rand(0,1) : cGrid(cell_i,4)=0
        cell_i=cell_i+1
    Next x
Next y

Repeat
    If Timer()>record+Rate Then
        Gosub CheckNeighbours
        Gosub CellLife
        
        record=Timer()
    EndIf 
    
    Gosub DrawCells
    
    If KeyHit(cbkeySpace) Then
        For i=1 To cells
            cGrid(i,3)=Rand(0,1)
        Next i
    EndIf 
    
    DrawScreen
Forever 

CheckNeighbours:
    For i=1 To cells 
        //Ylävasen
        If cGrid(i,1)>1 And cGrid(i,2)>1 Then 
            If cGrid(i-(sX+1),3)=1 Then n=n+1
        EndIf 
        //Vasen
        If cGrid(i,1)>1 And cGrid(i-1,3)=1 Then n=n+1
        //Alavasen
        If cGrid(i,1)>1 And cGrid(i,2)<sY-1 Then
            If cGrid(i+(sX-1),3)=1 Then n=n+1
        EndIf 
        //Ylä
        If cGrid(i,2)>1 Then
            If cGrid(i-sX,3)=1 Then n=n+1
        EndIf 
        //Ala
        If cGrid(i,2)<sY Then
            If cGrid(i+sX,3)=1 Then n=n+1
        EndIf 
        //Yläoikea
        If cGrid(i,1)<sX And cGrid(i,2)>1 Then
            If cGrid(i-(sX-1),3)=1 Then n=n+1
        EndIf 
        //Oikea
        If cGrid(i,1)<sX And cGrid(i+1,3)=1 Then n=n+1
        //Alaoikea
        If cGrid(i,1)<sX And cGrid(i,2)<sY-1 Then
            If cGrid(i+(sX+1),3)=1 Then n=n+1
        EndIf 
        
        cGrid(i,4)=n
        n=0
    Next i
Return 

CellLife:
    For i=1 To cells 
        //Elossa & vähemmän kuin 2 naapuria -> kuolee
        If cGrid(i,3)=1 And cGrid(i,4)<2 Then cGrid(i,3)=0
        //Elossa & enemmän kuin 3 naapuria -> kuolee
        If cGrid(i,3)=1 And cGrid(i,4)>3 Then cGrid(i,3)=0
        //Kuollut & tasan 3 naapuria -> henkiin
        If cGrid(i,3)=0 And cGrid(i,4)=3 Then cGrid(i,3)=1
    Next i
Return 

DrawCells:
    For i=1 To cells
        If cGrid(i,3)=1 Then 
            Color cbGreen
            Box (cGrid(i,1)*cSize)-cSize,(cGrid(i,2)*cSize)-cSize,cSize,cSize,1
        EndIf 
    Next i
Return 
Päräjää...!
Post Reply