Python编写2048
时间: 2023-11-05 11:14:35 浏览: 37
好的,下面是Python实现2048的代码示例:
``` python
import random
# 初始化游戏面板
def init_board(n):
board = [[0 for i in range(n)] for j in range(n)]
return board
# 打印游戏面板
def print_board(board):
for i in range(len(board)):
for j in range(len(board)):
print(board[i][j], end='\t')
print()
# 在随机位置生成一个新数字
def generate_number(board):
x = random.randint(0, len(board) - 1)
y = random.randint(0, len(board) - 1)
while board[x][y] != 0:
x = random.randint(0, len(board) - 1)
y = random.randint(0, len(board) - 1)
board[x][y] = 2
# 向左移动
def move_left(board):
for i in range(len(board)):
j = 0
while j < len(board) - 1:
if board[i][j] == 0:
k = j + 1
while k < len(board) and board[i][k] == 0:
k += 1
if k < len(board):
board[i][j] = board[i][k]
board[i][k] = 0
if j < len(board) - 1 and board[i][j] == board[i][j + 1]:
board[i][j] *= 2
board[i][j + 1] = 0
move_left(board)
j += 1
# 向右移动
def move_right(board):
for i in range(len(board)):
j = len(board) - 1
while j > 0:
if board[i][j] == 0:
k = j - 1
while k >= 0 and board[i][k] == 0:
k -= 1
if k >= 0:
board[i][j] = board[i][k]
board[i][k] = 0
if j > 0 and board[i][j] == board[i][j - 1]:
board[i][j] *= 2
board[i][j - 1] = 0
move_right(board)
j -= 1
# 向上移动
def move_up(board):
for j in range(len(board)):
i = 0
while i < len(board) - 1:
if board[i][j] == 0:
k = i + 1
while k < len(board) and board[k][j] == 0:
k += 1
if k < len(board):
board[i][j] = board[k][j]
board[k][j] = 0
if i < len(board) - 1 and board[i][j] == board[i + 1][j]:
board[i][j] *= 2
board[i+1][j] = 0
move_up(board)
i += 1
# 向下移动
def move_down(board):
for j in range(len(board)):
i = len(board) - 1
while i > 0:
if board[i][j] == 0:
k = i - 1
while k >= 0 and board[k][j] == 0:
k -= 1
if k >= 0:
board[i][j] = board[k][j]
board[k][j] = 0
if i > 0 and board[i][j] == board[i - 1][j]:
board[i][j] *= 2
board[i - 1][j] = 0
move_down(board)
i -= 1
# 判断游戏是否结束
def is_over(board):
for i in range(len(board)):
for j in range(len(board)):
if board[i][j] == 0:
return False
if j < len(board) - 1 and board[i][j] == board[i][j + 1]:
return False
if i < len(board) - 1 and board[i][j] == board[i + 1][j]:
return False
return True
# 游戏主函数
def game():
n = 4
board = init_board(n)
generate_number(board)
generate_number(board)
print_board(board)
while not is_over(board):
direction = input("请输入方向(w:上,s:下,a:左,d:右):")
if direction == 'a':
move_left(board)
elif direction == 'd':
move_right(board)
elif direction == 'w':
move_up(board)
elif direction == 's':
move_down(board)
else:
print("输入有误,请重新输入!")
continue
generate_number(board)
print_board(board)
print("游戏结束!")
# 运行游戏
game()
```
这个代码实现了2048游戏的基本功能,可以通过控制台输入方向来移动方块,当所有方块被填满且无法再合并时,游戏结束。你可以根据需要对代码进行修改和优化。