mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-27 13:14:15 -08:00
Python: Fix Flake8 E722 and E741
Additionally: * Use functions to group blocks of code * Use variable names (not just one character...)
This commit is contained in:
@@ -1,16 +1,17 @@
|
||||
import random
|
||||
from typing import List, Tuple
|
||||
|
||||
|
||||
def print_n_whitespaces(n: int):
|
||||
def print_n_whitespaces(n: int) -> None:
|
||||
print(" " * n, end="")
|
||||
|
||||
|
||||
def print_board():
|
||||
"""PRINT THE BOARD"""
|
||||
for I in range(N):
|
||||
for i in range(n):
|
||||
print(" ", end="")
|
||||
for J in range(N):
|
||||
print(A[I][J], end="")
|
||||
for j in range(n):
|
||||
print(A[i][j], end="")
|
||||
print(" ", end="")
|
||||
print()
|
||||
|
||||
@@ -21,106 +22,136 @@ def check_move(_I, _J, _N) -> bool: # 910
|
||||
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()
|
||||
def print_banner():
|
||||
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
|
||||
|
||||
def get_board_dimensions() -> int:
|
||||
n = 0
|
||||
while True:
|
||||
N = input("WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)? ")
|
||||
N = int(N)
|
||||
if N < 7 or N > 19:
|
||||
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
|
||||
return n
|
||||
|
||||
# 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()
|
||||
|
||||
def get_move() -> Tuple[int, int]:
|
||||
while True:
|
||||
IJ = input("YOUR PLAY (I,J)? ")
|
||||
xy = input("YOUR PLAY (I,J)? ")
|
||||
print()
|
||||
I, J = IJ.split(",")
|
||||
x, y = xy.split(",")
|
||||
try:
|
||||
I = int(I)
|
||||
J = int(J)
|
||||
except:
|
||||
x = int(x)
|
||||
y = int(y)
|
||||
except Exception:
|
||||
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...")
|
||||
return x, y
|
||||
|
||||
|
||||
def initialize_board(n: int) -> List[List[int]]:
|
||||
# Initialize the board
|
||||
board = []
|
||||
for _x in range(n):
|
||||
subA = []
|
||||
for _y in range(n):
|
||||
subA.append(0)
|
||||
board.append(subA)
|
||||
return board
|
||||
|
||||
|
||||
def main():
|
||||
print_banner()
|
||||
|
||||
while True:
|
||||
n = get_board_dimensions()
|
||||
board = initialize_board(n)
|
||||
|
||||
print()
|
||||
print()
|
||||
print("WE ALTERNATE MOVES. YOU GO FIRST...")
|
||||
print()
|
||||
|
||||
while True:
|
||||
x, y = get_move()
|
||||
if x == -1:
|
||||
break
|
||||
elif not check_move(x, y, n):
|
||||
print("ILLEGAL MOVE. 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
|
||||
if board[x - 1][y - 1] != 0:
|
||||
print("SQUARE OCCUPIED. TRY AGAIN...")
|
||||
else:
|
||||
board[x - 1][y - 1] = 1
|
||||
# COMPUTER TRIES AN INTELLIGENT MOVE
|
||||
skip_ef_loop = False
|
||||
for E in range(-1, 2):
|
||||
for F in range(-1, 2):
|
||||
if E + F - E * F == 0 or skip_ef_loop:
|
||||
continue
|
||||
X = x + F
|
||||
Y = y + F
|
||||
if not check_move(X, Y, n):
|
||||
continue
|
||||
if board[X - 1][Y - 1] == 1:
|
||||
skip_ef_loop = True
|
||||
X = x - E
|
||||
Y = y - 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 board[X - 1][Y - 1] == 0
|
||||
):
|
||||
board[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()
|
||||
if board[X - 1][Y - 1] != 0:
|
||||
while True:
|
||||
X = random.randint(1, n)
|
||||
Y = random.randint(1, n)
|
||||
if (
|
||||
check_move(X, Y, n)
|
||||
and board[X - 1][Y - 1] == 0
|
||||
):
|
||||
board[X - 1][Y - 1] = 2
|
||||
print_board()
|
||||
break
|
||||
else:
|
||||
board[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
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
Reference in New Issue
Block a user