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

场景设计
- 两位角色进行多轮对抗
- 每轮随机产生胜负
- 统计总胜负场次,判断最终胜者
完整代码
import java.util.Random;
/**
* 地面对抗统计案例
* 模拟两名角色多轮对战,统计最终胜者
*/
public class GroundBattle {
// 角色类
static class Fighter {
String name;
int winCount = 0;
int loseCount = 0;
int drawCount = 0;
public Fighter(String name) {
this.name = name;
}
public int getTotalBattles() {
return winCount + loseCount + drawCount;
}
@Override
public String toString() {
return String.format("%s [胜:%d 负:%d 平:%d 共:%d场]",
name, winCount, loseCount, drawCount, getTotalBattles());
}
}
public static void main(String[] args) {
Fighter player1 = new Fighter("战士A");
Fighter player2 = new Fighter("战士B");
int rounds = 100; // 对抗轮数
Random random = new Random();
// 进行多轮对抗
for (int i = 1; i <= rounds; i++) {
int result = random.nextInt(3); // 0:平局 1:A胜 2:B胜
switch (result) {
case 1:
player1.winCount++;
player2.loseCount++;
break;
case 2:
player2.winCount++;
player1.loseCount++;
break;
default:
player1.drawCount++;
player2.drawCount++;
break;
}
}
// 输出统计结果
System.out.println("===== 地面对抗统计结果 =====");
System.out.println(player1);
System.out.println(player2);
System.out.println("---------------------------");
// 判断胜者
announceWinner(player1, player2);
}
/**
* 判断并宣布胜者
*/
private static void announceWinner(Fighter f1, Fighter f2) {
if (f1.winCount > f2.winCount) {
System.out.printf("🏆 最终胜者: %s (胜场 %d vs %d)%n",
f1.name, f1.winCount, f2.winCount);
} else if (f2.winCount > f1.winCount) {
System.out.printf("🏆 最终胜者: %s (胜场 %d vs %d)%n",
f2.name, f2.winCount, f1.winCount);
} else {
System.out.printf("🤝 平局! 双方各胜 %d 场%n", f1.winCount);
}
// 胜率计算
System.out.printf("%s 胜率: %.2f%%%n", f1.name, winRate(f1));
System.out.printf("%s 胜率: %.2f%%%n", f2.name, winRate(f2));
}
private static double winRate(Fighter f) {
int total = f.getTotalBattles();
return total == 0 ? 0 : (f.winCount * 100.0 / total);
}
}
运行结果示例
===== 地面对抗统计结果 =====
战士A [胜:38 负:29 平:33 共:100场]
战士B [胜:29 负:38 平:33 共:100场]
---------------------------
🏆 最终胜者: 战士A (胜场 38 vs 29)
战士A 胜率: 38.00%
战士B 胜率: 29.00%
核心设计思路
| 模块 | 说明 |
|---|---|
| Fighter类 | 封装角色名、胜/负/平计数 |
| 随机对抗 | 用 Random.nextInt(3) 模拟三种结果 |
| 统计逻辑 | 每轮根据胜负更新双方计数 |
| 胜者判定 | 比较胜场数,相同则平局 |
| 胜率计算 | 胜场 / 总场次 × 100% |
扩展方向
- 引入战力属性:为角色加攻击力、防御力,用概率公式代替纯随机
- 真实属性对抗:
P(A胜) = A攻击 / (A攻击 + B防御) - 读取配置:从文件/数据库读取对战记录再统计
- 多人混战:改为
List<Fighter>,两两对抗统计积分
如果你指的是游戏数据统计(如王者荣耀/CS)
如果你的"地面对抗"是指从游戏日志/接口数据中统计(例如某玩家对线单杀次数),核心思路类似,但需要:
// 伪代码:从日志解析对线击杀
Map<String, Integer> groundKills = new HashMap<>();
for (LogEntry e : logs) {
if (e.type == EventType.GROUND_KILL) {
groundKills.merge(e.killer, 1, Integer::sum);
}
}
// 找出击杀最多者
String winner = groundKills.entrySet().stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey).orElse("无");
需要我针对具体游戏/数据格式再定制一版吗?告诉我数据来源(日志文件、JSON、数据库)即可 👍