用Python实现K_RIGHT键实现的2048小游戏
发布时间:2024-01-15 06:36:06
下面是一个使用Python实现的2048小游戏代码示例。
import curses
from random import randrange, choice
from collections import defaultdict
# 初始化游戏盘
def init_grid(n):
grid = [[0] * n for _ in range(n)]
# 随机生成两个初始数字
add_new(grid)
add_new(grid)
return grid
# 在空位置上随机生成一个2或4
def add_new(grid):
n = len(grid)
empty_cells = [(x, y) for x in range(n) for y in range(n) if grid[x][y] == 0]
if len(empty_cells) == 0:
return
(x, y) = choice(empty_cells)
grid[x][y] = 2 if randrange(100) < 90 else 4
# 获取可移动方向
def get_moves(grid):
n = len(grid)
moves = []
for move in range(4):
temp_grid = [row[:] for row in grid]
if move == 0: # 左
temp_grid = move_left(temp_grid)
elif move == 1: # 上
temp_grid = move_up(temp_grid)
elif move == 2: # 右
temp_grid = move_right(temp_grid)
elif move == 3: # 下
temp_grid = move_down(temp_grid)
if temp_grid != grid: # 可以移动
moves.append((move, temp_grid))
return moves
# 判断游戏是否结束
def is_game_over(grid):
return len(get_moves(grid)) == 0
# 移动操作
def move_left(grid):
new_grid = []
for row in grid:
new_row = []
last_merged = False
for i in range(len(row)):
if row[i] != 0:
if new_row and not last_merged and new_row[-1] == row[i]:
new_row[-1] *= 2
last_merged = True
else:
new_row.append(row[i])
last_merged = False
new_row += [0] * (len(row) - len(new_row))
new_grid.append(new_row)
return new_grid
# 向右移动
def move_right(grid):
return invert(move_left(invert(grid)))
# 向上移动
def move_up(grid):
return transpose(move_left(transpose(grid)))
# 向下移动
def move_down(grid):
return transpose(move_right(transpose(grid)))
# 矩阵转置
def transpose(grid):
return [list(row) for row in zip(*grid)]
# 翻转矩阵
def invert(grid):
return [row[::-1] for row in grid]
# 画出游戏界面
def draw_grid(stdscr, grid):
stdscr.clear()
for y in range(len(grid)):
for x in range(len(grid[y])):
stdscr.addstr(y * 2, x * 4, str(grid[y][x]).center(3))
stdscr.refresh()
# 游戏主循环
def main(stdscr):
# 设置窗口
curses.curs_set(0)
stdscr.nodelay(1)
# 初始化游戏盘
grid = init_grid(4)
while True:
draw_grid(stdscr, grid)
# 获得用户输入
key = stdscr.getch()
if key == curses.KEY_LEFT:
grid = move_left(grid)
elif key == curses.KEY_RIGHT:
grid = move_right(grid)
elif key == curses.KEY_UP:
grid = move_up(grid)
elif key == curses.KEY_DOWN:
grid = move_down(grid)
if is_game_over(grid):
stdscr.addstr(10, 0, "游戏结束!按任意键退出。")
stdscr.getch()
break
add_new(grid)
# 运行游戏
curses.wrapper(main)
要运行该代码,你需要在Python环境下安装curses模块。curses是一个用于终端屏幕操作的Python模块。
运行游戏后,你可以使用方向键来移动格子,如果格子无法再移动,则游戏结束并显示游戏结束的提示信息。
希望这个示例对你理解如何使用Python实现2048小游戏有所帮助。
