我正在创建一个基于文本的游戏,但遇到了一些问题。到目前为止,我有一个战斗课,以及两个用于两种不同武器的课。我正在尝试为武器本身分配生命值。但是我最大的问题是战斗课。我试图将其创建为在随机的时间会有随机的武器掉落以及随机的武器。到目前为止,在“战斗”课程中我有以下内容:

public class Combat {
    final int chanceOfDrop = 3;
    static Weapons[] wepArray = {new M4(), new M16()}
    static boolean[] hasWeapon = {false, true};

    public static int  ranNumberGen(int chanceOfDrop) {
        return (int) (Math.random()*1);
    }

    private void enemyDead() {
        boolean canDrop = false;
        if(ranNumberGen(chanceOfDrop)==0){
            canDrop = true;

        }

        if(canDrop == true){
            givePlayerWeapon(Weapon[Combat.ranNumberGen(Weapons.length)]);
        }

        private static void givePlayerWeapon(int w) {
            hasWeapon[w] = true;

            for w <(Weapons.length-1) {
                if has weapon[w] {
                    System.out.println(wepArray[w].getWeaponName);
                }
                }
        }
    }

    }
}


创建新的M4()和新的M16()时我遇到问题,它说类型不匹配:无法将M4形式转换为武器。我确实有一个名为“武器”的课程,这可能是问题吗?

这是我的M4类,M4和M16类都是相同的

public abstract class M4 {
  private Integer weaponDamage = 5;
  private Integer weaponAmmo = 25;
  private String weaponName = "M4";

  public M4(String name, int ammo, int damage) {
    name = weaponName;
    ammo = weaponAmmo;
    damage = weaponDamage;
  }

  public String getWeaponName() {
    return weaponName;
  }

  public Integer getAmmo() {
    return weaponAmmo;
  }

  public Integer getDamage() {
    return weaponDamage;
  }
}


我认为这里没有任何问题。也许我的问题就在于此。虽然,我有武器课,但其中一无所有。我需要那个吗?

最佳答案

乍看之下需要解决的几件事:


创建一个通用的武器类,该类定义一些适用于每种武器的属性,例如名称,伤害,弹药,范围倍增器等。然后创建武器的子类,例如M4和M16,以指定属性并最终添加特定于武器的属性属性。
在此行添加括号:

System.out.println(wepArray[w].getWeaponName); // Change to getWeaponName()

从M4中删除abstract关键字。
修复ranNumberGen方法,因为它现在总是会返回0。 Math.random()返回[0,1 [范围内的浮点数。这意味着将其强制转换为int始终将为0。将其乘以n可得到一个范围为[0,n [。]的随机int。您可能想要这样:

public static int ranNumberGen(int max) {
    return (int) (Math.random() * max);
}

更改此行:

givePlayerWeapon(Weapon[Combat.ranNumberGen(Weapons.length)]);


至:

givePlayerWeapon(wepArray[Combat.ranNumberGen(wepArray.length)]);

for循环的语法如下:

for (variable-initialization; condition; increment)


因此,就您而言,您想要:

for (int i = 0; i < hasWeapon.length; ++i)
{
    if (hasWeapon[i]) System.out.println(wepArray[i].getWeaponName());
}

09-27 05:33