java案例统计地面对抗谁胜出?

wen java案例 2

Java案例:统计地面对抗谁胜出

下面是一个完整的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%

扩展方向

  1. 引入战力属性:为角色加攻击力、防御力,用概率公式代替纯随机
  2. 真实属性对抗:P(A胜) = A攻击 / (A攻击 + B防御)
  3. 读取配置:从文件/数据库读取对战记录再统计
  4. 多人混战:改为 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、数据库)即可 👍

抱歉,评论功能暂时关闭!