java案例统计假动作晃过防守几次?

wen java案例 2

Java案例:统计假动作晃过防守几次

下面是一个完整的Java示例,模拟篮球运动员做假动作晃过防守球员的场景,并统计成功晃过防守的次数。

java案例统计假动作晃过防守几次?

完整代码

import java.util.Random;
/**
 * 假动作晃人统计系统
 */
public class FakeMoveCounter {
    // 假动作类型枚举
    enum FakeMove {
        PUMP_FAKE("投篮假动作"),
        PASS_FAKE("传球假动作"),
        DRIVE_FAKE("突破假动作"),
        STEP_BACK("后撤步假动作"),
        HEAD_FAKE("头部假动作");
        private final String name;
        FakeMove(String name) { this.name = name; }
        public String getName() { return name; }
    }
    // 球员类
    static class Player {
        private String name;
        private int totalAttempts = 0;   // 总假动作次数
        private int successCount = 0;    // 成功晃过次数
        public Player(String name) { this.name = name; }
        /**
         * 执行假动作
         * @param move 假动作类型
         * @param defenderReaction 防守球员反应灵敏度(0~1)
         * @return 是否晃过防守
         */
        public boolean performFakeMove(FakeMove move, double defenderReaction) {
            totalAttempts++;
            Random random = new Random();
            // 不同假动作基础成功率
            double baseRate = switch (move) {
                case PUMP_FAKE -> 0.75;
                case PASS_FAKE -> 0.60;
                case DRIVE_FAKE -> 0.65;
                case STEP_BACK -> 0.70;
                case HEAD_FAKE -> 0.50;
            };
            // 防守反应越灵敏,成功率越低
            double finalRate = baseRate * (1 - defenderReaction * 0.7);
            boolean success = random.nextDouble() < finalRate;
            if (success) {
                successCount++;
                System.out.printf("  ✅ %s 使用【%s】成功晃过防守!%n", name, move.getName());
            } else {
                System.out.printf("  ❌ %s 使用【%s】被识破,防守未失位。%n", name, move.getName());
            }
            return success;
        }
        /** 统计信息 */
        public void printStats() {
            System.out.println("\n===== 球员统计 =====");
            System.out.println("球员: " + name);
            System.out.println("假动作总次数: " + totalAttempts);
            System.out.println("成功晃过次数: " + successCount);
            double rate = totalAttempts == 0 ? 0 : (successCount * 100.0 / totalAttempts);
            System.out.printf("成功率: %.2f%%%n", rate);
        }
        public int getSuccessCount() { return successCount; }
        public int getTotalAttempts() { return totalAttempts; }
    }
    // 主程序
    public static void main(String[] args) {
        Player kyrie = new Player("欧文");
        Player curry = new Player("库里");
        System.out.println("===== 比赛开始:假动作对决 =====");
        // 模拟欧文在一对一中的假动作序列
        FakeMove[] sequence1 = {
            FakeMove.PUMP_FAKE,
            FakeMove.DRIVE_FAKE,
            FakeMove.HEAD_FAKE,
            FakeMove.STEP_BACK,
            FakeMove.PUMP_FAKE
        };
        System.out.println("\n▶ 欧文 面对 防守者A (灵敏度0.5):");
        for (FakeMove m : sequence1) {
            kyrie.performFakeMove(m, 0.5);
        }
        // 模拟库里假动作序列
        FakeMove[] sequence2 = {
            FakeMove.PASS_FAKE,
            FakeMove.PUMP_FAKE,
            FakeMove.DRIVE_FAKE
        };
        System.out.println("\n▶ 库里 面对 防守者B (灵敏度0.7):");
        for (FakeMove m : sequence2) {
            curry.performFakeMove(m, 0.7);
        }
        // 输出统计
        kyrie.printStats();
        curry.printStats();
        // 汇总
        int totalSuccess = kyrie.getSuccessCount() + curry.getSuccessCount();
        int totalAttempts = kyrie.getTotalAttempts() + curry.getTotalAttempts();
        System.out.println("\n===== 全场汇总 =====");
        System.out.println("总假动作次数: " + totalAttempts);
        System.out.println("总晃过防守次数: " + totalSuccess);
        System.out.printf("整体成功率: %.2f%%%n",
                totalAttempts == 0 ? 0 : totalSuccess * 100.0 / totalAttempts);
    }
}

运行结果示例

===== 比赛开始:假动作对决 =====
▶ 欧文 面对 防守者A (灵敏度0.5):
  ✅ 欧文 使用【投篮假动作】成功晃过防守!
  ✅ 欧文 使用【突破假动作】成功晃过防守!
  ❌ 欧文 使用【头部假动作】被识破,防守未失位。
  ✅ 欧文 使用【后撤步假动作】成功晃过防守!
  ✅ 欧文 使用【投篮假动作】成功晃过防守!
▶ 库里 面对 防守者B (灵敏度0.7):
  ❌ 库里 使用【传球假动作】被识破,防守未失位。
  ✅ 库里 使用【投篮假动作】成功晃过防守!
  ❌ 库里 使用【突破假动作】被识破,防守未失位。
===== 球员统计 =====
球员: 欧文
假动作总次数: 5
成功晃过次数: 4
成功率: 80.00%
球员: 库里
假动作总次数: 3
成功晃过次数: 1
成功率: 33.33%
===== 全场汇总 =====
总假动作次数: 8
总晃过防守次数: 5
整体成功率: 62.50%

代码要点说明

要素 说明
枚举 FakeMove 定义5种假动作并绑定各自基础成功率
performFakeMove() 核心方法:计算成功率 → 随机判定 → 累加计数
难度建模 finalRate = baseRate * (1 - defenderReaction * 0.7),防守越灵敏成功率越低
统计字段 totalAttempts(总次数)、successCount(成功次数)
printStats() 输出每个球员的详细数据与成功率

扩展思路

  1. 真实数据接入:把 Random 替换为读取NBA追踪数据的概率模型。
  2. 连续组合技能:假投 + 突破"连招提高成功率。
  3. 持久化统计:将结果写入数据库或 CSV 文件,用于赛季累计。
  4. 多人对抗:引入防守球员类,双方属性博弈计算成功率。

如果你想要更简单的版本(比如只用数组和循环)或者面向对象更完整的版本(含防守球员类、多回合比赛模拟),告诉我即可,我可以再给一份。

友情链接

欧易欧易欧易欧易欧易欧易欧易欧易直播帮篮球控NBA帮比赛虎聊足球

友情链接

欧易欧易欧易欧易欧易欧易欧易欧易

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

友情链接攻略窝 · 礼包窝 · 配置窝 · 换算窝 · 算法窝 · 查文窝 · 手册窝 · 问答窝 · 全文搜 · 手册库
相关站点礼包窝 · 查文窝