我目前正在研究基于文本的 RPG,并且总体上仍在学习 Java 和编程。我的问题是,我在我的程序中已经到了一个点,用户将选择他们的单位,我不知道如何在没有大型 if 语句的情况下实现这一点,这些语句在扩展或更改游戏玩法方面非常严格。我怎样才能写出可以压缩我的 if 语句并在整体上获得更模块化的批准的东西?
这是用户首先看到的内容:
欢迎来到 RPG 游戏!
请选择3个单位!
输入 1 添加游侠 100 4 10
输入 2 添加重型 100 4 15
输入 3 添加医生 100 4 10
为了回应这一点,我编写了以下内容
if (resp == 1){
if (rangerCount == 0){
ArrayList<Item> rangerInv0 = new ArrayList<Item>();
Ranger rangerObj0 = new Ranger("Ranger", 100, 4, 10, rangerInv0);
rangerObj0.pickUp(mh1000);
rangerObj0.pickUp(s1000);
rangerObj0.pickUp(t1000);
rangerObj0.equip(mh1000);
rangerObj0.equip(s1000);
rangerObj0.equip(t1000);
playerUnits.add(rangerObj0);
playerUnitsCount++;
rangerCount++;
}
else if (rangerCount == 1){
ArrayList<Item> rangerInv1 = new ArrayList<Item>();
Ranger rangerObj1 = new Ranger("Ranger", 100, 4, 10, rangerInv1);
rangerObj1.pickUp(mh1000);
rangerObj1.pickUp(s1000);
rangerObj1.pickUp(t1000);
rangerObj1.equip(mh1000);
rangerObj1.equip(s1000);
rangerObj1.equip(t1000);
playerUnits.add(rangerObj1);
playerUnitsCount++;
rangerCount++;
}
else if (rangerCount == 2){
ArrayList<Item> rangerInv2 = new ArrayList<Item>();
Ranger rangerObj2 = new Ranger("Ranger", 100, 4, 10, rangerInv2);
rangerObj2.pickUp(mh1000);
rangerObj2.pickUp(s1000);
rangerObj2.pickUp(t1000);
rangerObj2.equip(mh1000);
rangerObj2.equip(s1000);
rangerObj2.equip(t1000);
playerUnits.add(rangerObj2);
playerUnitsCount++;
rangerCount++;
}
}
else if (resp == 2) {
if (heavyCount == 0) {
ArrayList<Item> heavyInv0 = new ArrayList<Item>();
Heavy heavyObj0 = new Heavy("Heavy", 100, 4, 15, heavyInv0);
heavyObj0.pickUp(mh4000);
heavyObj0.pickUp(s1000);
heavyObj0.pickUp(t1000);
heavyObj0.equip(mh4000);
heavyObj0.equip(s1000);
heavyObj0.equip(t1000);
playerUnits.add(heavyObj0);
playerUnitsCount++;
heavyCount++;
}
else if (heavyCount == 1){
ArrayList<Item> heavyInv1 = new ArrayList<Item>();
Heavy heavyObj1 = new Heavy("Heavy", 100, 4, 15, heavyInv1);
heavyObj1.pickUp(mh4000);
heavyObj1.pickUp(s1000);
heavyObj1.pickUp(t1000);
heavyObj1.equip(mh4000);
heavyObj1.equip(s1000);
heavyObj1.equip(t1000);
playerUnits.add(heavyObj1);
playerUnitsCount++;
heavyCount++;
}
else if (heavyCount == 2){
ArrayList<Item> heavyInv2 = new ArrayList<Item>();
Heavy heavyObj2 = new Heavy("Heavy", 100, 4, 15, heavyInv2);
heavyObj2.pickUp(mh4000);
heavyObj2.pickUp(s1000);
heavyObj2.pickUp(t1000);
heavyObj2.equip(mh4000);
heavyObj2.equip(s1000);
heavyObj2.equip(t1000);
playerUnits.add(heavyObj2);
playerUnitsCount++;
heavyCount++;
}
}
else if (resp == 3) {
if (medicCount == 0) {
ArrayList<Item> medicInv0 = new ArrayList<Item>();
Medic medicObj0 = new Medic("Medic", 100, 4, 10, medicInv0);
medicObj0.pickUp(mh3000);
medicObj0.pickUp(s1000);
medicObj0.pickUp(t1000);
medicObj0.equip(mh3000);
medicObj0.equip(s1000);
medicObj0.equip(t1000);
playerUnits.add(medicObj0);
playerUnitsCount++;
medicCount++;
}
else if (medicCount == 1) {
ArrayList<Item> medicInv1 = new ArrayList<Item>();
Medic medicObj1 = new Medic("Medic", 100, 4, 10, medicInv1);
medicObj1.pickUp(mh3000);
medicObj1.pickUp(s1000);
medicObj1.pickUp(t1000);
medicObj1.equip(mh3000);
medicObj1.equip(s1000);
medicObj1.equip(t1000);
playerUnits.add(medicObj1);
playerUnitsCount++;
medicCount++;
}
else if (medicCount == 2) {
ArrayList<Item> medicInv2 = new ArrayList<Item>();
Medic medicObj2 = new Medic("Medic", 100, 4, 10, medicInv2);
medicObj2.pickUp(mh3000);
medicObj2.pickUp(s1000);
medicObj2.pickUp(t1000);
medicObj2.equip(mh3000);
medicObj2.equip(s1000);
medicObj2.equip(t1000);
playerUnits.add(medicObj2);
playerUnitsCount++;
medicCount++;
}
}
else {
System.out.println("Please enter a valid responce!");
}
您看到在 pickUp() 和equip() 的多个实例中引用的对象如下所示:
static Item mh1000 = new Item ("AR1", "Damage", 2, null, 0, null, 0, false, false);
对我来说,这一切似乎都很麻烦。如果我想让它成为一个有 5 个单元或 10 个单元的游戏,我真的必须在每个条目中添加 2 到 7 行代码来完成这个吗?似乎应该有一个更简单的方法来做到这一点。请指教。