如何在Python+OpenCV实现的躲雪球游戏中让多个雪球在顶部随机位置重生?
多雪球下落实现方案
核心修改逻辑
- 把原来存储单个雪球位置的
ice_position变量,替换为存储所有雪球坐标的列表ice_list - 保留现有主循环逻辑,不需要额外新增while循环
- 新增雪球生成逻辑:可自定义每帧生成新雪球的概率,控制游戏难度
- 每次循环遍历所有雪球更新下落位置,删除掉落到屏幕底部的雪球,同时检测所有雪球是否碰到玩家
修改后完整代码
import numpy as np import cv2 import random WIDTH = 20 HEIGHT = 10 # 每帧生成新雪球的概率,可自行调整控制难度 SPAWN_RATE = 0.3 player_position = 0 # 存储所有雪球的坐标列表,初始默认生成1个雪球 ice_list = [[0, random.randint(0, WIDTH - 1)]] while True: # 初始化游戏画布 arr = np.zeros((HEIGHT, WIDTH)).astype(np.uint8) # 绘制玩家 arr[-1, player_position] = 255 # 随机生成新雪球 if random.random() < SPAWN_RATE: ice_list.append([0, random.randint(0, WIDTH - 1)]) # 绘制所有当前存在的雪球 for ice in ice_list: arr[ice[0], ice[1]] = 100 # 渲染游戏画面 arr = cv2.resize(arr, (WIDTH * 50, HEIGHT * 50), interpolation = cv2.INTER_NEAREST) cv2.imshow("game", arr) k = cv2.waitKey(100) # 更新所有雪球的下落位置,同时清理超出屏幕底部的雪球 new_ice_list = [] for ice in ice_list: ice[0] += 1 if ice[0] < HEIGHT: new_ice_list.append(ice) # 检测当前雪球是否撞到玩家 if ice == [HEIGHT-1, player_position]: exit() ice_list = new_ice_list # 玩家控制逻辑 if k == ord("d"): if player_position < WIDTH - 1: player_position += 1 if k == ord("a"): if player_position > 0: player_position -= 1 if k == ord("q"): exit()
可调参数说明
- 调整
SPAWN_RATE的数值可以控制雪球生成密度,数值越高生成越频繁,难度越大 - 调整
cv2.waitKey的毫秒数可以控制游戏运行速度,数值越小游戏速度越快
内容的提问来源于stack exchange,提问作者Onethird
相关产品推荐
相关产品推荐

