mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
Added MiniScript version of 40_Gomoko.
(An embarrasingly poor Go Moku game.)
This commit is contained in:
16
00_Alternate_Languages/40_Gomoko/MiniScript/README.md
Normal file
16
00_Alternate_Languages/40_Gomoko/MiniScript/README.md
Normal file
@@ -0,0 +1,16 @@
|
||||
Original source downloaded from [Vintage Basic](http://www.vintage-basic.net/games.html).
|
||||
|
||||
Conversion to [MiniScript](https://miniscript.org).
|
||||
|
||||
Ways to play:
|
||||
|
||||
1. Command-Line MiniScript:
|
||||
Download for your system from https://miniscript.org/cmdline/, install, and then run the program with a command such as:
|
||||
|
||||
miniscript gomoko.ms
|
||||
|
||||
2. Mini Micro:
|
||||
Download Mini Micro from https://miniscript.org/MiniMicro/, launch, and then click the top disk slot and chose "Mount Folder..." Select the folder containing the BASIC program. Then, at the Mini Micro command prompt, enter:
|
||||
|
||||
load "gomoko"
|
||||
run
|
||||
94
00_Alternate_Languages/40_Gomoko/MiniScript/gomoko.ms
Normal file
94
00_Alternate_Languages/40_Gomoko/MiniScript/gomoko.ms
Normal file
@@ -0,0 +1,94 @@
|
||||
print " "*33 + "Gomoku"
|
||||
print " "*15 + "Creative Computing Morristown, New Jersey"
|
||||
print; print; print
|
||||
print "Welcome to the Oriental game of Gomoko."
|
||||
print; print "The game is played on an N by N grid of a size"
|
||||
print "that you specify During your play, you may cover one grid"
|
||||
print "intersection with a marker. The object of the game is to get"
|
||||
print "5 adjacent markers in a row -- horizontally, vertically, or"
|
||||
print "diagonally. On the board diagram, your moves are marked"
|
||||
print "with a '1' and the computer moves with a '2'."
|
||||
print; print "The computer does not keep track of who has won."
|
||||
print "To end the game, type -1,-1 for your move."; print
|
||||
|
||||
inBounds = function(x,y)
|
||||
return 0 < x <= n and 0 < y <= n
|
||||
end function
|
||||
|
||||
empty = function(x,y)
|
||||
return A[x][y] == 0
|
||||
end function
|
||||
|
||||
printBoard = function
|
||||
for y in range(1,n)
|
||||
print A[y][1:n+1].join
|
||||
end for
|
||||
print
|
||||
end function
|
||||
|
||||
doPlayerMove = function
|
||||
while true
|
||||
inp = input("Your play (i,j)? ").replace(" ", "").split(",")
|
||||
print
|
||||
if inp.len != 2 then continue
|
||||
x = inp[0].val; y = inp[1].val
|
||||
if x == -1 then return false
|
||||
if not inBounds(x,y) then
|
||||
print "Illegal move. Try again..."
|
||||
else if not empty(x,y) then
|
||||
print "Square occupied. Try again..."
|
||||
else
|
||||
break
|
||||
end if
|
||||
end while
|
||||
A[x][y] = 1
|
||||
globals.lastPlayerMove = [x,y]
|
||||
return true
|
||||
end function
|
||||
|
||||
doComputerMove = function
|
||||
// Computer tries a move near the player's last move
|
||||
for e in range(-1,1)
|
||||
for f in range(-1,1)
|
||||
if e==0 and f==0 then continue
|
||||
x = lastPlayerMove[0] + e; y = lastPlayerMove[1] + f
|
||||
if inBounds(x,y) and empty(x,y) then
|
||||
A[x][y] = 2
|
||||
return
|
||||
end if
|
||||
end for
|
||||
end for
|
||||
|
||||
// Computer tries a random move
|
||||
while true
|
||||
x = floor(n * rnd + 1); y = floor(n * rnd + 1)
|
||||
if empty(x,y) then break
|
||||
end while
|
||||
A[x][y] = 2
|
||||
end function
|
||||
|
||||
playGame = function
|
||||
while true
|
||||
globals.n = input("What is your board size (min 7/ max 19)? ").val
|
||||
if 7 <= n <= 19 then break
|
||||
print "I said, the minimum is 7, the maximum is 19."
|
||||
end while
|
||||
globals.A = []
|
||||
for i in range(0,19)
|
||||
A.push [0]*20
|
||||
end for
|
||||
print; print "We alternate moves. You go first..."; print
|
||||
while true
|
||||
if not doPlayerMove then return
|
||||
doComputerMove
|
||||
printBoard
|
||||
end while
|
||||
end function
|
||||
|
||||
// Main loop
|
||||
while true
|
||||
playGame
|
||||
print; print "Thanks for the game!!"
|
||||
q = input("Play again (1 for Yes, 0 for No)? ").val
|
||||
if q != 1 then break
|
||||
end while
|
||||
Reference in New Issue
Block a user