Page 1 of 1

Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 9:34 am
by Wingman
Tein tällaisen pienen soluautomaatiosimulaattorin, johon ajattelin jotenkin saada RuleTablen toimimaan, mutta nyt tein solujen toiminnan select...case -rakenteella.
pidemmittä puheitta, tässä koodi. Jos joku innostuu tätä käyttämään, mainitkoot minut tekijöissä.

Code: Select all

//conway's life on CB by Elias Linjama
Const BX=8
Const BY=8
Dim cell(400/BX,300/BY) 
Dim cell2(400/BX,300/BY) 
For x=1 To 400/BX
	For y=1 To 300/BY
		cell(x,y)=0 
		cell2(x,y)=0 
	Next y
Next x
run=0
t=50
Repeat
	For x=1 To 400/BX
		For y=1 To 300/BY
			If cell(x,y)=0 Then 
				Color 1,1,1
				Box x*BX,y*BY,BX,BY,cell(x,y)
			EndIf 
			If cell(x,y)=1 Then
				Color 255,255,255
				Box x*BX,y*BY,BX,BY,cell(x,y)
			EndIf 
			If MouseX()-x*BX<BX And MouseY()-y*BY<BY And MouseY()-y*BY>0 And MouseX()-x*BX>0 Then 
				If MouseHit(1) Then 
					cell(x,y)=1
				ElseIf MouseHit(2) Then 
					cell(x,y)=0
				Else 
					Color 255,0,0
					Box x*BX,y*BY,BX,BY,0
					Color 255,255,255
				EndIf 
			EndIf 
			sur=cell(x-1,y)+cell(x-1,y-1)+cell(x,y-1)+cell(x+1,y-1)+cell(x+1,y)+cell(x+1,y+1)+cell(x,y+1)+cell(x-1,y+1)
				If run=r Then 	
					Select sur
						Case 1
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Case 2
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=1
							EndSelect 
						Case 3
							Select cell(x,y)
								Case 0
									cell2(x,y)=1
								Case 1
									cell2(x,y)=1
							EndSelect 
						Case 4
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Case 5
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Case 6
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Case 7
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Case 8
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
						Default 
							Select cell(x,y)
								Case 0
									cell2(x,y)=0
								Case 1
									cell2(x,y)=0
							EndSelect 
					EndSelect 
				EndIf  
		Next y
	Next x
	run=run+KeyHit(57)
	t=t+(KeyHit(16)-KeyHit(30))*5
	If KeyDown(28) Then 
		If Timer()>ti+t Then 
			run+1
			ti=Timer()
		EndIf 
	EndIf 
	If run>r Then 
		For x=BX To 400/BX
			For y=BY To 300/BY
				cell(x,y)=cell2(x,y)
			Next y
		Next x
		r=run
	EndIf 
	If g>g2+1 Then g=g2
	SetWindow ""+run+" "+t
	DrawScreen 
Forever 
EDIT:

Ja aina unohdan kontrollit kertoa, hiirellä naputellaan soluja matriisiin ja spacella mennään yksi generaatio eteenpäin, enterillä se menee jatkuvasti eteenpäin. Q+A näppäimillä voi vaihtaa nopeutta, eli kuinka monta millisekuntia enteriä pitää pitää pohjassa ennen seuraavaa generaatiota

EDIT:

Nyt on koodi korjattu, ei pitäisi mavata for-looppien takia enää

EDIT:

korjasin vielä kunnolla :D


Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:08 am
by KillBurn
Homma kaatuu heti alussa MAViin. Vika luultavasti alun for-next rakenteessa.

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:15 am
by Misthema
Ööööh... Varmasti toimii hienosti ja silleen, mutta itse en saanut toimimaan tuota. Jäi muutenkin mietityttämään, että miksi sinulla on taulukot (400/BX)*(300/BY), mutta käyt niitä kuitenkin läpi 400*300 kokoisina BX=8 ja BY=8 stepeillä...?
Koitapa korjata tuo niin pääsisi testaamaan kunnolla, eikä tarvitsisi itse korjailla. =)

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:34 am
by Wingman
Noin. Tosiaan, ihmettelin vähän itsekkin mavia, mutta tuohan se oli vikana. Korjasin siis taulukoiden läpikäynnit ja nyt toimii

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:51 am
by Misthema
Noniin, johan alkoi toimimaan ja näytti tosi veikeeltä, juuri niin kuin pitääkin(?). =)

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:58 am
by TukeKoodi
Noni, just tällaista mä laivanupotukseen tarvitsinkin. Kai saa käyttää??

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 2:50 pm
by Viltzu
TukeKoodi wrote:Noni, just tällaista mä laivanupotukseen tarvitsinkin. Kai saa käyttää??
Lue se aloitusposti ennen kuin kyselet.

Hyvin toimii :) Ihan jännän näköinen kun on paljon soluja ja painaa enter pohjassa :>

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 2:59 pm
by Latexi95
Onhan se ihan jännän näköinen, mutta en aivan tajunnut mihin tätä käytetään.

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 10:51 pm
by TukeKoodi
Mihin vain. Esimerkiksi ristinollaan, laivanupotukseen, väripalettiin, lautapeleihin, kaikkeen missä tarvitaan "ruudukko" jonkun asettamiselle jne.

Re: Conway's Game of life CB.llä

Posted: Sat Apr 16, 2011 11:05 pm
by TheFish
TukeKoodi wrote:Mihin vain. Esimerkiksi ristinollaan, laivanupotukseen, kaikkeen missä tarvitaan "ruudukko" jonkun asettamiselle jne.
Latexi95 varmaankin puhui itse Game of Life:stä, eikä pelkästään solujen asettelemisesta. Eipä tuolla "pelillä" minun tietojeni mukaan mitään varsinaista käyttöä ole. Kunhan vain voi katsoa mitä tapahtuu erilaisilla alkuasetelmilla.