type
status
date
slug
summary
tags
category
icon
password
fullWidth
fullWidth
CrossChess-井字棋单机小游戏
备注:某厂技术策划笔试,完成于2024/04/05
itch.io的WebGL可玩版本:
安装和运行方法
- Windows版本(Github上)的安装运行方法:
- 访问:访问游戏的Github页面:Shirakoko/CrossChess: 技术策划笔试 (github.com)
- 下载: 可以从main分支下载,也可从Compressed分支下载
- 解压:右键点击CrossChess.zip,选择“解压到当前文件夹”
- 打开解压后的文件夹,找到游戏的启动程序,即CrossChess.exe
- 启动:双击启动程序
- WebGL版本(发布在itch.io上)的运行方法
- 打开您的网络浏览器
- 输入或粘贴游戏在itch.io上的网址:井字棋小游戏 by Yuki (itch.io)
- 在游戏页面上,找到游戏启动按钮“Run game”,游戏将在浏览器窗口加载
请注意,运行WebGL版本的游戏可能需要一个兼容的浏览器和足够的系统资源。如果游戏在加载时出现问题,尝试更新浏览器或检查网络连接
功能拆解
已实现的功能
- 人人对战模式:允许两名玩家在同一设备上轮流进行游戏
- 每位玩家都可以在空闲的格子中放置自己的标记(黑子或白子)
- 游戏会在一名玩家获胜或所有格子被填满时结束
- 人机对战模式:玩家可以选择与电脑AI对战
- 玩家可选择先手或后手
- 游戏会在玩家或电脑获胜,或所有格子被填满时结束
- 电脑对战模式:两个AI程序自动进行对战,玩家作为观战者
- 此模式可用于展示电脑AI的能力或供玩家学习策略
- 游戏中的电脑AI提供两种AI难度选项:
- 简单AI:执行在空白位置随机落子
- 困难AI:使用更复杂的算法(Minimax)来计算最佳落子位置
- 战局数据保存和回放功能:
- 在每局游戏结束后,可以将游戏结果和相关数据保存到本地文件
- V1.0中保存的数据包括双方玩家名称和获胜者
- 战局数据保存为二进制格式,以便于存储和读取(Windows版本支持战局数据本地化,WebGL版本只支持单次运行时保存)
- 对局的每一步记录和模拟回放
其他待实现的潜在功能
- 支持账号密码的登陆系统
- 基于账号的玩家统计信息(如胜率)
- 在线多人对战
- 自定义游戏界面和标记
- ......
类和脚本UML图
- 控制管理的Mono脚本
- GameManager:游戏的总管理,生命周期是从程序运行到退出,存在于每个场景
- GameController:游戏逻辑控制者,仅存在于Game场景,实现核心玩法逻辑
- UI的Mono脚本
- Panel_Manu:游戏主页面板
- Panel_Set:设置对局双方信息的面板
- Panel_RoundsInfo:显示历史战局信息的面板
- Panel_Replay:(正确命名应该是Panel_Replicate)复现战局的面板
- 信息类
- Player:玩家信息类,在GameController的Start()函数中实例化,表示对局双方
- Round:战局信息类,在GameController的Btn_Save()函数中实例化,用于占据信息保存
- 其他功能类
- Grid:Mono脚本,挂在在格子UI游戏物体上,用于鼠标点击响应和棋子UI显隐
- AIPlayer:非Mono脚本,若对战双方含电脑AI,则在GameController的Start()函数中实例化
场景和用户界面UML图
- 游戏共有三个场景,它们之间的通过Button实现切换(由于资源体量小,本游戏全都采用同步加载)
- Scenes/Menu:入口场景,主页面
- Scenes/Set:设置对局双方信息(是电脑还是玩家、玩家昵称、电脑难度)
- Scenes/Game:游玩场景
玩法流程图
- 游戏玩法分为三种:
- PvP:人人对战,先手玩家和后手玩家轮流落子
- PvE:人机对战,可自行设置玩家是先手还是后手以及电脑AI难度
- EvE:电脑对战,可分别设置先手电脑和后手电脑的难度
电脑AI代码实现
- 所有的脚本代码均可在Scripts分支中找到,这里展示部分脚本
- 找到最佳落子位置
- 找到随机落子位置
- Minimax方法该处落子的评分
- 评估棋盘得分
- Author:Yuki
- URL:http://shirakoko.xyz/article/cross-chess-single
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts