Untitled
unknown
plain_text
a year ago
3.4 kB
4
Indexable
import random grid = [] offsets = [[-1, -1], [0, -1], [1, -1], [-1, 0], [1, 0], [-1, 1], [0, 1], [1, 1]] x_size = int(input("X scale: ")) y_size = int(input("Y scale: ")) mines = int(input("How many mines do you want? : ")) # set up the squares for i_1 in range(y_size): y_grid = [] for i_2 in range(x_size): x_grid = [1, 0] # open/close state, mine count y_grid.append(x_grid) grid.append(y_grid) def get_square(x, y): if 0 <= y < y_size and 0 <= x < x_size: return grid[y][x] else: return None def set_square(x, y, info): if 0 <= y < y_size and 0 <= x < x_size: grid[y][x] = info def info_to_string(info): if info[0] == 1: return "[BL]" elif info[0] == 2: return "[FL]" if info[0] == 0: if info[1] == 1: return "[MI]" else: return "[ ]" def get_area_value(x, y): area_value = 0 for offset in offsets: adj_square = get_square(x + offset[0], y + offset[1]) if adj_square: area_value += adj_square[1] return area_value def draw_board(board): for y in range(y_size): string_row = "" for x in range(x_size): square_info = get_square(x, y) if square_info[0] == 0 and square_info[1] == 0: string_row += "[ ]" elif square_info[0] == 0: string_row += "[0" + str(get_area_value(x, y)) + "]" else: string_row += info_to_string(square_info) print(string_row) def if_in_range(x, y, x2, y2): return abs(x2 - x) <= 1 and abs(y2 - y) <= 1 def first_move(x, y, board): for _ in range(mines): while True: x_rand, y_rand = random.randint(0, x_size - 1), random.randint(0, y_size - 1) if not if_in_range(x, y, x_rand, y_rand) and get_square(x_rand, y_rand)[1] == 0: set_square(x_rand, y_rand, [get_square(x_rand, y_rand)[0], 1]) break def open_space(x, y): if get_square(x, y)[0] != 0: # If not already opened set_square(x, y, [0, get_square(x, y)[1]]) if get_area_value(x, y) == 0: for offset in offsets: new_x, new_y = x + offset[0], y + offset[1] if 0 <= new_x < x_size and 0 <= new_y < y_size: if get_square(new_x, new_y)[0] != 0: open_space(new_x, new_y) run = True first_turn = True # commands while run: draw_board(grid) inp_str = input("(open x y), (flag x y): ") sep = inp_str.split(" ") if sep[0].lower() == "open": x, y = int(sep[1]), int(sep[2]) if first_turn: first_move(x, y, grid) first_turn = False open_space(x, y) elif sep[0].lower() == "flag": x, y = int(sep[1]), int(sep[2]) if get_square(x, y)[0] == 1: set_square(x, y, [2, get_square(x, y)[1]]) # Check if the game is over unopened_squares = sum(row.count([1, 0]) for row in grid) if unopened_squares == 0: run = False print("You've won!") elif any(get_square(x, y)[0] == 0 and get_square(x, y)[1] == 1 for y in range(y_size) for x in range(x_size)): run = False print("You've hit a mine. Game Over!") input("Game has ended.")
Editor is loading...
Leave a Comment