Desde aquí se puede bajar el Small Basic totalmente gratis.
La interfaz es muy intuitiva:
A continuacion se plasma el código para SmallBasic de la simulación del juego de la vida de Conway:
'ThePirat 2009
GraphicsWindow.PenColor = "Red"
GraphicsWindow.BrushColor = "Blue"
GraphicsWindow.BackgroundColor="white"
GraphicsWindow.MouseDown = OnMouseDown
GraphicsWindow.KeyDown = OnKeyDown
GraphicsWindow.Show()
SIZE = 30
Randomize()
RunLoop:
Draw()
Paso()
Program.Delay(1)
Goto RunLoop
Sub Randomize
For i = 0 To (SIZE * SIZE - 1)
If (Math.GetRandomNumber(5) > 3) Then
Array.SetValue("arr", i, 1)
Else
Array.SetValue("arr", i, 0)
EndIf
Endfor
EndSub
Sub Draw
GraphicsWindow.Clear()
w = GraphicsWindow.Width
h = GraphicsWindow.Height
For i = 0 To (SIZE * SIZE - 1)
val = Array.GetValue("arr", i)
If (val = 1) Then
GraphicsWindow.FillEllipse(w / SIZE * Math.Remainder(i+1, SIZE), h / SIZE * (Math.Floor(i / SIZE)), w / SIZE, h / SIZE)
'GraphicsWindow.SetPixel(Math.Remainder(i+1, SIZE), Math.Floor(i / SIZE), "Blue")
EndIf
EndFor
EndSub
Sub Paso
'Col = 1 if first column, Col = 2 if last column, Col = 0 otherwise
'Row = 1 if first row, Row = 2 if last row, Row = 0 otherwise
For i = 0 To (SIZE * SIZE - 1)
Alive = 0
COL = 0
ROW = 0
If (Math.Remainder(i, SIZE) = 0) Then
COL = 1 'First col
Endif
If (Math.Remainder(i + 1, SIZE) = 0) Then
COL = 2 'Last col
EndIf
If (i<SIZE) Then
ROW = 1 'First row
EndIf
If (i>=(SIZE*SIZE-SIZE)) Then
ROW = 2 'Last row
EndIf
If (COL <> 1 And ROW <> 1) Then 'not 1st row, not 1st col
Alive = Alive + Array.GetValue("arr", i - (SIZE + 1)) 'Up-Left
Endif
If (ROW <> 1) Then 'Not 1st row
Alive = Alive + Array.GetValue("arr", i - SIZE) 'Up
EndIf
If (COL <> 2 And ROW <> 1) Then 'Not mast col, not 1st row
Alive = Alive + Array.GetValue("arr", i - (SIZE - 1)) 'Up-Right
EndIf
If (COL <> 1) Then 'Not 1st col
Alive = Alive + Array.GetValue("arr", i - 1) 'Left
EndIf
If (COL <> 2) Then 'Not last col
Alive = Alive + Array.GetValue("arr", i + 1) 'Right
EndIf
If (COL <> 1 And ROW <> 2) Then 'Not 1st col, not last row
Alive = Alive + Array.GetValue("arr", i + (SIZE - 1)) 'Down-Left
EndIf
If (ROW <> 2) Then 'Not last row
Alive = Alive + Array.GetValue("arr", i + SIZE) 'Down
EndIf
If (COL <> 2 And ROW <> 2) Then 'Not last col, not last row
Alive = Alive + Array.GetValue("arr", i + (SIZE + 1)) 'Down-Right
EndIf
actual = Array.GetValue("arr", i)
newValue = actual
If (actual = 0 And Alive = 3) Then
newValue = 1
EndIf
If (actual = 1 And Alive <> 2 And Alive <> 3) Then
newValue = 0
EndIf
Array.SetValue("arrTmp", i, newValue)
Endfor
'Copy "arrTmp" into "arr"
For k = 0 To (SIZE * SIZE - 1)
Array.SetValue("arr", k, Array.GetValue("arrTmp", k))
EndFor
EndSub
Sub OnMouseDown
Randomize()
EndSub
Sub OnKeyDown
Randomize()
EndSub
Aquí se muestra la captura del programa corriendo:
Esta versión es muy simple y sólo permite configurar el tamaño de la grilla cambiando el valor de la variable SIZE.
Existen versiones más completas del juego de la vida para SmallBasic en este foro
Suerte !!!
No hay comentarios:
Publicar un comentario