Mutant Turmite Attack

BlitzMax Forums/BlitzMax Beginners Area/Mutant Turmite Attack

MadMax(Posted 2007) [#1]
I decided to use Turmites to learn a bit about Bmax, have Bmax since the beginning but have never realy got down to using it. So Turmites seemed a good idea to understand the basics.

TURMITES: A simple Two-State infinite Turing Machine. Rules are very simple, it checks the pixel it's on and if painted it turns right and advances; if not painted it turns left and advances; it also changes the pixel when leaving. You can find more information about Turmites in the Web.

WORLD: a 640x480 wrapped_around world

CODING: No real problems here once I sorted out the "nasty" syntax ( a better manual would be nice) But scavenging samples and these great forums I sorted myself out.

The lack of being able to read a pixel from the screen buffer made me use an array, no real problem here but I would realy like a command to this effect(please Mark).

Overall it has been a pleasant experience. Next couple of days I have off-work I'll try and code some simple game.

Here is the code for those that might like to have a look at Turmites, feel free to modify what you like. And excuse my non-standard style.

SetGraphicsDriver GLMax2DDriver()

Global number_of_turmites=20

Global map[640,480]

Global largo=Rand(10,120)
Global tictac

Global info

'**********************************************************************
'Here I define the basic turmite
'**********************************************************************

Type mite

Field  x,y
Field rojo,verde,azul
Field dir,stat

Global lista:TList

Method actua()

	If map[x,y] = 1
		SetColor(0,0,0)
		Plot(x,y)
		map[x,y]=0
		dir=dir+1
			If dir>3
			dir=0
			EndIf
	Else
		SetColor(rojo,verde,azul)
		Plot(x,y)
		map[x,y]=1
		dir=dir-1
			If dir<0
			dir=3
			EndIf
	EndIf
	
	Select dir
		Case 0
			y=y-1
			If y<0
			y=479
			EndIf
		Case 1
			x=x+1
			If x>639
			x=0
			EndIf
		Case 2
			y=y+1
			If y>479
			y=0
			EndIf
		Case 3
			x=x-1
			If x<0
			x=639
			EndIf
	End Select

End Method

  Function create()
	If lista = Null lista = CreateList()
     socas:mite = New mite

     socas.x = Rand(0,639) ; socas.y = Rand(0,479)

	 socas.rojo = Rand(50,255) ; socas.verde = Rand(50,255) ; socas.azul = Rand(50,255)

	socas.dir=Rand(0,3)

     lista.addlast(socas)
'socas.link=dadas.AddLast(socas)
'unomas=unomas+1
 
  End Function

End Type

For n=1 To number_of_turmites

mite.create()

Next

Graphics 640,480,32

HideMouse()

timer=CreateTimer(1)

Repeat

'Cls

For n= 1 To 100
For t:mite = EachIn mite.lista

t.actua()

Next
Next

If info=1
SetColor(0,0,0)
DrawRect(20,20,40,40)
SetColor(255,255,0)
DrawText largo,23,22
DrawText tictac,23,42
EndIf

Flip

If KeyHit(key_space)

For mapy=0 To 479
For mapx=0 To 639
map[mapx,mapy]=0
Next
Next

ClearList(mite.lista)

number_of_turmites=Rand(2,20)

		For n=1 To number_of_turmites
		mite.create()
		Next

Cls
StopTimer(timer)
timer=CreateTimer(1)
largo=Rand(10,120)
EndIf

tictac=TimerTicks(timer)

If tictac > largo
For mapy=0 To 479
For mapx=0 To 639
map[mapx,mapy]=0
Next
Next

ClearList(mite.lista)

number_of_turmites=Rand(2,20)

		For n=1 To number_of_turmites
		mite.create()
		Next

Cls
StopTimer(timer)
timer=CreateTimer(1)
largo=Rand(10,120)
EndIf

If KeyHit(key_f1)
Select info
Case 0
info=1
Case 1
info=0
End Select
EndIf

Until KeyHit(key_escape) Or AppTerminate()