Files
basic-computer-games/40_Gomoko/python/Gomoko.py
2022-03-11 21:42:23 +01:00

127 lines
4.0 KiB
Python

import random
def print_n_whitespaces(n: int):
print(" " * n, end="")
def print_board():
"""PRINT THE BOARD"""
for I in range(N):
print(" ", end="")
for J in range(N):
print(A[I][J], end="")
print(" ", end="")
print()
def check_move(_I, _J, _N) -> bool: # 910
if _I < 1 or _I > _N or _J < 1 or _J > _N:
return False
return True
print_n_whitespaces(33)
print("GOMOKU")
print_n_whitespaces(15)
print("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()
while True:
N = 0
while True:
N = input("WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)? ")
N = int(N)
if N < 7 or N > 19:
print("I SAID, THE MINIMUM IS 7, THE MAXIMUM IS 19.")
print()
else:
break
# Initialize the board
A = []
for I in range(N):
subA = []
for J in range(N):
subA.append(0)
A.append(subA)
print()
print()
print("WE ALTERNATE MOVES. YOU GO FIRST...")
print()
while True:
IJ = input("YOUR PLAY (I,J)? ")
print()
I, J = IJ.split(",")
try:
I = int(I)
J = int(J)
except:
print("ILLEGAL MOVE. TRY AGAIN...")
continue
if I == -1:
break
elif not check_move(I, J, N):
print("ILLEGAL MOVE. TRY AGAIN...")
else:
if A[I - 1][J - 1] != 0:
print("SQUARE OCCUPIED. TRY AGAIN...")
else:
A[I - 1][J - 1] = 1
# COMPUTER TRIES AN INTELLIGENT MOVE
SkipEFLoop = False
for E in range(-1, 2):
for F in range(-1, 2):
if E + F - E * F == 0 or SkipEFLoop:
continue
X = I + F
Y = J + F
if not check_move(X, Y, N):
continue
if A[X - 1][Y - 1] == 1:
SkipEFLoop = True
X = I - E
Y = J - F
if not check_move(X, Y, N): # 750
while True: # 610
X = random.randint(1, N)
Y = random.randint(1, N)
if check_move(X, Y, N) and A[X - 1][Y - 1] == 0:
A[X - 1][Y - 1] = 2
print_board()
break
else:
if A[X - 1][Y - 1] != 0:
while True:
X = random.randint(1, N)
Y = random.randint(1, N)
if check_move(X, Y, N) and A[X - 1][Y - 1] == 0:
A[X - 1][Y - 1] = 2
print_board()
break
else:
A[X - 1][Y - 1] = 2
print_board()
print()
print("THANKS FOR THE GAME!!")
Repeat = input("PLAY AGAIN (1 FOR YES, 0 FOR NO)? ")
Repeat = int(Repeat)
if Repeat == 0:
break
# print_board()