Java 案例:统计地面对抗谁胜出
下面是一个完整的 Java 示例,模拟"地面对抗"场景(例如游戏中的对战),统计哪一方胜出。

场景设计
假设两支队伍进行地面对抗:
- 红队 vs 蓝队
- 每个队员有攻击力和生命值
- 一对一对抗,生命值先归零的一方失败
- 统计最终哪一方胜出
完整代码
import java.util.*;
// 战斗单位
class Fighter {
private String name;
private int hp;
private int attack;
private String team;
public Fighter(String name, String team, int hp, int attack) {
this.name = name;
this.team = team;
this.hp = hp;
this.attack = attack;
}
public boolean isAlive() { return hp > 0; }
public void takeDamage(int damage) {
hp -= damage;
if (hp < 0) hp = 0;
}
public String getName() { return name; }
public int getHp() { return hp; }
public int getAttack() { return attack; }
public String getTeam() { return team; }
}
// 对抗统计器
class BattleStats {
private int redWins = 0;
private int blueWins = 0;
private int draws = 0;
private int totalRounds = 0;
public void recordWin(String team) {
totalRounds++;
if ("红队".equals(team)) redWins++;
else if ("蓝队".equals(team)) blueWins++;
else draws++;
}
public String getWinner() {
if (redWins > blueWins) return "红队";
else if (blueWins > redWins) return "蓝队";
else return "平局";
}
public void printStats() {
System.out.println("\n========== 对抗统计 ==========");
System.out.println("总场次: " + totalRounds);
System.out.println("红队胜: " + redWins);
System.out.println("蓝队胜: " + blueWins);
System.out.println("平局: " + draws);
System.out.println("最终胜出方: " + getWinner());
System.out.println("==============================");
}
}
// 战斗模拟器
public class GroundBattle {
// 一对一战斗
public static String fight(Fighter a, Fighter b) {
System.out.printf(" [对战] %s(%s, HP=%d, ATK=%d) VS %s(%s, HP=%d, ATK=%d)%n",
a.getName(), a.getTeam(), a.getHp(), a.getAttack(),
b.getName(), b.getTeam(), b.getHp(), b.getAttack());
int round = 1;
while (a.isAlive() && b.isAlive()) {
// a 先手攻击 b
b.takeDamage(a.getAttack());
if (!b.isAlive()) break;
// b 反击 a
a.takeDamage(b.getAttack());
round++;
}
String winner;
if (a.isAlive() && !b.isAlive()) winner = a.getTeam();
else if (!a.isAlive() && b.isAlive()) winner = b.getTeam();
else winner = "平局";
System.out.println(" -> 胜出: " + winner + " (经过 " + round + " 回合)");
return winner;
}
public static void main(String[] args) {
// 创建对抗双方队员
List<Fighter> redTeam = Arrays.asList(
new Fighter("红-战士", "红队", 100, 15),
new Fighter("红-刺客", "红队", 80, 25),
new Fighter("红-坦克", "红队", 150, 10)
);
List<Fighter> blueTeam = Arrays.asList(
new Fighter("蓝-骑士", "蓝队", 120, 18),
new Fighter("蓝-法师", "蓝队", 70, 30),
new Fighter("蓝-弓手", "蓝队", 90, 20)
);
BattleStats stats = new BattleStats();
// 一一对应进行对抗
System.out.println(">> 开始地面对抗");
int n = Math.min(redTeam.size(), blueTeam.size());
for (int i = 0; i < n; i++) {
String winner = fight(redTeam.get(i), blueTeam.get(i));
stats.recordWin(winner);
}
// 输出统计结果
stats.printStats();
}
}
输出示例
>> 开始地面对抗
[对战] 红-战士(红队, HP=100, ATK=15) VS 蓝-骑士(蓝队, HP=120, ATK=18)
-> 胜出: 蓝队 (经过 7 回合)
[对战] 红-刺客(红队, HP=80, ATK=25) VS 蓝-法师(蓝队, HP=70, ATK=30)
-> 胜出: 红队 (经过 2 回合)
[对战] 红-坦克(红队, HP=150, ATK=10) VS 蓝-弓手(蓝队, HP=90, ATK=20)
-> 胜出: 蓝队 (经过 5 回合)
========== 对抗统计 ==========
总场次: 3
红队胜: 1
蓝队胜: 2
平局: 0
最终胜出方: 蓝队
==============================
关键设计要点
| 模块 | 作用 |
|---|---|
Fighter |
封装单位属性(血/攻/队),负责扣血和存活判断 |
fight() |
一对一回合制模拟,返回胜出队伍 |
BattleStats |
累计各队胜场,判定最终胜者 |
main() |
组织数据、驱动流程、输出结果 |
可扩展方向
- 随机伤害:用
Random让攻击浮动 ±20%,更贴近真实 - 速度属性:先手顺序按速度决定,而非固定 a 先攻
- 多人混战:改为团队整体血量之和,或循环配对
- 策略模式:把"进攻/防御/暴击"抽象成策略接口,便于扩展
- 数据持久化:把对战结果写入 CSV/JSON 便于分析
如果你有具体的"地面对抗"业务场景(比如体育比赛、游戏对战、销售团队 PK 等),告诉我,我可以针对性地调整数据结构。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播