Data update
This commit is contained in:
parent
5150844a7d
commit
4bb20c9b71
7735 changed files with 38060 additions and 199180 deletions
|
|
@ -1,102 +0,0 @@
|
|||
const winningpositions = [[1, 2, 3], [4, 5, 6], [7, 8, 9], [1, 4, 7],
|
||||
[2, 5, 8], [3, 6, 9],[1, 5, 9], [7, 5, 3]]
|
||||
|
||||
function haswon(brd, xoro)
|
||||
marked = findall(x -> x == xoro, brd)
|
||||
for pos in winningpositions
|
||||
if length(pos) <= length(marked) && pos == sort(marked)[1:3]
|
||||
return true
|
||||
end
|
||||
end
|
||||
false
|
||||
end
|
||||
|
||||
function readcharwithprompt(prompt, expected)
|
||||
ret = '*'
|
||||
while !(ret in expected)
|
||||
print("\n", prompt, " -> ")
|
||||
ret = lowercase(chomp(readline()))[1]
|
||||
end
|
||||
ret
|
||||
end
|
||||
|
||||
availablemoves(brd) = findall(x -> x == ' ', brd)
|
||||
cornersopen(brd) = [x for x in [1, 3, 7, 9] if brd[x] == ' ']
|
||||
int2char(x) = Char(x + UInt8('0'))
|
||||
char2int(x) = UInt8(x) - UInt8('0')
|
||||
getyn(query) = readcharwithprompt(query, ['y', 'n'])
|
||||
gettheirmove(brd) = char2int(readcharwithprompt("Your move(1-9)", int2char.(availablemoves(brd))))
|
||||
|
||||
function findwin(brd, xoro)
|
||||
tmpbrd = deepcopy(brd)
|
||||
for mv in availablemoves(tmpbrd)
|
||||
tmpbrd[mv] = xoro
|
||||
if haswon(tmpbrd, xoro)
|
||||
return mv
|
||||
end
|
||||
tmpbrd[mv] = ' '
|
||||
end
|
||||
return nothing
|
||||
end
|
||||
|
||||
function choosemove(brd, mychar, theirchar)
|
||||
if all(x -> x == ' ', brd)
|
||||
brd[rand(cornersopen(brd))] = mychar # corner trap if starting game
|
||||
elseif availablemoves(brd) == [] # no more moves
|
||||
println("Game is over. It was a draw.")
|
||||
exit(0)
|
||||
elseif (x = findwin(brd, mychar)) != nothing || (x = findwin(brd, theirchar)) != nothing
|
||||
brd[x] = mychar # win if possible, block their win otherwise if their win is possible
|
||||
elseif brd[5] == ' '
|
||||
brd[5] = mychar # take center if open and not doing corner trap
|
||||
elseif (corners = cornersopen(brd)) != []
|
||||
brd[rand(corners)] = mychar # choose a corner over a side middle move
|
||||
else
|
||||
brd[rand(availablemoves(brd))] = mychar # random otherwise
|
||||
end
|
||||
end
|
||||
|
||||
function display(brd)
|
||||
println("+-----------+")
|
||||
println("| ", brd[1], " | ", brd[2], " | ", brd[3], " |")
|
||||
println("| ", brd[4], " | ", brd[5], " | ", brd[6], " |")
|
||||
println("| ", brd[7], " | ", brd[8], " | ", brd[9], " |")
|
||||
println("+-----------+")
|
||||
end
|
||||
|
||||
function tictactoe()
|
||||
board = fill(' ', 9)
|
||||
println("Board move grid:\n 1 2 3\n 4 5 6\n 7 8 9")
|
||||
yn = getyn("Would you like to move first (y/n)?")
|
||||
if yn == 'y'
|
||||
mychar = 'O'
|
||||
theirchar = 'X'
|
||||
board[gettheirmove(board)] = theirchar
|
||||
else
|
||||
mychar = 'X'
|
||||
theirchar = 'O'
|
||||
end
|
||||
while true
|
||||
choosemove(board, mychar, theirchar)
|
||||
println("Computer has moved.")
|
||||
display(board)
|
||||
if haswon(board, mychar)
|
||||
println("Game over. Computer wins!")
|
||||
exit(0)
|
||||
elseif availablemoves(board) == []
|
||||
break
|
||||
end
|
||||
board[gettheirmove(board)] = theirchar
|
||||
println("Player has moved.")
|
||||
display(board)
|
||||
if haswon(board, theirchar)
|
||||
println("Game over. Player wins!")
|
||||
exit(0)
|
||||
elseif availablemoves(board) == []
|
||||
break
|
||||
end
|
||||
end
|
||||
println("Game over. It was a draw.")
|
||||
end
|
||||
|
||||
tictactoe()
|
||||
Loading…
Add table
Add a link
Reference in a new issue