python
import random
def init_board:
board = [[0]4 for _ in range(4)]
add_new_number(board)
add_new_number(board)
return board
def add_new_number(board):
empty_cells = [(i, j) for i in range(4) for j in range(4) if board[i][j] == 0]
if not empty_cells:
return False
i, j = random.choice(empty_cells)
board[i][j] = 2 if random.random < 0.9 else 4
return True
def transpose(board):
return [list(row) for row in zip(board)]
def move_row_left(row):
new_row = [num for num in row if num != 0]
score = 0
for i in range(len(new_row)-1):
if new_row[i] == new_row[i+1]:
new_row[i] = 2
score += new_row[i]
new_row[i+1] = 0
new_row = [num for num in new_row if num != 0]
new_row += [0](4
return new_row, score
def move_left(board):
new_board = []
total_score = 0
moved = False
for row in board:
original_row = row.copy
new_row, score = move_row_left(row)
new_board.append(new_row)
total_score += score
if new_row != original_row:
moved = True
return new_board, moved, total_score
def move_right(board):
new_board = []
total_score = 0
moved = False
for row in board:
reversed_row = row[::-1]
new_reversed, score = move_row_left(reversed_row)
new_row = new_reversed[::-1]
new_board.append(new_row)
total_score += score
if new_row != row:
moved = True
return new_board, moved, total_score
def move_up(board):
transposed = transpose(board)
new_transposed, moved, score = move_left(transposed)
new_board = transpose(new_transposed)
return new_board, moved, score
def move_down(board):
transposed = transpose(board)
new_transposed, moved, score = move_right(transposed)
new_board = transpose(new_transposed)
return new_board, moved, score
def print_board(board):
horizontal_line = "+" + "+" 4
print(horizontal_line)
for row in board:
print("|", end="")
for num in row:
print(f"{num:^5}|" if num != 0 else " |", end="")
print("
+ horizontal_line)
def has_2048(board):
for row in board:
if 2048 in row:
return True
return False
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]:
return False
for j in range(4):
for i in range(3):
if board[i][j] == board[i+1][j]:
return False
return True
def main:
board = init_board
total_score = 0
print("2048 Game
while True:
print_board(board)
print(f"Score: {total_score}")
direction = input("Enter direction (W/A/S/D): ").upper
if direction not in ['W', 'A', 'S', 'D']:
print("Invalid direction! Use W (up), A (left), S (down), D (right)")
continue
if direction == 'A':
new_board, moved, score = move_left(board)
elif direction == 'D':
new_board, moved, score = move_right(board)
elif direction == 'W':
new_board, moved, score = move_up(board)
elif direction == 'S':
new_board, moved, score = move_down(board)
if moved:
total_score += score
board = new_board
add_new_number(board)
if has_2048(board):
print_board(board)
print("Congratulations! You've reached 2048!")
if is_game_over(board):
print_board(board)
print("Game Over! No more moves possible.")
break
else:
print("No movement. Try another direction.")
if __name__ == "__main__":
main
这个实现包含以下功能:
1. 4x4的游戏棋盘
2. 方向控制(WASD键)
3. 数字合并与得分计算
4. 每次移动后生成新数字(2或4)
5. 游戏胜利条件(出现2048)
6. 游戏失败判断(无空格且无法合并)
7. 分数统计
8. 彩色终端输出(数字格式对齐)
游戏规则:
可以继续扩展的功能:
1. 添加颜色显示
2. 保存最高分记录
3. 增加撤销功能
4. 优化界面显示
5. 添加动画效果
6. 支持触摸操作(需要GUI库)
版权声明: 知妳网保留所有权利,部分内容为网络收集,如有侵权,请联系QQ793061840删除,添加请注明来意。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态