Complete exercise 23
This commit is contained in:
parent
51e91db895
commit
40e3d1bb02
95
23 Move a player part 1/exercise-01.py
Normal file
95
23 Move a player part 1/exercise-01.py
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
# 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()
|
||||||
BIN
23 Move a player part 1/task.png
Normal file
BIN
23 Move a player part 1/task.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 61 KiB |
Loading…
Reference in New Issue
Block a user