Decided to try my hand at QB64, so I started with a very simple Conway’s Game of Life program.
When I say no frills that’s because its text based, you can’t edit the starting cells (without editing the code) and is not exactly the nicest looking or most efficient code. But it does work! And that is what makes me happy.
’ Game of Life.
’ Expiriment in cellular automatons.
’ Version 001
’ By Matthew Macomber
PRINT “Game of Life - Simple Text Version”
DIM SHARED grid1(20, 20)
DIM SHARED grid2(20, 20)
FOR y = 0 TO 19
FOR x = 0 TO 19
grid1(y, x) = 0
NEXT x
NEXT y
’ Set some test cells, basic alternating 2 step
grid1(5, 5) = 1
grid1(6, 4) = 1
grid1(6, 5) = 1
grid1(6, 6) = 1
grid1(7, 5) = 1
INPUT “How many ticks do you want the sim to run?”; runTime
FOR z = 1 TO runTime
IF current = 1 THEN
current = 2
ELSE
current = 1
END IF
IF cellTick(current) THEN
CLS
PRINT “Running…”
END IF
NEXT z
CLS
PRINT (1 MOD 2) + 1
PRINT (2 MOD 2) + 1
PRINT (3 MOD 2) + 1
PRINT (4 MOD 2) + 1
INPUT “Waiting”, fake
IF printGrid((runTime MOD 2) + 1) THEN
PRINT “Run completed”
END IF
FUNCTION cellTick (a)
IF a = 1 THEN
FOR y = 0 TO 19
FOR x = 0 TO 19
’ Test if cell is alive or dead. grid1 to grid2
cellCount = 0
IF y - 1 >= 0 AND x - 1 >= 0 THEN
IF grid1(y - 1, x) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y - 1, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y + 1, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y + 1, x) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y + 1, x + 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y, x + 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid1(y - 1, x + 1) THEN
cellCount = cellCount + 1
END IF
END IF
IF grid1(y, x) = 1 THEN
IF cellCount < 2 THEN
grid2(y, x) = 0
END IF
IF cellCount > 3 THEN
grid2(y, x) = 0
END IF
IF cellCount = 2 OR cellCount = 3 THEN
grid2(y, x) = 1
END IF
ELSE
IF cellCount = 3 THEN
grid2(y, x) = 1
END IF
END IF
NEXT x
NEXT y
ERASE grid1
ELSE
FOR y = 0 TO 19
FOR x = 0 TO 19
’ Test if cell is alive or dead. grid2 to grid1
cellCount = 0
IF y - 1 >= 0 AND x - 1 >= 0 THEN
IF grid2(y - 1, x) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y - 1, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y + 1, x - 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y + 1, x) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y + 1, x + 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y, x + 1) = 1 THEN
cellCount = cellCount + 1
END IF
IF grid2(y - 1, x + 1) THEN
cellCount = cellCount + 1
END IF
END IF
IF grid2(y, x) = 1 THEN
IF cellCount < 2 THEN
grid1(y, x) = 0
END IF
IF cellCount > 3 THEN
grid1(y, x) = 0
END IF
IF cellCount = 2 OR cellCount = 3 THEN
grid1(y, x) = 1
END IF
ELSE
IF cellCount = 3 THEN
grid1(y, x) = 1
END IF
END IF
NEXT x
NEXT y
ERASE grid2
END IF
END FUNCTION
FUNCTION printGrid (a)
IF a = 1 THEN
FOR y = 0 TO 19
FOR x = 0 TO 19
PRINT grid1(y, x);
NEXT x
PRINT “”
NEXT y
ELSE
FOR y = 0 TO 19
FOR x = 0 TO 19
PRINT grid2(y, x);
NEXT x
PRINT “”
NEXT y
END IF
END FUNCTION
I enjoyed playing with QB64, I tested it and works on Linux and Windows versions of QB64.