如何用流程控制配合封装思想编写一个高内聚的猜拳游戏核心逻辑

阿敏同学_7314

阿敏同学_7314

2026-06-16

855人浏览

原创

猜拳游戏应采用高内聚设计:用状态机管理生命周期,解耦出拳与判定逻辑,以命令模式统一操作入口,并通过封装隐藏实现细节。

如何用流程控制配合封装思想编写一个高内聚的猜拳游戏核心逻辑

猜拳游戏的核心逻辑要高内聚,关键不是堆功能,而是把“谁出什么”“怎么判输赢”“状态怎么流转”这几件事严格隔离、各自闭环。流程控制负责驱动节奏,封装思想负责藏好细节——两者配合,才能让核心逻辑既易读、易测、又不随UI或输入方式变化而散架。

用状态机明确游戏生命周期

猜拳不是线性执行一次就完,它有明确阶段:等待玩家选择 → 等待电脑响应 → 判定结果 → 展示并准备下一局。把这些阶段建模成有限状态(如 WAITING_PLAYER、RESOLVING、SHOWING_RESULT),用一个 state 变量统一管控。所有操作都先校验当前状态是否允许——比如只有在 WAITING_PLAYER 时才接受玩家输入,否则忽略。

  • 避免用一堆 if-else 判断“现在能不能点石头”,直接 switch(state) 分发行为
  • 状态变更必须通过受控方法(如 nextRound()、reset()),禁止外部直接改 state
  • 每个状态的进入/退出可预留钩子(如 enterShowingResult()),方便后续加动画或日志

把“出拳”和“判定”彻底解耦

玩家出拳、电脑出拳、胜负判定,三者逻辑独立、职责分明。定义一个 HandGesture 枚举(ROCK、PAPER、SCISSORS),所有出拳动作只返回这个类型,不带任何显示或交互信息;胜负规则单独封装为纯函数 resolveWinner(player: HandGesture, cpu: HandGesture): Result,输入确定、输出唯一、无副作用。

Fish Audio
Fish Audio

Fish Audio是一款提供高表现力文本转语音、声音克隆和开源语音模型的 AI 语音平台。

下载
  • 玩家选择由外部触发(按钮点击/键盘),但只调用 game.makeChoice(ROCK),不参与计算
  • 电脑出拳逻辑(随机/算法)也封装在 game.generateCpuChoice(),返回 HandGesture,不暴露 Math.random() 细节
  • 判定函数不修改任何状态,只返回 { winner: 'player'|'cpu'|'tie', reason: 'rock crushes scissors' } 这类不可变结果

用命令模式统一操作入口

所有改变游戏行为的动作(开始、重试、选拳、跳过)都包装成 Command 对象,每个 Command 实现统一接口:execute(): void。Game 类只暴露一个 dispatch(command) 方法。这样,UI 层完全不用知道“现在能不能点”,也不用判断 state —— 它只管发命令,Game 内部根据当前状态决定执行、拒绝或排队。

  • 例如 MakeChoiceCommand 持有 gesture,execute 里先检查 state === WAITING_PLAYER,再调用内部 chooseHand()
  • ResetCommand 负责清空回合数据、重置 state,不关心 UI 是否正在动画
  • 命令可被日志记录、撤销重做、甚至回放测试,核心逻辑零污染

隐藏实现细节,只暴露意图接口

对外只提供语义清晰的方法:startNewGame()、makeChoice(gesture)、nextRound()、getGameState()。绝不暴露数组、计数器、临时变量或内部枚举值。getGameState() 返回的是精简的只读视图对象,如 { playerScore: 2, cpuScore: 1, lastResult: 'win', currentPlayerGesture: 'rock' },字段名反映业务含义,而非技术结构。

  • 内部用 private 字段存回合历史,但外部无法遍历或修改 history 数组
  • score 不是 public number,而是通过 incrementPlayerScore() 修改,确保变更可控
  • 所有 getter 都返回新对象或原始值,不返回引用,防止外部意外篡改

不复杂但容易忽略:高内聚不是写得少,而是每行代码都知道自己属于哪一层、只为一件事存在。流程控制划清边界,封装守住边界——猜拳虽小,恰是练手这两股力的好靶子。

相关文章

在线游戏
在线游戏

海量精品小游戏合集,无需安装即点即玩,休闲益智、动作闯关应有尽有,秒开即玩,轻松解压,快乐停不下来

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10897

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8022

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6952

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1416

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2869

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20151

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程