这个题麻烦在角色的信息不好处理
想想其实也好处理,只需要封装一个角色类,将生命值和攻击力封装起来就好了
还有一点是随从进场位置,如果出现在左边要使右面所有随从position+1
其实也好处理,正好!用Link接口实现的有add(index,element)方法,数据在列表中的位置可以完美的表示不同随从的position
更完美的是:“任意时刻,战场上的随从总是从1开始连续编号。”
简直是提醒你用这个方法。
最后注意输出顺序和间隔就好。
package csp2016_09_3;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
class Role{
int life,power;
Role(int life,int power){this.life = life;this.power=power;}
Role(int life){this.life=life;}
}
public class Main{
static List<Role> p[] = new ArrayList[2];
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine();
for (int i = 0; i < p.length; i++) {
p[i] = new ArrayList<Role>();
p[i].add(new Role(30,0));
}
int player = 0;
int pos=0,attack=0,health=0;
int attacker=0,defender=0;
while((n--)!=0){
String action = sc.next();
if(action.equals("summon")){
pos = sc.nextInt();
attack = sc.nextInt();
health = sc.nextInt();
// System.out.println(pos+" "+attack+" "+health);
p[player].add(pos, new Role(health,attack));
}else if(action.equals("attack")){
attacker = sc.nextInt();
defender = sc.nextInt();
// System.out.println(player+" "+attacker+" "+defender);
//
// for (int i = 0; i < p.length; i++) {
// for (int j = 0; j < p[i].size(); j++) {
// int pp = p[i].get(j).power;
// int hh = p[i].get(j).life;
// System.out.print(pp+" "+hh+"||");
// }
// System.out.println("||");
// }
// System.out.println(p[player].get(attacker).life+" "+p[player].get(attacker).power);
// System.out.println(p[1-player].get(defender).life+" "+p[1-player].get(defender).power);
p[player].get(attacker).life -= p[1-player].get(defender).power;
p[1-player].get(defender).life -= p[player].get(attacker).power;
if(p[player].get(attacker).life <= 0){
p[player].remove(attacker);
}
if(defender!=0 && p[1-player].get(defender).life <= 0){
p[1-player].remove(defender);
}
}else if(action.equals("end")){
player = 1-player;
}else{
System.out.println("error");
}
}
//1
if(p[0].get(0).life <=0 ) System.out.println(-1);
else if(p[1].get(0).life <=0) System.out.println(1);
else System.out.println(0);
//2
System.out.println(p[0].get(0).life);
//3
System.out.print(p[0].size()-1+" ");
for (int i = 1; i < p[0].size(); i++) {
System.out.print(p[0].get(i).life+" ");
}
System.out.println();
//4
System.out.println(p[1].get(0).life);
//5
System.out.print(p[1].size()-1+" ");
for (int i = 1; i < p[1].size(); i++) {
System.out.print(p[1].get(i).life+" ");
}
}
}