114 lines
2.6 KiB
Python
114 lines
2.6 KiB
Python
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
|