2048/main.py

115 lines
2.6 KiB
Python
Raw Permalink Normal View History

2026-07-26 11:02:18 +00:00
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