Here’s a new development release! If you can, please download it (tar.gz, zip), compile it, and test it. This version features arrays (currently with square brackets, just to ease the process of implementing functions—don’t panic!) and various other improvements. It’s entirely memory-clean, and—dare I say it—pretty fast.
Here’s an example program (Conway’s Game of Life):
// create a grid width = 40 height = 20 dim grid[width, height] dim new_grid[width, height] // "seed" grid randomly ("true" means a live cell, "false" means a dead cell) for x = 1 to width for y = 1 to height grid[x, y] = int (ran (2)) next next // game loop: repeat until grid does not change repeat // display grid for y = 1 to height for x = 1 to width if grid[x, y] then print "%"; else print "."; endif next print next print "---" // process all grid locations for x = 1 to width for y = 1 to height // calculate how many live cells are around the current grid location live_neighbours = 0 for nx = -1 to 1 for ny = -1 to 1 if (x + nx >= 1 and x + nx <= width) and \ (y + ny >= 1 and y + ny <= height) then if grid[x + nx, y + ny] then live_neighbours = live_neighbours + 1 endif endif next next // apply rules if grid[x, y] then if live_neighbours < 2 then new_grid[x, y] = false // dies: underpopulation elseif live_neighbours = 2 or live_neighbours = 3 then new_grid[x, y] = true // stays living else new_grid[x, y] = false // dies: overpopulation endif else if live_neighbours = 3 then new_grid[x, y] = true // lives: reproduction else new_grid[x, y] = false // stays dead endif endif next next // copy new grid to grid no_change = true for x = 1 to width for y = 1 to height if grid[x, y] <> new_grid[x, y] then no_change = false endif grid[x, y] = new_grid[x, y] next next until no_change // repeat until grid does not change
And another (Guess the Number):
// upper limit for number; lower limit is always 1 maximum_number = 100 // number of attempts the player is allowed to guess the number maximum_attempts = 7 // game loop: repeat until player wants to quit repeat // select a random number number = int (ran (maximum_number)) + 1 // display game introduction print "I'm thinking of a number between 1 and " + \ str$ (maximum_number) + "." print "Try to guess it in " + str$ (maximum_attempts) + " attempts or less." // let the player try to guess the number for attempt = 1 to maximum_attempts // get valid guess from player do print "Attempt " + str$ (attempt) + " of " + \ str$ (maximum_attempts) + "." input "What is your guess (-1 to give up)? " guess if guess = -1 then break endif if guess <> int (guess) or (guess < 1 or guess > maximum_number) then print "Invalid guess! Try again." continue endif break loop // give up? if guess = -1 then break endif // correct guess? if guess = number then break endif // give hint if guess < number then print "Your guess was too low." elseif guess > number then print "Your guess was too high." endif next // did the player win or lose? if guess = number then print "You won. Congratulations!" else print "You lost. The number was " + str$ (number) + "." endif // ask the player if he or she wants to play again repeat input "Do you want to play again? " answer$ answer$ = lower$ (left$ (answer$, 1)) until answer$ = "n" or answer$ = "y" until answer$ = "n" // repeat until player wants to quit
Have fun, and please
tear test it to pieces!