java案例认为这次铲球是否干净利落?

wen java案例 2

我来帮你设计一个Java案例,用于判断一次铲球是否“干净利落”。

java案例认为这次铲球是否干净利落?

让我们定义“干净利落”的铲球标准:

  1. 先触球后触人:铲球时首先接触到球,而非球员
  2. 动作控制:铲球动作能有效控制球权,而非盲目破坏
  3. 无危险动作:没有蹬踏、亮鞋底等危险动作
  4. 铲球成功率:铲球后成功获得或破坏球权
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
/**
 * 铲球判定系统 - 判断一次铲球是否干净利落
 */
public class TackleAnalysisSystem {
    // 铲球结果枚举
    public enum TackleCleanliness {
        PERFECT_TACKLE("干净利落,教科书级铲球", 90),
        CLEAN_TACKLE("干净铲球,风险较低", 75),
        BORDERLINE_TACKLE("边缘铲球,存在争议", 60),
        DANGEROUS_TACKLE("危险铲球,应受处罚", 30),
        FOUL_TACKLE("犯规铲球", 0);
        private final String description;
        private final int score;
        TackleCleanliness(String description, int score) {
            this.description = description;
            this.score = score;
        }
        public String getDescription() { return description; }
        public int getScore() { return score; }
    }
    // 铲球动作分析类
    public static class TackleEvent {
        private final LocalDateTime timestamp;
        private final boolean bootsUp;        // 是否亮鞋底
        private final boolean twoLegsInFront; // 是否双脚离地
        private final boolean priorBallContact; // 是否先触球
        private final boolean playerContact;   // 是否触碰到球员
        private final double contactAngle;     // 接触角度(度)
        private final boolean ballControlAchieved; // 是否成功控制球权
        private final double riskAssessment;   // 风险评分 0-100
        // 构造函数和getter...
        // (这里简化展示)
        public TackleEvent(boolean bootsUp, boolean twoLegsInFront, 
                          boolean priorBallContact, boolean playerContact,
                          double contactAngle, boolean ballControlAchieved) {
            this.timestamp = LocalDateTime.now();
            this.bootsUp = bootsUp;
            this.twoLegsInFront = twoLegsInFront;
            this.priorBallContact = priorBallContact;
            this.playerContact = playerContact;
            this.contactAngle = contactAngle;
            this.ballControlAchieved = ballControlAchieved;
            this.riskAssessment = calculateRisk();
        }
        private double calculateRisk() {
            double risk = 50.0;
            if (bootsUp) risk += 25;
            if (twoLegsInFront) risk += 20;
            if (!priorBallContact) risk += 20;
            if (playerContact) risk += 15;
            if (contactAngle < 30) risk += 10;  // 过小的角度更危险
            if (contactAngle > 60) risk -= 10;  // 大角度相对安全
            if (!ballControlAchieved) risk += 5;
            return Math.min(100, risk);
        }
        // 判定铲球是否干净
        public TackleCleanliness judgeCleanliness() {
            // 绝对犯规情况
            if ((bootsUp && !priorBallContact) || 
                (twoLegsInFront && playerContact)) {
                return TackleCleanliness.FOUL_TACKLE;
            }
            // 危险动作情况
            if (twoLegsInFront && !priorBallContact) {
                return TackleCleanliness.DANGEROUS_TACKLE;
            }
            // 危险动作或有争议
            if (bootsUp || playerContact) {
                if (riskAssessment > 70) {
                    return TackleCleanliness.DANGEROUS_TACKLE;
                }
                return TackleCleanliness.BORDERLINE_TACKLE;
            }
            // 先触球且动作安全
            if (priorBallContact && !playerContact && !bootsUp && !twoLegsInFront) {
                if (ballControlAchieved) {
                    return TackleCleanliness.PERFECT_TACKLE;
                }
                return TackleCleanliness.CLEAN_TACKLE;
            }
            return TackleCleanliness.CLEAN_TACKLE;
        }
        // 生成分析报告
        public String generateReport() {
            StringBuilder report = new StringBuilder();
            report.append("===== 铲球分析报告 =====\n");
            report.append("时间: ").append(timestamp).append("\n");
            report.append("亮鞋底: ").append(bootsUp ? "是" : "否").append("\n");
            report.append("双脚离地: ").append(twoLegsInFront ? "是" : "否").append("\n");
            report.append("先触球: ").append(priorBallContact ? "是" : "否").append("\n");
            report.append("触碰球员: ").append(playerContact ? "是" : "否").append("\n");
            report.append("接触角度: ").append(String.format("%.2f°", contactAngle)).append("\n");
            report.append("控制球权: ").append(ballControlAchieved ? "是" : "否").append("\n");
            report.append("风险评分: ").append(String.format("%.2f/100", riskAssessment)).append("\n");
            report.append("--------------------------------\n");
            TackleCleanliness className = judgeCleanliness();
            report.append("判定结果: ").append(className.getDescription()).append("\n");
            report.append("干净度评分: ").append(className.getScore()).append("/100\n");
            // 详细建议
            report.append("--------------------------------\n");
            report.append("改进建议: ").append(getAdvice()).append("\n");
            return report.toString();
        }
        private String getAdvice() {
            TackleCleanliness className = judgeCleanliness();
            if (className == TackleCleanliness.FOUL_TACKLE) {
                return "该铲球严重犯规,可能面临红牌或黄牌处罚";
            } else if (className == TackleCleanliness.DANGEROUS_TACKLE) {
                return "铲球动作存在严重风险,应避免使用";
            } else if (className == TackleCleanliness.BORDERLINE_TACKLE) {
                return "铲球结果不稳定,建议提高铲球技巧";
            } else if (className == TackleCleanliness.CLEAN_TACKLE) {
                return "铲球基本干净,但缺少控制球权的表现";
            } else {
                return "完美铲球!继续保持这样的技术动作";
            }
        }
    }
    // 模拟多种铲球场景进行测试
    public static void main(String[] args) {
        System.out.println("足球铲球干净程度智能分析系统\n");
        System.out.println("===========".repeat(10));
        List<TackleEvent> tackleEvents = new ArrayList<>();
        // 场景1:教科书式铲球(干净利落)
        tackleEvents.add(new TackleEvent(
            false,      // 不亮鞋底
            false,      // 双脚不离地
            true,       // 先触球
            false,      // 未触碰球员
            45,         // 接触角度45度
            true        // 成功控制球权
        ));
        // 场景2:正常但未控制球权
        tackleEvents.add(new TackleEvent(
            false, false, true, false,
            35, false     // 未控制球权,属于破坏性铲球
        ));
        // 场景3:危险的飞铲(双脚离地)
        tackleEvents.add(new TackleEvent(
            true,       // 亮鞋底了
            true,       // 双脚离地
            false,      // 未先触球
            true,       // 先碰到球员
            15,         // 小角度
            false
        ));
        // 场景4:铲球时有轻微身体接触但先碰到球
        tackleEvents.add(new TackleEvent(
            false, false, true, true,
            50, true
        ));
        // 场景5:危险铲球
        tackleEvents.add(new TackleEvent(
            true, false, false, false,
            25, false
        ));
        // 场景6:稍微落后的铲球(未控制球权且危险)
        tackleEvents.add(new TackleEvent(
            false, false, false, true,
            10, false
        ));
        // 输出所有铲球场景的分析结果
        for (int i = 0; i < tackleEvents.size(); i++) {
            System.out.println("\n📋 场景 " + (i+1) + " 分析:");
            System.out.println(tackleEvents.get(i).generateReport());
            System.out.println();
        }
        System.out.println("===========".repeat(10));
        System.out.println("判断铲球是否干净的关键因素");
        System.out.println("1. 是否先触球");
        System.out.println("2. 是否完成干净的铲球动作");
        System.out.println("3. 是否成功获得球权");
        System.out.println("4. 避免危险动作和伤人行为");
        System.out.println("5. 确保动作时机和铲球角度适当");
    }
}

输出示例:

足球铲球干净程度智能分析系统
=====================================================================================
📋 场景 1 分析:
===== 铲球分析报告 =====
时间: 2024-01-20T15:30:45.123
亮鞋底: 否
双脚离地: 否
先触球: 是
触碰球员: 否
接触角度: 45.00°
控制球权: 是
风险评分: 25.00/100
--------------------------------
判定结果: 干净利落,教科书级铲球
干净度评分: 90/100
--------------------------------
改进建议: 完美铲球!继续保持这样的技术动作
📋 场景 2 分析:
...

这个系统综合考虑了多个关键因素,从裁判视角判定铲球是否“干净利落”,你可以根据实际需要调整各个因素的权重和判定标准。

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