问 题 描述: |
问题描述 《炉石传说:魔兽英雄传》(Hearthstone: Heroes of Warcraft,简称炉石传说)是暴雪娱乐开发的一款集换式卡牌游戏(如下图所示)。游戏在一个战斗棋盘上进行,由两名玩家轮流进行操作,本题所使用的炉石传说游戏的简化规则如下: 输入格式 输入第一行是一个整数 n,表示操作的个数。接下来 n 行,每行描述一个操作,格式如下: 输出格式 输出共 5 行。 样例输入 8 样例输出 0 样例说明 按照样例输入从第 2 行开始逐行的解释如下: 评测用例规模与约定 * 操作的个数0 ≤ n ≤ 1000。 |
package hearthStone;
import java.util.Scanner;
import java.util.Vector;
public class Main {
static Vector<Role> player1 = new Vector<>();// 先手玩家
static Vector<Role> player2 = new Vector<>();// 后手玩家
static Vector<Role> player;// 当前回合玩家
static Vector<Role> oppo;// 当前回合对手玩家
@SuppressWarnings("resource")
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();// 操作数
String operation;// 操作语句
Role hero1 = new Role(0, 30);// 创建先手玩家的英雄0攻30血
Role hero2 = new Role(0, 30);// 创建后手玩家的英雄
player1.add(hero1);// 0下标位置存储该玩家英雄
player2.add(hero2);
sc.nextLine();
boolean flag = true;// 回合标记:先手玩家回合值为:true,后手玩家回合值为:false
for (int i = 0; i < n; i++) {
player = round(flag);// 判断当前回合玩家
operation = sc.nextLine();// 获取操作指令
String[] values = operation.split(" ");
switch (values[0]) {
case "summon":
int pos = Integer.valueOf(values[1]);// 获取位置
int atk = Integer.valueOf(values[2]);// 获取攻击力
int health = Integer.valueOf(values[3]);// 获取生命值
Role servant = new Role(atk, health);// 创建随从,初始化攻击力与生命值
player.add(pos, servant);// 将该随从置入战场
break;
case "attack":
int attacker = Integer.valueOf(values[1]);// 攻击者序号
int defender = Integer.valueOf(values[2]);// 防御者序号
oppo = round(!flag);
oppo.get(defender).setHealth(
oppo.get(defender).health - player.get(attacker).atk);
// 攻击者对防御者生命值造成攻击力值的伤害
player.get(attacker).setHealth(
player.get(attacker).health - oppo.get(defender).atk);
// 攻击者生命值受到防御者攻击力值的伤害
if (player.get(attacker).health <= 0)// 随从生命值小于0则移除
player.remove(attacker);
if (defender != 0 && oppo.get(defender).health <= 0)
oppo.remove(defender);
break;
case "end":
flag = !flag;//切换玩家回合
break;
}
}
// 输出
int winner = 0;
String str;
if (player1.get(0).health <= 0)// 判断当前胜负
winner = -1;
if (player2.get(0).health <= 0)
winner = 1;
System.out.println(winner);
System.out.println(player1.get(0).health);
str = String.valueOf(player1.size() - 1);
for (int i = 1; i < player1.size(); i++) {
str += " " + player1.get(i).health;
}
System.out.println(str);
System.out.println(player2.get(0).health);
str = String.valueOf(player2.size() - 1);
for (int i = 1; i < player2.size(); i++) {
str += " " + player2.get(i).health;
}
System.out.println(str);
}
public static Vector<Role> round(boolean flag) {
if (flag)// 判断当前属于哪位玩家的回合
return player1;
else
return player2;
}
}
class Role// 角色
{
int atk;
int health;
public Role(int atk, int health) {
this.atk = atk;
this.health = health;
}
public int getAtk() {
return atk;
}
public void setAtk(int atk) {
this.atk = atk;
}
public int getHealth() {
return health;
}
public void setHealth(int health) {
this.health = health;
}
}