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

Python竞速游戏数值归0时未终止问题排查求助

双角色竞速游戏终止逻辑修复

问题描述

开发的双角色竞速游戏中,通过随机数值模拟猎豹(Cheetah)和兔子(Rabbit)的进度,但角色数值归0时游戏并未终止,甚至会变成负数。调整if Cheetah and Rabbit == 0的判断逻辑后仍未解决问题。

原代码如下:

import time
import random

Cheetah = 222
Rabbit = 222

for i in range(222):
    a = random.randint(4, 10)
    if Cheetah == 0:
        print("Cheetah Wins!")
        break
    if a == 4:
        Cheetah = Cheetah - 4
        print(Cheetah, "Cheetah")
    elif a == 5:
        Cheetah = Cheetah - 5
        print(Cheetah, "Cheetah")
    elif a == 6:
        Cheetah = Cheetah - 6
        print(Cheetah, "Cheetah")
    elif a == 7:
        Cheetah = Cheetah - 7
        print(Cheetah, "Cheetah")
    elif a == 8:
        Cheetah = Cheetah - 8
        print(Cheetah, "Cheetah")
    elif a == 9:
        Cheetah = Cheetah - 9
        print(Cheetah, "Cheetah")
    elif a == 10:
        Cheetah = Cheetah - 10
        print(Cheetah, "Cheetah")

    b = random.randint(3, 10)
    if Rabbit == 0:
        print("Rabbit Wins")
        break
    if b == 3:
        Rabbit = Rabbit - 3
        print(Rabbit, "Rabbit")
    elif b == 4:
        Rabbit = Rabbit - 4
        print(Rabbit, "Rabbit")
    elif b == 5:
        Rabbit = Rabbit - 5
        print(Rabbit, "Rabbit")
    elif b == 6:
        Rabbit = Rabbit - 6
        print(Rabbit, "Rabbit")
    elif b == 7:
        Rabbit = Rabbit - 7
        print(Rabbit, "Rabbit")
    elif b == 8:
        Rabbit = Rabbit - 8
        print(Rabbit, "Rabbit")
    elif b == 9:
        Rabbit = Rabbit - 9
        print(Rabbit, "Rabbit")
    elif b == 10:
        Rabbit = Rabbit - 10
        print(Rabbit, "Rabbit")

问题根源

  1. 判断时机错误:原代码在扣减数值前检查是否为0,但扣减后数值才会降到0或负数,此时不会触发胜利判断,要等下一次循环才会检查,导致数值继续被扣成负数。
  2. 未处理超量扣减:当剩余数值小于随机扣减值时,直接相减会变成负数,没有限制为0,也不会触发胜利。
  3. 代码冗余:逐个判断随机数的写法完全没必要,直接用随机数扣减数值即可。

修复后的代码

import random

cheetah = 222
rabbit = 222

while True:
    # 猎豹回合
    step = random.randint(4, 10)
    cheetah -= step
    if cheetah <= 0:
        cheetah = 0
        print(f"{cheetah} Cheetah")
        print("Cheetah Wins!")
        break
    print(f"{cheetah} Cheetah")

    # 兔子回合
    step = random.randint(3, 10)
    rabbit -= step
    if rabbit <= 0:
        rabbit = 0
        print(f"{rabbit} Rabbit")
        print("Rabbit Wins!")
        break
    print(f"{rabbit} Rabbit")

修复说明

  • 更换循环类型:把固定次数的for循环换成while True,直到有一方胜利才终止,避免循环次数限制导致的问题。
  • 调整判断逻辑:扣减数值后立即检查是否≤0,直接将数值设为0并触发胜利,终止游戏。
  • 简化代码结构:去掉冗余的elif判断,直接用随机生成的步数扣减数值,代码更简洁易读。
  • 规范变量命名:遵循Python小写字母加下划线的命名规范,提升代码可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:20:31