用 python 写一个 2048 游戏
时间: 2024-05-11 10:20:28 浏览: 31
好的,以下是一个简单的 Python 2048 游戏实现:
```python
import random
# 初始化游戏棋盘
def init_board():
board = [[0 for i in range(4)] for j in range(4)]
return board
# 在棋盘上随机生成一个数
def generate_number(board):
empty_cells = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
if empty_cells:
row, col = random.choice(empty_cells)
board[row][col] = 2 if random.random() < 0.9 else 4
return board
# 打印游戏棋盘
def print_board(board):
for row in board:
print(row)
# 检查游戏是否结束
def is_game_over(board):
for row in board:
if 0 in row:
return False
for i in range(4):
for j in range(3):
if board[i][j] == board[i][j+1] or board[j][i] == board[j+1][i]:
return False
return True
# 向左移动
def move_left(board):
for row in board:
new_row = [n for n in row if n != 0]
new_row += [0] * (4 - len(new_row))
for i in range(3):
if new_row[i] == new_row[i+1] and new_row[i] != 0:
new_row[i] *= 2
new_row[i+1] = 0
new_row = [n for n in new_row if n != 0]
new_row += [0] * (4 - len(new_row))
row[:] = new_row
return board
# 向右移动
def move_right(board):
for row in board:
new_row = [n for n in row if n != 0]
new_row = [0] * (4 - len(new_row)) + new_row
for i in range(3, 0, -1):
if new_row[i] == new_row[i-1] and new_row[i] != 0:
new_row[i] *= 2
new_row[i-1] = 0
new_row = [n for n in new_row if n != 0]
new_row = [0] * (4 - len(new_row)) + new_row
row[:] = new_row
return board
# 向上移动
def move_up(board):
for i in range(4):
col = [board[j][i] for j in range(4)]
new_col = [n for n in col if n != 0]
new_col += [0] * (4 - len(new_col))
for j in range(3):
if new_col[j] == new_col[j+1] and new_col[j] != 0:
new_col[j] *= 2
new_col[j+1] = 0
new_col = [n for n in new_col if n != 0]
new_col += [0] * (4 - len(new_col))
for j in range(4):
board[j][i] = new_col[j]
return board
# 向下移动
def move_down(board):
for i in range(4):
col = [board[j][i] for j in range(4)]
new_col = [n for n in col if n != 0]
new_col = [0] * (4 - len(new_col)) + new_col
for j in range(3, 0, -1):
if new_col[j] == new_col[j-1] and new_col[j] != 0:
new_col[j] *= 2
new_col[j-1] = 0
new_col = [n for n in new_col if n != 0]
new_col = [0] * (4 - len(new_col)) + new_col
for j in range(4):
board[j][i] = new_col[j]
return board
# 游戏主函数
def main():
board = init_board()
board = generate_number(board)
board = generate_number(board)
print_board(board)
while not is_game_over(board):
move = input("Enter move (left, right, up, down): ")
if move == "left":
board = move_left(board)
elif move == "right":
board = move_right(board)
elif move == "up":
board = move_up(board)
elif move == "down":
board = move_down(board)
else:
print("Invalid move")
continue
board = generate_number(board)
print_board(board)
print("Game over")
if __name__ == "__main__":
main()
```
这个实现可能不是非常完善,但可以作为一个简单的 2048 游戏的基础。