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开发的牧师与魔鬼动作分离版游戏设计相关推荐

  1. unity编程实践-牧师与魔鬼动作分离版

    作业要求 牧师与魔鬼 动作分离版 [2019开始的新要求]:设计一个裁判类,当游戏达到结束条件时,通知场景控制器游戏结束 目标:建立动作管理器,使动作抽象出来,可以应用到任何游戏对象上,以此提高代码复 ...

  2. 【3D游戏编程与设计】四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版

    [3D游戏编程与设计]四 游戏对象与图形基础 : 构建游戏场景+牧师与魔鬼 动作分离版 基本操作演练 下载 Fantasy Skybox FREE, 构建自己的游戏场景 下载 Fantasy Skyb ...

  3. Unity实现牧师与魔鬼动作分离版

    牧师与魔鬼动作分离版 项目地址 动作管理器的设计 程序设计框架: 为了用一组简单的动作组合成复杂的动作,我们采用 cocos2d 的方案,建立与 CCAtion 类似的类. 通过门面模式(控制器模式) ...

  4. 牧师与魔鬼——动作分离版

    牧师与魔鬼--动作分离版 在上周的作业中,牧师与魔鬼游戏中的各个事件,都是写在Director中,并且都是继承Monobehavior的.在这周动作分离的设计中,我将上船.下船以及船的移动都分离出来. ...

  5. 牧师与魔鬼 动作分离版

    1.基本操作演练 下载 Fantasy Skybox FREE 在unityAssetStore中下载Fantasy Skybox FREE 构建游戏场景: GameObject->3D Obj ...

  6. 牧师与魔鬼-动作分离版

    源码传送门 视频展示传送门,展示效果与第三次作业相同 运行说明:将Controllor.cs挂载Main Camera上,然后点击运行即可 1. 动作分离 目的:将物体的动作与空间属性分开来,从而降低 ...

  7. 牧师与魔鬼动作分离版

    本次游戏实现参照课件的框架,将动作管理与游戏场景分离. 完全按照课件的思路实现 动作基类SSAction 简单动作MoveToAction 组合动作SequenceAction 动作管理基类SSAct ...

  8. 《基于Unity的2D多人乱斗闯关游戏设计与开发》--小组博客综述

    文章目录 项目名称 项目背景 项目简介 项目架构 项目特色 大致功能需求 游戏模式/内容 项目技术选型 项目分工 项目具体计划 此次项目实训不完全按照项目计划书进行,因为游戏范围太广,可能随时调整游戏 ...

  9. Unity3D游戏编程-牧师与恶魔 动作分离版

    Unity3D游戏编程-牧师与恶魔 动作分离版 文章目录 Unity3D游戏编程-牧师与恶魔 动作分离版 作业要求 项目配置 项目演示 视频演示 项目下载 文字说明 项目截图 实现过程和方法(算法) ...

最新文章

  1. KB244036_PXE 客户端、DHCP 和 RIS 服务器之间的 PXE 交互过程说明
  2. c++ 定时器_【话说定时器系列】之十:PWM输入模式测量脉宽及占空比实验
  3. 行千里,看山城轻轨穿楼越林;致广大,望重庆交通桥上桥下
  4. WebLogic调用WebService提示Failed to localize、Failed to create WsdlDefinitionFeature
  5. 2017.5.9 寻找道路 思考记录
  6. 高速信号传输约翰逊 pdf_智芯文库 | 高速数字电路的设计与仿真
  7. Python之倒序访问list
  8. 【COCOS2DX-LUA 脚本开发之十二】利用AssetsManager实现在线更新资源文件
  9. 【亲测可用】彻底解决Google谷歌地球启动无法连接到登录服务器、无法启动问题
  10. Ubuntu操作系统的学习,从新手到老手的过渡
  11. 一刀工具箱 - 图片转链接(图床)工具
  12. iOS根据ts文件路径封装成m3u8文件及m3u8播放
  13. pandas 常见写法
  14. c语言程序员表白的语录,程序员一句话表白情书
  15. [家里蹲大学数学杂志]第218期正项级数的审敛法与人生态度
  16. 时间管理经典书籍-《番茄工作法图解》
  17. Hive体系结构介绍
  18. Win10卸载OneDrive
  19. 开启 Zookeeper 四字命令(is not executed because it is not in the whitelist)
  20. 历届上海电影节获奖名单

热门文章

  1. 应用案例 | 星舆高精度定位器在港口车辆定位管理的应用案例
  2. 第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 E 题
  3. pytest-xdist进程级并发过程及参数化说明--成都-阿木木
  4. 海康sd报错Structure.getFieldOrder() on class com.xxx.sdk.HCNetSDK$NET_DVR_DEVICEINFO_V30 does not provid
  5. java invoke 返回类型_解析Java反射 - invoke方法
  6. C++中accumulate函数的使用
  7. 计算机截取最高分和最低分的函数,Excel中竟真的有一函数,可以去掉最高分、最低分,计算最终得分...
  8. 免费中文分词系统与资源收集
  9. 什么是引用?声明和使用引用时要注意哪些问题?
  10. libev libevent简介