import random grid = [ [0, 2, 0, 4], [0, 0, 8, 0], [2, 0, 0, 2], [0, 0, 0, 2] ] def print_grid(grid): for row in grid: print(" | ".join(str(cell) for cell in row)) print("-" * 15) def get_move(): while True: move = input("Move (w/a/s/d): ") if move in ["w", "a", "s", "d"]: return move print("Invalid! Use w, a, s, or d.") def slide_merge(line): new_line = [x for x in line if x != 0] for i in range(len(new_line) - 1): if new_line[i] == new_line[i + 1]: new_line[i] = new_line[i] * 2 new_line[i + 1] = 0 new_line = [x for x in new_line if x != 0] new_line += [0] * (4 - len(new_line)) return new_line def move_up(grid): for col in range(4): column = [grid[row][col] for row in range(4)] new_column = slide_merge(column) for row in range(4): grid[row][col] = new_column[row] def move_down(grid): for col in range(4): column = [grid[row][col] for row in range(4)] new_column = slide_merge(column[::-1])[::-1] for row in range(4): grid[row][col] = new_column[row] def move_left(grid): for row in range(4): grid[row] = slide_merge(grid[row]) def move_right(grid): for row in range(4): grid[row] = slide_merge(grid[row][::-1])[::-1] def check_win(grid): for row in grid: for cell in row: if cell == 2048: return True return False def check_game_over(grid): for row in grid: for cell in row: if cell == 0: return False for row in grid: for i in range(3): if row[i] == row[i + 1]: return False for col in range(4): for row in range(3): if grid[row][col] == grid[row + 1][col]: return False return True def add_random_tile(grid): empty_cells = [] for row in range(4): for col in range(4): if grid[row][col] == 0: empty_cells.append((row, col)) if len(empty_cells) == 0: return row, col = random.choice(empty_cells) grid[row][col] = 2 if random.random() < 0.9 else 4 print_grid(grid) while True: direction = get_move() if direction == "w": move_up(grid) elif direction == "s": move_down(grid) elif direction == "a": move_left(grid) elif direction == "d": move_right(grid) add_random_tile(grid) print_grid(grid) if check_win(grid): print("You win!") break if check_game_over(grid): print("Game over!") break