python 小游戏《2048》字符版非图形界面
warning:
这篇文章距离上次修改已过196天,其中的内容可能已经有所变动。
# 2048 游戏的字符版实现
import random
import sys
# 游戏板的初始化
def init_board():
return [[0 for _ in range(4)] for _ in range(4)]
# 打印游戏状态
def print_board(board):
for row in board:
print(' '.join(map(str, row)))
# 生成新的数字(2或4)
def new_number():
return 2 if random.randint(0, 1) else 4
# 移动处理
def move(board, direction):
def move_row_left(row):
row = [i for i in row if i != 0]
row += [0 for _ in range(4 - len(row))]
if 2048 in row:
return True
for i in range(len(row) - 1):
if row[i] == row[i + 1] and row[i] != 0:
row[i] *= 2
row[i + 1] = 0
return True
return False
if direction == 'left':
for row in board:
if move_row_left(row):
return True
return False
elif direction == 'right':
for row in board:
row.reverse()
if move_row_left(row):
row.reverse()
return True
row.reverse()
return False
elif direction == 'up':
transposed = [list(row) for row in zip(*board)]
for row in transposed:
if move_row_left(row):
return True
return False
elif direction == 'down':
transposed = [list(row) for row in zip(*board)]
for row in transposed:
row.reverse()
if move_row_left(row):
row.reverse()
return True
row.reverse()
return False
# 游戏主循环
def play_game():
board = init_board()
board[1][1] = new_number()
board[1][2] = new_number()
game_over = False
print_board(board)
while not game_over:
direction = input("请输入移动方向(左'left', 右'right',
评论已关闭