【Unity3D】魔鬼与牧师游戏记录——MVC架构
Priests and Devils是一款益智类的小游戏,需要在规定的时间内帮助牧师和魔鬼都安全过河。河边有三个魔鬼和三个牧师,他们都想过河,但河上只有一条船,这艘船每次只能搭载两个,而且必须有一个人驾驶船行驶。如果河一边的魔鬼数量多于牧师,牧师将被魔鬼击杀,游戏结束。游戏链接:http://www.flash-game.net/game/2535/priests-and-devils.html
游戏成品图

设置60s倒计时——60s后如果未能安全运送所有魔鬼与牧师,游戏失败。

尝试改进界面,对一些东西还不太熟悉。

1列出游戏中提及的事物(Objects)
Object:三个魔鬼(用白cube表示)、三个牧师(用黑sphere表示)、一艘船、两个岸
2游戏架构:

ISceneController.cs和IUserAction.cs是接口类, ISceneController.cs定义场景控制方法,而FirstController.cs是控制一个场景的具体场景实现,实现的函数定义在ISceneController.cs之中,而场景管理器不知道具体实现方法,具体实现由导演(SSDirector)决定。只有场景设置可见,保证了内部核心代码的安全性。IUserAction.cs定义用户交互方法,UserGUI.cs实现对应方法。MVC,达到模式,视图,控制分离。
例如:
1.接收到用户点击事件(UserGUI.cs)

2.调用用户接口函数(函数在IUserAction.cs中)

3.转到函数实现——转到场景控制器FirstController.cs

4.请求具体方法实现——转到导演SSDirector.cs——控制

2.3在 GenGameObjects 中创建 长方形、正方形、球 及其色彩代表游戏中的对象。
游戏中用白正方形表示魔鬼,黑球代表牧师,长方体代表船以及两岸。
2.4用表格列出玩家动作表(规则表),注意,动作越少越好
与规则表对应的动作函数表:

行为大致可以分为三种,上船、开船和下船。开船有限制条件,必须要有一个牧师或一个魔鬼船方可开动。
1.上船
分为两种对象——牧师和魔鬼。上船这个动作可以把牧师或者魔鬼作为船的子对象,在船中还有空位的时候就可以加进设置子对象的代码。为区分是魔鬼或者牧师,在预设的时候添加对应的Tag。牧师为Priest,魔鬼为Devil
void AboardTheBoat(GameObject obj) {
if (_instance.BCapacity() != ) {
obj.transform.parent = _instance.boat_obj.transform;
if (_instance.boat[] == null) {
_instance.boat[] = obj;
obj.transform.localPosition = new Vector3(, 1.2f, -0.3f);
} else {
_instance.boat[] = obj;
obj.transform.localPosition = new Vector3(, 1.2f, 0.3f);
}
}
}
2.开船
船上必须有一个牧师或者一个魔鬼,将船从一岸到另一个岸边。

3.下船
不分对象,但分从船左船右下船,解除子对象绑定,再移动对应对象的位置。
public void getOffTheBoat(int side) {
if (_instance.boat[side] != null) {
_instance.boat[side].transform.parent = null;
if (_instance.state == State.BEND) {
if (_instance.boat[side].tag == "Priest") {
_instance.priestsEnd.Push(boat[side]);
}
else if (_instance.boat[side].tag == "Devil") {
_instance.devilsEnd.Push(boat[side]);
}
}
else if (_instance.state == State.BSTART) {
if (_instance.boat[side].tag == "Priest") {
_instance.priestsStart.Push(boat[side]);
}
else if (_instance.boat[side].tag == "Devil") {
_instance.devilsStart.Push(boat[side]);
}
}
_instance.boat[side] = null;
}
}
关于代码,将FirstContorller.cs挂载到空对象,将UserGUI.cs挂载到主摄像机即可运行
2.5修改代码,使用 C# 集合类型 有效组织对象,通过 xxSceneController 对象 GenGameObjects 互动完成游戏逻辑。(这一点要求不同,现在改用课件框架。)如需要游戏对象代码,可以动态绑定。
2.6注意事项:
1.整个游戏仅主摄像机和一个 Empty对象,其他对象必须代码动态生成!!!。
使用预制动态生成对象。(未包含界面改进后的对象)

2.整个游戏不许出现 Find 游戏对象, SendMessage 这类突破程序结构的 通讯耦合 语句。 违背本条准则,不给分
3.注意细节,例如:船未靠岸,牧师与魔鬼上下船运动中,均不能接受用户事件!
大致代码逻辑参考师兄博客。
【Unity3D】魔鬼与牧师游戏记录——MVC架构的更多相关文章
- 【深入Cocos2d-x】使用MVC架构搭建游戏Four
喜欢Four这个项目,就赶快在GitHub上Star这个项目吧! 喜欢我的文章,来微博关注我吧:王选易在学C艹 点我下载 项目起源 项目Logo: 下面是该游戏的项目地址,各位想参考源代码的同学可以到 ...
- MVC架构在游戏开发中的应用
一 定义 MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVC是一种"前端"的设计模式. MV ...
- 【JAVA】基于MVC架构Java技术荟萃案例演练
基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servle ...
- IntelliMVCCode智能MVC架构的代码助手使用方法
智能代码生成工具,快速帮助开发者提升开发速度,通过工具自动生成MVC架构的大量源代码,节省更多的开发时间. 工具使用的框架:.net4.0,通过工具连接到数据库自动提取数据表或视图中的结构,生成对应的 ...
- 【PHP小项目使用MVC架构】
小项目名称是雇员管理系统. mvc是一种项目的开发模式,中文名称为模式视图控制器,是强制程序员将数据的输入.处理.输出分开的一种开发模式. 在这个小项目中,控制器使用service作为后缀名. 项目u ...
- Extjs 4.2.0 MVC 架构
内容: 1. 文件结构 2. 创建项目 3. 定义控制器 4. 定义视图 5. 控制Grid 6. 创建Model和Store 7. 通过Model保存数据 8. 保存到服务器端 大型客户端程序通常都 ...
- Unity3d中的PlayerPrefs游戏存档API的扩展
功能 在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 静态函数 DeleteAll Removes all keys and values from the preferen ...
- cocos creator主程入门教程(七)—— MVC架构
五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...
- MVC架构模式详细说明
一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...
随机推荐
- caffe 逐步调试
caffe 逐步调试 https://www.zhihu.com/question/27982282
- css3文字与字体的相关样式
给文字添加阴影——text-shadow属性 text-shadow属性是css2中定义的,在css2.1中删除了,在css3中恢复text-shadow:length length length c ...
- 转:在Linux上安装ant环境
1.从http://ant.apache.org 上下载tar.gz版ant 2.复制到/usr下 3.tar -vxzf apahce-ant-1.9.2-bin.tar.gz 解压 4.chow ...
- Android开发中,那些让你觉得相见恨晚的方法、类或接口
Throwable类中的getStackTrace()方法,根据这个方法可以得到函数的逐层调用地址,其返回值为StackTraceElement[],而在StackTraceElement类中有四个方 ...
- C#阵列Array排序
五一假期回来,练习一下C#的一些知识,了解一下排序. 练习数据: , , , , , , , , }; 写一个类: using System; using System.Collections.Gen ...
- js读取excel中日期格式转换问题
在使用js-xlsx插件来读取excel时,会将2018/10/16这种数据自动装换成48264.12584511. 所以需要自己手动再转换回来 // excel读取2018/01/01这种时间格式是 ...
- SAS批量导出sas7bdata至excel
/*创建输出excel的宏*/ %macro export(inlib,intbl,outpath,outfile); proc export data=&inlib..&intbl ...
- 2017-9-2 NOIP模拟赛
“与” (and.pas/.c/.cpp) 时间限制:1s:空间限制64MB 题目描述: 给你一个长度为n的序列A,请你求出一对Ai,Aj(1<=i<j<=n)使Ai“与”Aj最大. ...
- [Xcode 实际操作]六、媒体与动画-(3)使用CoreImage框架设置图片的单色效果
目录:[Swift]Xcode实际操作 本文将演示如何使用图片框架,将图片转换成单色样式. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit ...
- 剑指Offer的学习笔记(C#篇)-- 反转链表
题目描述 输入一个链表,反转链表后,输出新链表的表头. 一 . 概念普及 关于线性表等相关概念请点击这里. 二 . 实现方法 目前,可以有两种方法实现该要求. 方法一:借助外部空间实现.这里可以将单链 ...