基于Unity开发的牧师与魔鬼动作分离版游戏设计
1 作业要求
牧师与魔鬼 动作分离版
设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束
2 实现细节
在原来代码的基础上,修改如下:
- 将UserGUI的sign成员变量和Controller的Check方法提取到了Judge中,并在Controller中添加了获得游戏状态的方法和判断游戏状态的方法
- 把UserGUI的IsShowRules成员变量放到了Judge中,并在Controller中添加了设置和获取方法、
- 把BoatModel的IsEmpty提取到了Judge中
- 把RoleModel的IsOnBoat放到了Judge中
经过修改后:
用户界面UserGUI就可以通过调用Controller提供用户接口action去询问来自裁判类的判断。
Controller新增加的接口如下:
private Judge judge;public void setGameState(int state) {judge.setGameState(state);}public int getGameState() {return judge.getGameState();}public bool isPlaying() {return judge.getGameState() == 0;}public bool isLose() {return judge.getGameState() == 1;}public bool isWin() {return judge.getGameState() == 2;}public bool isPause() {return judge.getGameState() == 3;}
Judge实现如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;namespace Mygame {public class Judge {private int gamestate = 0; //=0表示游戏在进行,=1表示游戏失败,=2表示游戏胜利,=3表示游戏停止private bool isShowRules = false;public void setGameState(int state) {gamestate = state;}public int getGameState() {return gamestate;}public bool isPlaying() {return gamestate == 0;}public void setIsShowRules(bool flags) {isShowRules = flags;}public bool getIsShowRules() {return isShowRules;}/*判断船是否是空的,空船不能移动*/public bool IsEmptyBoat(BoatModel boat) {RoleModel[] roles = boat.getRoles();for (int i = 0; i < roles.Length; ++i){if (roles[i] != null)return false;}return true;}public bool IsOnBoat(RoleModel role) {return role.getIsOnBoat();}/*检查游戏是否结束*/public int Check(LandModel start_land, LandModel destination, BoatModel boat){int start_priest = (start_land.GetRoleNum())[0];int start_devil = (start_land.GetRoleNum())[1];int end_priest = (destination.GetRoleNum())[0];int end_devil = (destination.GetRoleNum())[1];//终点有全部对象,游戏胜利if (end_priest + end_devil == 6){gamestate = 2;return 2;} //统计岸的一边(包括船和陆地上)魔鬼和牧师各自的数量int[] boat_role_num = boat.GetRoleNumber();if (boat.GetBoatSign() == 1) {start_priest += boat_role_num[0];start_devil += boat_role_num[1];}else{end_priest += boat_role_num[0];end_devil += boat_role_num[1];}//起点存在牧师且魔鬼数量大于牧师,牧师被吃,游戏失败if (start_priest > 0 && start_priest < start_devil){ gamestate = 1;return 1;}//终点存在牧师且魔鬼数量大于牧师,牧师被吃,游戏失败if (end_priest > 0 && end_priest < end_devil){gamestate = 1;return 1;}gamestate = 0;return 0;}}
}
UserGUI通过调用action.getIsShowRules(),action.isPause(),action.isLose(),action.isWin()来判断是否展现规则,是否暂停,输或者赢。
3 游戏结果截图:
开始页面:
游戏页面:
查看规则:
游戏暂停:
游戏成功:
游戏失败:
基于Unity开发的牧师与魔鬼动作分离版游戏设计相关推荐
- unity编程实践-牧师与魔鬼动作分离版
作业要求 牧师与魔鬼 动作分离版 [2019开始的新要求]:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 目标:建立动作管理器,使动作抽象出来,可以应用到任何游戏对象上,以此提高代码复 ...
- 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版
[3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...
- Unity实现牧师与魔鬼动作分离版
牧师与魔鬼动作分离版 项目地址 动作管理器的设计 程序设计框架: 为了用一组简单的动作组合成复杂的动作,我们采用 cocos2d 的方案,建立与 CCAtion 类似的类. 通过门面模式(控制器模式) ...
- 牧师与魔鬼——动作分离版
牧师与魔鬼--动作分离版 在上周的作业中,牧师与魔鬼游戏中的各个事件,都是写在Director中,并且都是继承Monobehavior的.在这周动作分离的设计中,我将上船.下船以及船的移动都分离出来. ...
- 牧师与魔鬼 动作分离版
1.基本操作演练 下载 Fantasy Skybox FREE 在unityAssetStore中下载Fantasy Skybox FREE 构建游戏场景: GameObject->3D Obj ...
- 牧师与魔鬼-动作分离版
源码传送门 视频展示传送门,展示效果与第三次作业相同 运行说明:将Controllor.cs挂载Main Camera上,然后点击运行即可 1. 动作分离 目的:将物体的动作与空间属性分开来,从而降低 ...
- 牧师与魔鬼动作分离版
本次游戏实现参照课件的框架,将动作管理与游戏场景分离. 完全按照课件的思路实现 动作基类SSAction 简单动作MoveToAction 组合动作SequenceAction 动作管理基类SSAct ...
- 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述
文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...
- Unity3D游戏编程-牧师与恶魔 动作分离版
Unity3D游戏编程-牧师与恶魔 动作分离版 文章目录 Unity3D游戏编程-牧师与恶魔 动作分离版 作业要求 项目配置 项目演示 视频演示 项目下载 文字说明 项目截图 实现过程和方法(算法) ...
最新文章
- KB244036_PXE 客户端、DHCP 和 RIS 服务器之间的 PXE 交互过程说明
- c++ 定时器_【话说定时器系列】之十:PWM输入模式测量脉宽及占空比实验
- 行千里,看山城轻轨穿楼越林;致广大,望重庆交通桥上桥下
- WebLogic调用WebService提示Failed to localize、Failed to create WsdlDefinitionFeature
- 2017.5.9 寻找道路 思考记录
- 高速信号传输约翰逊 pdf_智芯文库 | 高速数字电路的设计与仿真
- Python之倒序访问list
- 【COCOS2DX-LUA 脚本开发之十二】利用AssetsManager实现在线更新资源文件
- 【亲测可用】彻底解决Google谷歌地球启动无法连接到登录服务器、无法启动问题
- Ubuntu操作系统的学习,从新手到老手的过渡
- 一刀工具箱 - 图片转链接(图床)工具
- iOS根据ts文件路径封装成m3u8文件及m3u8播放
- pandas 常见写法
- c语言程序员表白的语录,程序员一句话表白情书
- [家里蹲大学数学杂志]第218期正项级数的审敛法与人生态度
- 时间管理经典书籍-《番茄工作法图解》
- Hive体系结构介绍
- Win10卸载OneDrive
- 开启 Zookeeper 四字命令(is not executed because it is not in the whitelist)
- 历届上海电影节获奖名单
热门文章
- 应用案例 | 星舆高精度定位器在港口车辆定位管理的应用案例
- 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题
- pytest-xdist进程级并发过程及参数化说明--成都-阿木木
- 海康sd报错Structure.getFieldOrder() on class com.xxx.sdk.HCNetSDK$NET_DVR_DEVICEINFO_V30 does not provid
- java invoke 返回类型_解析Java反射 - invoke方法
- C++中accumulate函数的使用
- 计算机截取最高分和最低分的函数,Excel中竟真的有一函数,可以去掉最高分、最低分,计算最终得分...
- 免费中文分词系统与资源收集
- 什么是引用?声明和使用引用时要注意哪些问题?
- libev libevent简介