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

时间:2019-05-08 13:22:26

标签: python pygame

我正在使用python在pygame模块中创建一个战斗/战斗系统。基本上,我有一只老鼠,由ratX和ratY控制,而我有一个玩家,由var x和y控制。老鼠只会简单地跟随玩家输入以下代码:

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”旋转。如果该变量等于-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中执行此操作,还是可以自己创建此方法?任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

现在,我在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]