Python:如何创建战斗/战斗系统

2024-10-02 10:22:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python在pygame模块中创建一个战斗/战斗系统。基本上,我有一个rat,由ratX和ratY控制,还有一个播放器,由VARX和y控制。rat将简单地跟随播放器,代码如下:

if movement == True:
    if x > 0:
        if ratX != x:
            if ratX > x:
                ratX -= 1
                ratFacing = 1
            else:
                ratX += 1
                ratFacing = -1
    if y > 0:
        if ratY != y+30:
            if ratY > y+30:
                ratY -= 1
            else:
                ratY += 1

之后,一旦老鼠靠近玩家(至少40像素),那么这个代码将使用距离公式检测到这一点,并减去玩家的健康值:

if (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 40):
    x -= 10*ratFacing
    if plyrHealth > 1:
        plyrHealth -= 1 
        ratX += 40*ratFacing
    else:
        run = False

现在,我添加了一个战斗系统,玩家将挥舞一把剑,物品将根据变量ra旋转。如果var等于-55,这意味着玩家达到了剑可以造成伤害的程度。如果玩家在范围内(至少100像素),这意味着玩家可以攻击老鼠并对其造成伤害:

if ra == -55 and (math.sqrt( ( (ratX - x) **2) + ( (ratY - y)**2) ) < 100): #Line that checks if sword has swung and the plyr is in range
    dam = itemInHand[11] #This is the amount of damage that the specific sword in hand does
    if isJump:
        dam *= 3
    if ratHealth - dam <= 0:
        ratHealth = 0
    else:
        ratHealth -= dam

主要的问题是,从那时起,我使用的是距离公式,我只是检查玩家是否在老鼠的射程内,他们可以攻击敌人,即使他们没有面对它。有没有一种方法可以创建一个线跟踪,例如,它将返回一个它与之碰撞的任何对象的列表?这样一来,它检测碰撞的唯一方法就是如果有一条不可见的线,如果它与一条不可见的线发生碰撞,它就会返回true。在python中是否有一种内置的方法来实现这一点,或者我可以自己创建它?任何帮助都将不胜感激。你知道吗


Tags: the方法代码if系统玩家播放器else
1条回答
网友
1楼 · 发布于 2024-10-02 10:22:21

现在,我在pygame中没有过期,但我认为,您要求的是只过滤那些近战范围内的对象(敌人、老鼠、可能是灌木丛等)。你知道吗

所以,我们需要一个元组数组(x,y),这个元组由近战范围组成。拔出剑的玩家总是有一把。有很多方法可以确定它,所以我将坚持使用常量数组。你知道吗

range = [(100,100),(100,101)]

现在我们过滤范围内的对象。你知道吗

objects_in_melee_range = [obj for obj in all_game_objects if (obj[0],obj[1]) in range]

相关问题 更多 >

    热门问题