You need to enable JavaScript to run this app. Python浆果收集小游戏:实现随机emoji替换与碰撞检测的最简方法
优惠活动
大模型
产品
解决方案
定价
更多

Python浆果收集小游戏:实现随机emoji替换与碰撞检测的最简方法

浆果生成与碰撞检测的最简实现

首先解决现有代码的核心逻辑问题:之前每次调用地图渲染函数assignstring()时,都会当场随机生成浆果坐标,这会导致每次玩家移动刷新地图,浆果位置就随机跳变,根本无法稳定存储坐标做碰撞判定。

整个实现不需要改动原本的游戏框架,只需要4步调整:

  • 把浆果坐标改成全局变量存储,仅在游戏启动、玩家完成收集时更新,不会随地图刷新乱跑
  • 修正伪代码里的赋值笔误:不要两次给同一个变量berrycord1赋值,分别按照地图的行、列有效范围生成坐标,同时加校验避免浆果刷在玩家出生/当前位置上
  • 把默认场景的禁止emoji,在浆果坐标位置替换为实际的浆果emoji
  • 加1行碰撞判定:玩家坐标与浆果坐标重合时,触发重新生成新的浆果位置,完成收集逻辑

关键代码调整点

  1. 在全局变量区(原有posx、posy定义的下方)新增全局存储的浆果坐标,做初始位置校验:
# 全局存储浆果坐标,范围和地图循环边界完全匹配
berry_y = random.randint(0, 8)  # 对应地图行范围:循环a是range(9),合法值0-8
berry_x = random.randint(0, 20) # 对应地图列范围:循环i是range(21),合法值0-20

# 初始校验,避免浆果刷在玩家初始位置上
while berry_y == posy and berry_x == posx:
    berry_y = random.randint(0, 8)
    berry_x = random.randint(0, 20)
  1. 补全berryspawn函数,替代原有随机生成浆果坐标的逻辑:
def berryspawn():
    global berry_x, berry_y, posx, posy
    # 重新生成浆果坐标,避开玩家当前所在位置
    berry_y = random.randint(0, 8)
    berry_x = random.randint(0, 20)
    while berry_y == posy and berry_x == posx:
        berry_y = random.randint(0, 8)
        berry_x = random.randint(0, 20)
  1. 修改assignstring函数的渲染逻辑:
    删掉函数内部原来每次随机生成bers1、bers2的代码,把原有判断逻辑替换为调用全局存储的浆果坐标,显示浆果emoji:
# 删除原函数内的临时随机坐标代码
# bers1 = random.randint(0, 22)
# bers2 = random.randint(0, 10)
# print(bers1, bers2)

for a in range(9):
    for i in range(21):
        if i == posx and a == posy:
            s = s + emoji.emojize(":bear:")
        elif a == berry_y and i == berry_x:
            s = s + emoji.emojize(":strawberry:") # 替换为需要的浆果emoji
        else:
            s = s + emoji.emojize(":prohibited:")
  1. 在游戏主循环里加入碰撞检测逻辑:
    顺手修正原代码里的小bug——原来连续两次调用poschange函数会导致坐标计算错位,直接合并成一次调用即可,之后加收集判定:
while True:
    savex = posx
    savey = posy
    # 修正原代码两次调用poschange的bug
    posx, posy = poschange(posx, posy)

    # 检测是否碰到浆果
    if posx == berry_x and posy == berry_y:
        print("收集到1个浆果!")
        berryspawn() # 触发新的浆果生成

    if savex != posx or savey != posy:
        assignstring()
        print(posx, posy)

调整完成后,浆果会固定停留在场景位置,不会随着地图刷新乱跑,玩家走到浆果位置时会自动触发收集、重新生成新的浆果,完全满足存储坐标做碰撞检测的需求。

内容的提问来源于stack exchange,提问作者Miklath

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 18:54:04