95 lines
2.7 KiB
Python
95 lines
2.7 KiB
Python
# create a board game grid 8x8
|
|
# number rows and columns
|
|
# add player location in bottom left (*)
|
|
# print out the grid
|
|
# add a move function that takes in the grid and returns the new grid
|
|
|
|
class Board:
|
|
def __init__(self, rows, columns):
|
|
self.rows = rows
|
|
self.columns = columns
|
|
self.grid = [["O" for i in range(columns)] for j in range(rows)]
|
|
self.player_location = (7, 0) # bottom left
|
|
|
|
def format_grid(self):
|
|
header = " " + " ".join(f"{j:>2}" for j in range(self.columns)) + "\n"
|
|
result = header
|
|
for i in range(self.rows):
|
|
row_cells = []
|
|
for j in range(self.columns):
|
|
if (i, j) == self.player_location:
|
|
row_cells.append(" *")
|
|
else:
|
|
row_cells.append(f" {self.grid[i][j]}")
|
|
result += f"{i:>2} " + " ".join(row_cells) + "\n"
|
|
return result
|
|
|
|
def move(self, x, y):
|
|
""" moves x right and y up """
|
|
# bottom left = 7, 0
|
|
# bottom right = 7, 7
|
|
# top left = 0, 0
|
|
# top right = 0, 7
|
|
|
|
row, col = self.player_location
|
|
|
|
self.grid[row][col] = "O" # clear previous location
|
|
|
|
new_col = col + x
|
|
new_row = row - y # subtract, since row 0 is the top
|
|
|
|
if new_col < 0 or new_col > self.columns - 1:
|
|
raise ValueError("Invalid X coordinate")
|
|
elif new_row < 0 or new_row > self.rows - 1:
|
|
raise ValueError("Invalid Y coordinate")
|
|
|
|
self.grid[new_row][new_col] = "*"
|
|
self.player_location = (new_row, new_col)
|
|
|
|
return self.player_location
|
|
|
|
board = Board(8, 8)
|
|
|
|
def get_move(board):
|
|
raw = input("Enter direction and magnitude (u, d, l, r) (q to quit): ").strip().lower()
|
|
if not raw:
|
|
return get_move(board) # or handle empty input as you see fit
|
|
|
|
letter, mag_str = raw[0], raw[1:].strip()
|
|
if letter == "q":
|
|
return None
|
|
|
|
try:
|
|
magnitude = int(mag_str)
|
|
except ValueError:
|
|
print("Invalid magnitude.")
|
|
return get_move(board)
|
|
|
|
moves = {
|
|
"u": (0, magnitude),
|
|
"d": (0, -magnitude),
|
|
"l": (-magnitude, 0),
|
|
"r": (magnitude, 0),
|
|
}
|
|
|
|
if letter not in moves:
|
|
print("Invalid direction.")
|
|
return get_move(board)
|
|
|
|
return board.move(*moves[letter])
|
|
|
|
def main():
|
|
while True:
|
|
try:
|
|
move = get_move(board)
|
|
|
|
if move is None:
|
|
quit()
|
|
|
|
print(board.format_grid())
|
|
except ValueError as e:
|
|
print(e)
|
|
print("Please dont go out of bounds")
|
|
|
|
if __name__ == "__main__":
|
|
main() |