【问题标题】:How to code simple attack logic for 2D game in C#?如何在 C# 中为 2D 游戏编写简单的攻击逻辑?
【发布时间】:2014-12-16 05:41:59
【问题描述】:

此外,攻击有效,但主要问题是我应该 一个方向的武器攻击。

嗨,我正在制作一个回合制动作游戏,玩家可以移动或攻击敌人, 使用某种武器。敌人只是使用一个简单的攻击逻辑来检查玩家是否 附近,然后让他受到伤害。 Nearby() 使用 Math.Abs​​ 查找绝对距离。

这里是用于 Enemy 攻击的旧 Nearby() 方法:

public bool Nearby(Point locationToCheck, int distance)
        {
            if (Math.Abs(location.X - locationToCheck.X) < distance &&
            (Math.Abs(location.Y - locationToCheck.Y) < distance))
            {
                return true;
            }
            else
            {
                return false;
            }
        }

因此,包含上述方法的 Enemy 类将 Player 位置传递给该方法, 和它自己的攻击范围作为一个整数,然后检查它自己的位置,并损坏 如果返回 true,则播放器。

但是,玩家攻击更复杂。他的武器必须检查 Nearby() 距离 首先在给定的方向上。所以我需要编写一个新的重载 Nearby() 方法来使用 玩家的武器攻击逻辑。我不知道该怎么做。不知何故,玩家的武器攻击方法应该将参数传递给以下 DamageEnemy() 方法:

protected bool DamageEnemy(Direction direction, int radius, int damage, Random random) 
{
Point target = game.PlayerLocation;
    for (int distance = 0; distance < radius; distance++) {
        foreach (Enemy enemy in game.Enemies) {
            if (Nearby(enemy.Location, target, distance)) {
                enemy.Hit(damage, random);
                return true;
            }
        }
        target = Move(direction, target, game.Boundaries);
        }
                return false;
}

此 DamageEnemy 方法依赖于两个新的重载方法,即上述的 Move() 方法和重载的 Nearby() 方法。 我在 Oreilly Headfirst C#, p. 中作为教程做这个。顺便说一句,480。

*原来继承的Move()方法很简单;它只是根据来自 Direction Enum 的 4 个方向之一的输入更新继承它的对象的位置字段。

我想自己做,但真的不知道攻击逻辑应该如何工作! 谁能给我一些提示以指出正确的方向?我不知道他们希望我为什么创建新的 Move() 重载方法。玩家应该跳到他攻击的地方吗?或者它还有其他功能吗?谢谢!

【问题讨论】:

    标签: c# .net oop object adventure


    【解决方案1】:
    for (int distance = 0; distance < radius; distance++) {
            foreach (Enemy enemy in game.Enemies) {
                if (Nearby(enemy.Location, target, distance)) {
                    enemy.Hit(damage, random);
                    return true;
                }
    

    这真的很糟糕。 'for' 例程是多余的 - 可以从敌人获得距离。位置和目标,并且在每个距离上检查每个敌人需要很长时间。另外,如果路上有障碍怎么办。我认为被覆盖的 Nearby() 函数中的“距离”应该是“方向”,它可以回答你的问题。我建议:

        foreach (Enemy enemy in game.Enemies) {
            if (Nearby(enemy.Location, target, radius, direction)) {
                enemy.Hit(damage, random);
                return true;
            }
    

    此外,'move()' 函数在 distance' 循环内被调用,因此它的行为是不可预测的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 2013-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-14
      • 1970-01-01
      相关资源
      最近更新 更多