You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 09:24:04