186 lines
5.7 KiB
Python
186 lines
5.7 KiB
Python
from random import *
|
|
from os import system, name
|
|
|
|
def clear():
|
|
if name == 'nt':
|
|
_ = system('cls')
|
|
else:
|
|
_ = system('clear')
|
|
|
|
class Square:
|
|
def __init__(self, location):
|
|
self.location = location #where the square is as an [x,y] pair
|
|
self.x = location[0]
|
|
self.y = location[1]
|
|
self.state = "empty" #behind the scenes data
|
|
self.display = " " #what the user will see
|
|
|
|
#The names of the squares are according to chess convention,
|
|
#but the coordinates are according to usual matrix notation.
|
|
a1 = Square([0,3])
|
|
a2 = Square([0,2])
|
|
a3 = Square([0,1])
|
|
a4 = Square([0,0])
|
|
b1 = Square([1,3])
|
|
b2 = Square([1,2])
|
|
b3 = Square([1,1])
|
|
b4 = Square([1,0])
|
|
c1 = Square([2,3])
|
|
c2 = Square([2,2])
|
|
c3 = Square([2,1])
|
|
c4 = Square([2,0])
|
|
d1 = Square([3,3])
|
|
d2 = Square([3,2])
|
|
d3 = Square([3,1])
|
|
d4 = Square([3,0])
|
|
|
|
board=[a1,a2,a3,a4,b1,b2,b3,b4,c1,c2,c3,c4,d1,d2,d3,d4]
|
|
board_strings=[]
|
|
for box in board:
|
|
board_strings.append(str(box))
|
|
|
|
setup_seed = sample(board, 4) #We pick four squares for initial amazon placement
|
|
|
|
setup_seed[0].state = "ba1" #black amazon 1
|
|
setup_seed[1].state = "ba2" #black amazon 2
|
|
setup_seed[2].state = "wa1" #white amazon 1
|
|
setup_seed[3].state = "wa2" #white amazon 2
|
|
|
|
def display(): #This interprets the states of the squares for display
|
|
for box in board:
|
|
if box.state == "empty":
|
|
box.display = " "
|
|
if box.state == "ba1":
|
|
box.display = "B"
|
|
if box.state == "ba2":
|
|
box.display = "B"
|
|
if box.state == "wa1":
|
|
box.display = "W"
|
|
if box.state == "wa2":
|
|
box.display = "W"
|
|
if box.state == "fire":
|
|
box.display = "X"
|
|
|
|
def gui(): #This displays the board state to the user
|
|
#clear()
|
|
display()
|
|
print(" a b c d")
|
|
print("4 "+a4.display+" "+b4.display+" "+c4.display+" "+d4.display)
|
|
print("3 "+a3.display+" "+b3.display+" "+c3.display+" "+d3.display)
|
|
print("2 "+a2.display+" "+b2.display+" "+c2.display+" "+d2.display)
|
|
print("1 "+a1.display+" "+b1.display+" "+c1.display+" "+d1.display)
|
|
|
|
def choice_translate(box):
|
|
if box == "a1":
|
|
return a1
|
|
if box == "a2":
|
|
return a2
|
|
if box == "a3":
|
|
return a3
|
|
if box == "a4":
|
|
return a4
|
|
if box == "b1":
|
|
return b1
|
|
if box == "b2":
|
|
return b2
|
|
if box == "b3":
|
|
return b3
|
|
if box == "b4":
|
|
return b4
|
|
if box == "c1":
|
|
return c1
|
|
if box == "c2":
|
|
return c2
|
|
if box == "c3":
|
|
return c3
|
|
if box == "c4":
|
|
return c4
|
|
if box == "d1":
|
|
return d1
|
|
if box == "d2":
|
|
return d2
|
|
if box == "d3":
|
|
return d3
|
|
if box == "d4":
|
|
return d4
|
|
else:
|
|
return "invalid"
|
|
|
|
|
|
gui()
|
|
turn = "w"
|
|
|
|
amazon_choice = choice_translate(input("Choose a square containing one of your amazons (eg, c3): "))
|
|
while amazon_choice == "invalid":
|
|
amazon_choice = choice_translate(input("That's not the name of any square. Try again: "))
|
|
if turn == "w":
|
|
while (amazon_choice.state != "wa1") and (amazon_choice.state != "wa2"):
|
|
amazon_choice = choice_translate(input("You don't have a queen there. Try again: "))
|
|
if turn == "b":
|
|
while (amazon_choice.state != "ba1") and (amazon_choice.state != "ba2"):
|
|
amazon_choice = choice_translate(input("You don't have a queen there. Try again: "))
|
|
|
|
gui()
|
|
|
|
move_choice = choice_translate(input("Choose the square you want to move to: "))
|
|
while move_choice == "invalid":
|
|
move_choice = choice_translate(input("That's not the name of any square. Try again: "))
|
|
|
|
tests=[]
|
|
def valid_move(start, end):
|
|
global tests
|
|
test_set=[]
|
|
if end.state != "empty":
|
|
return "Invalid"
|
|
if start.location == end.location:
|
|
return "Invalid"
|
|
if start.x == end.x:
|
|
for box in board:
|
|
if box.y in range(start.y+1,end.y):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
if start.y == end.y:
|
|
for box in board:
|
|
if box.x in range(start.x+1,end.x):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
if abs(start.x - end.x) == abs(start.y - end.y):
|
|
if (start.x < end.x) and (start.y < end.y):
|
|
for i in range(1, abs(start.x - end.x)):
|
|
for box in board:
|
|
if (box.x == start.y+i) and (box.y == start.y+i):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
if (start.x > end.x) and (start.y > end.y):
|
|
for i in range(1, abs(start.x - end.x)):
|
|
for box in board:
|
|
if (box.x == start.y-i) and (box.y == start.y-i):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
if (start.x > end.x) and (start.y < end.y):
|
|
for i in range(1, abs(start.x - end.x)):
|
|
for box in board:
|
|
if (box.x == start.x-i) and (box.y == start.y+i):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
if (start.x < end.x) and (start.y > end.y):
|
|
for i in range(1, abs(start.x - end.x)):
|
|
for box in board:
|
|
if (box.x == start.x+i) and (box.y == end.y-i):
|
|
test_set.append(box)
|
|
tests.append([box.x, box.y])
|
|
for test in test_set:
|
|
if test.state != "empty":
|
|
return "Invalid"
|
|
return "Valid"
|
|
|
|
while valid_move(amazon_choice, move_choice) == "Invalid":
|
|
move_choice = choice_translate(input("That amazon can't move there. Try again: "))
|
|
|
|
if valid_move(amazon_choice, move_choice) == "Valid":
|
|
move_choice.state = amazon_choice.state
|
|
amazon_choice.state = "empty"
|
|
|
|
print(tests)
|
|
gui()
|