#
# 3DTicTacToe.py
# Written by Coty R Miller on 30Jan18.
#
board = [" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", \
" ", " ", " ", ]
game = 1
player = "x"
# This fuction displays the game board layout.
def printGameBoard():
print(board[0], " | ", board[1], " | ", board[2])
print("-------------")
print(board[3], " | ", board[4], " | ", board[5], "a")
print("-------------")
print(board[6], " | ", board[7], " | ", board[8])
print(" ", board[9], " | ", board[10], " | ", board[11])
print(" -------------")
print(" ", board[12], " | ", board[13], " | ", board[14], "b")
print(" -------------")
print(" ", board[15], " | ", board[16], " | ", board[17])
print(" "," ", board[18], " | ", board[19], " | ", board[20])
print(" "," ","-------------")
print(" "," ",board[21], " | ", board[22], " | ", board[23], "c")
print(" "," ","-------------")
print(" "," ",board[24], " | ", board[25], " | ", board[26])
#
# This fuction checks for wins.
#
def checkWins(bd):
win = 1
for i in range(0,3):
x = 9 * i
# Check horizontal wins
if(bd[x+0] == bd[x+1] and bd[x+1] == bd[x+2]):
if(bd[x+0]!=" "):
print("Player", bd[x+0], "wins!")
win = 0
if(bd[x+3] == bd[x+4] and bd[x+4] == bd[x+5]):
if(bd[x+3]!=" "):
print("Player", bd[x+3], "wins!")
win = 0
if(bd[x+6] == bd[x+7] and bd[x+7] == bd[x+8]):
if(bd[x+6]!=" "):
print("Player", bd[x+6], "wins!")
win = 0
# Check verticle wins
if(bd[x+0] == bd[x+3] and bd[x+3] == bd[x+6]):
if(bd[x+0]!=" "):
print("Player", bd[x+0], "wins!")
win = 0
if(bd[x+1] == bd[x+4] and bd[x+4] == bd[x+7]):
if(bd[x+1]!=" "):
print("Player", bd[x+1], "wins!")
win = 0
if(bd[x+2] == bd[x+5] and bd[x+5] == bd[x+8]):
if(bd[x+2]!=" "):
print("Player", bd[x+2], "wins!")
win = 0
# Check cris cross wins
if(bd[x+0] == bd[x+4] and bd[x+4] == bd[x+8]):
if(bd[x+0]!=" "):
print("Player", bd[x+0], "wins!")
win = 0
if(bd[x+2] == bd[x+4] and bd[x+4] == bd[x+6]):
if(bd[x+2]!=" "):
print("Player", bd[x+2], "wins!")
win = 0
return win
#
# This fuction "flips the cube" upwards
#
def flipCubeUp(z):
tr = [" "] * 27
for i in range(0,3):
x = 9 * i
y = 3 * i
# Build first row
tr[x+0] = z[y+18]
tr[x+1] = z[y+19]
tr[x+2] = z[y+20]
# Build second row
tr[x+3] = z[y+9]
tr[x+4] = z[y+10]
tr[x+5] = z[y+11]
# Build third row
tr[x+6] = z[y+0]
tr[x+7] = z[y+1]
tr[x+8] = z[y+2]
return tr
#
# This fuction "flips the cube" to the right
#
def flipCubeRight(z):
tr = [" "] * 27
for i in range(0,3):
x = 9 * i
# build first row
tr[x+0] = z[i+18]
tr[x+3] = z[i+21]
tr[x+6] = z[i+24]
# build second row
tr[x+1] = z[i+9]
tr[x+4] = z[i+12]
tr[x+7] = z[i+15]
# build third row
tr[x+2] = z[i+0]
tr[x+5] = z[i+3]
tr[x+8] = z[i+6]
return tr
def check3DCrissCross(z):
# This checks for 4 possable extreme win patterns.
win = 1
if z[0] == z[13] and z[13] == z[26]:
if(z[13] !=" "):
print("Player", z[13], "wins!")
win = 0
if z[2] == z[13] and z[13] == z[24]:
if(z[13] !=" "):
print("Player", z[13], "wins!")
win = 0
if z[6] == z[13] and z[13] == z[20]:
if(z[13] !=" "):
print("Player", z[13], "wins!")
win = 0
if z[8] == z[13] and z[13] == z[18]:
if(z[13] !=" "):
print("Player", z[13], "wins!")
win = 0
return win
#
# The actual game it's self, the game loop exits with game = 0.
#
while(game == 1):
printGameBoard()
# Get layer that player wishes to use
print("Player", player, "select a layer (a-c)")
c = input(":")
if c == "a":
c = 0
elif c == "b":
c = 9
elif c == "c":
c = 18
else:
print("ERROR! Please select a valid layer (a-c)")
c = 1
if c != 1:
# Get colision that player wants to plase/use/whatever
print("Player", player, "select a square 1-9")
a = input(":")
b = int(a)
if b < 10 and b > 0:
b = b - 1
else:
print("ERROR! Please enter a valid number (1-9)")
if(player == "x"):
if board[b+c] == " ":
board[b+c] = player
player = "o"
else:
print("ERROR! Square already in use!")
else:
if board[b+c] == " ":
board[b+c] = player
player = "x"
else:
print("ERROR! Square already in use!")
#
# Check for wins.
#
game = checkWins(board)
if game == 1:
game = checkWins(flipCubeUp(board))
if game == 1:
game = checkWins(flipCubeRight(board))
if game == 1:
game = check3DCrissCross(board)
# - - -
# print the winning game board.
printGameBoard()