2048 游戏 Python 实现:代码详解与游戏规则
这段代码实现了一个简单的 2048 游戏,包括随机生成新数字、向上、下、左、右移动、判断游戏是否结束和显示当前状态等功能。其中,棋盘以二维列表形式存储,数字 2 表示未合并的方块,数字大于 2 表示已经合并的方块。游戏结束的条件是棋盘上没有空位且无法再合并相同数字的方块。主循环不断向棋盘中添加新数字,并根据用户输入的方向移动方块,直到游戏结束。
import random # 初始化棋盘
board = [[0] * 4 for i in range(4)] # 随机生成新数字
def add_new_number():
i = random.choice(range(4))
j = random.choice(range(4))
while board[i][j] != 0:
i = random.choice(range(4))
j = random.choice(range(4))
board[i][j] = 2 # 向上移动
def move_up():
for j in range(4):
for i in range(1, 4):
if board[i][j] != 0:
k = i
while k > 0 and board[k-1][j] == 0:
k -= 1
if k != i:
board[k][j] = board[i][j]
board[i][j] = 0
if k > 0 and board[k-1][j] == board[k][j]:
board[k-1][j] *= 2
board[k][j] = 0 # 向下移动
def move_down():
for j in range(4):
for i in range(2, -1, -1):
if board[i][j] != 0:
k = i
while k < 3 and board[k+1][j] == 0:
k += 1
if k != i:
board[k][j] = board[i][j]
board[i][j] = 0
if k < 3 and board[k+1][j] == board[k][j]:
board[k+1][j] *= 2
board[k][j] = 0 # 向左移动
def move_left():
for i in range(4):
for j in range(1, 4):
if board[i][j] != 0:
k = j
while k > 0 and board[i][k-1] == 0:
k -= 1
if k != j:
board[i][k] = board[i][j]
board[i][j] = 0
if k > 0 and board[i][k-1] == board[i][k]:
board[i][k-1] *= 2
board[i][k] = 0 # 向右移动
def move_right():
for i in range(4):
for j in range(2, -1, -1):
if board[i][j] != 0:
k = j
while k < 3 and board[i][k+1] == 0:
k += 1
if k != j:
board[i][k] = board[i][j]
board[i][j] = 0
if k < 3 and board[i][k+1] == board[i][k]:
board[i][k+1] *= 2
board[i][k] = 0 # 判断游戏是否结束
def is_game_over():
for i in range(4):
for j in range(4):
if board[i][j] == 0:
return False
if i > 0 and board[i][j] == board[i-1][j]:
return False
if i < 3 and board[i][j] == board[i+1][j]:
return False
if j > 0 and board[i][j] == board[i][j-1]:
return False
if j < 3 and board[i][j] == board[i][j+1]:
return False
return True # 显示当前状态
def show_board():
for i in range(4):
for j in range(4):
print(board[i][j], end=' ')
print() # 主循环
while not is_game_over():
add_new_number()
show_board()
direction = input('请输入移动方向(w/a/s/d):')
if direction == 'w':
move_up()
elif direction == 's':
move_down()
elif direction == 'a':
move_left()
elif direction == 'd':
move_right()
else:
print('输入有误,请重新输入!')
这段代码实现了一个简单的 2048 游戏,包括随机生成新数字、向上、下、左、右移动、判断游戏是否结束和显示当前状态等功能。
游戏规则:
- 游戏在一个 4x4 的棋盘上进行,每个格子上可以放置一个数字。
- 游戏开始时,棋盘上随机出现两个数字 2。
- 玩家可以通过上下左右四个方向移动数字,使相同的数字合并成一个更大的数字。
- 每移动一次,棋盘上会随机出现一个新的数字 2。
- 当棋盘上没有空位且无法再合并相同数字的方块时,游戏结束。
代码逻辑:
add_new_number()函数用于在棋盘上随机生成一个新的数字 2。move_up()、move_down()、move_left()和move_right()函数分别用于实现数字的向上、下、左、右移动。is_game_over()函数用于判断游戏是否结束。show_board()函数用于显示当前棋盘的状态。
实现细节:
- 棋盘使用二维列表来存储,每个元素表示一个格子的数字。
- 每个移动函数都使用循环遍历棋盘,并根据移动方向进行相应的操作。
- 当两个相同的数字合并时,其值会加倍。
- 游戏结束的条件是棋盘上没有空位且无法再合并相同数字的方块。
代码示例:
>>> import random
>>> board = [[0] * 4 for i in range(4)]
>>> add_new_number()
>>> show_board()
0 0 0 2
0 0 0 0
0 0 0 0
0 0 0 0
>>> direction = input('请输入移动方向(w/a/s/d):')
>>> direction
'w'
>>> move_up()
>>> show_board()
2 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
>>> add_new_number()
>>> show_board()
2 0 0 0
0 0 0 0
0 0 0 0
0 2 0 0
总结:
这段代码实现了一个简单的 2048 游戏,代码简洁易懂,适合初学者学习和理解。通过学习这段代码,可以了解到 Python 语言的基本语法、列表操作、函数定义和调用等知识。
原文地址: https://www.cveoy.top/t/topic/m5FK 著作权归作者所有。请勿转载和采集!