python写一个2048小游戏
时间: 2023-07-07 19:37:06 浏览: 43
好的,以下是一个简单的 2048 小游戏的 Python 代码实现:
```python
import random
# 初始化游戏界面
def init_board():
board = [[0 for i in range(4)] for j in range(4)]
add_num(board)
add_num(board)
return board
# 在空位置随机添加数字2或4
def add_num(board):
empty = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
(i, j) = random.choice(empty)
board[i][j] = 2 if random.random() < 0.9 else 4
# 判断游戏是否结束
def is_gameover(board):
for i in range(4):
for j in range(4):
if board[i][j] == 0:
return False
if j < 3 and board[i][j] == board[i][j+1]:
return False
if i < 3 and board[i][j] == board[i+1][j]:
return False
return True
# 在游戏界面上移动数字
def move(board, direction):
if direction == 'up':
rotate_left(board)
move_left(board)
rotate_right(board)
elif direction == 'down':
rotate_right(board)
move_left(board)
rotate_left(board)
elif direction == 'left':
move_left(board)
elif direction == 'right':
flip(board)
move_left(board)
flip(board)
# 将游戏界面向左移动
def move_left(board):
for i in range(4):
row = board[i]
new_row = []
last_num = None
for num in row:
if num == 0:
continue
if last_num is None:
last_num = num
elif last_num == num:
new_row.append(num * 2)
last_num = None
else:
new_row.append(last_num)
last_num = num
if last_num is not None:
new_row.append(last_num)
new_row += [0] * (4 - len(new_row))
board[i] = new_row
# 将游戏界面逆时针旋转90度
def rotate_left(board):
board[:] = [[board[3-j][i] for j in range(4)] for i in range(4)]
# 将游戏界面上下翻转
def flip(board):
board[:] = board[::-1]
# 将游戏界面顺时针旋转90度
def rotate_right(board):
flip(board)
rotate_left(board)
# 打印游戏界面
def print_board(board):
print('-' * 21)
for row in board:
print('|', end='')
for num in row:
if num == 0:
print('{:^4}|'.format(''), end='')
else:
print('{:^4}|'.format(num), end='')
print()
print('-' * 21)
# 游戏主程序
def main():
board = init_board()
print_board(board)
while not is_gameover(board):
direction = input('请输入移动方向(up/down/left/right):')
move(board, direction)
add_num(board)
print_board(board)
print('游戏结束!')
if __name__ == '__main__':
main()
```
这个程序使用了 Python 的二维列表来表示游戏界面,使用了随机数和旋转矩阵等操作来实现添加数字和移动数字的功能,使用了循环和条件判断来实现判断游戏是否结束和打印游戏界面的功能。