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架构的更多相关文章

  1. 【深入Cocos2d-x】使用MVC架构搭建游戏Four

    喜欢Four这个项目,就赶快在GitHub上Star这个项目吧! 喜欢我的文章,来微博关注我吧:王选易在学C艹 点我下载 项目起源 项目Logo: 下面是该游戏的项目地址,各位想参考源代码的同学可以到 ...

  2. MVC架构在游戏开发中的应用

    一 定义 MVC即Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写. MVC是一种"前端"的设计模式. MV ...

  3. 【JAVA】基于MVC架构Java技术荟萃案例演练

    基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servle ...

  4. IntelliMVCCode智能MVC架构的代码助手使用方法

    智能代码生成工具,快速帮助开发者提升开发速度,通过工具自动生成MVC架构的大量源代码,节省更多的开发时间. 工具使用的框架:.net4.0,通过工具连接到数据库自动提取数据表或视图中的结构,生成对应的 ...

  5. 【PHP小项目使用MVC架构】

    小项目名称是雇员管理系统. mvc是一种项目的开发模式,中文名称为模式视图控制器,是强制程序员将数据的输入.处理.输出分开的一种开发模式. 在这个小项目中,控制器使用service作为后缀名. 项目u ...

  6. Extjs 4.2.0 MVC 架构

    内容: 1. 文件结构 2. 创建项目 3. 定义控制器 4. 定义视图 5. 控制Grid 6. 创建Model和Store 7. 通过Model保存数据 8. 保存到服务器端 大型客户端程序通常都 ...

  7. Unity3d中的PlayerPrefs游戏存档API的扩展

    功能 在游戏会话中储存和访问游戏存档.这个是持久化数据储存,比如保存游戏记录. 静态函数 DeleteAll Removes all keys and values from the preferen ...

  8. cocos creator主程入门教程(七)—— MVC架构

    五邑隐侠,本名关健昌,10年游戏生涯,现隐居五邑.本系列文章以TypeScript为介绍语言. 这一篇将介绍在游戏客户端常用的架构MVC架构.一个游戏的MVC如下划分: M:1)单例全局的数据中心Wo ...

  9. MVC架构模式详细说明

    一.简介: 架构模式是一个通用的.可重用的解决方案,用于在给定上下文中的软件体系结构中经常出现的问题.架构模式与软件设计模式类似,但具有更广泛的范围. 模型-视图-控制器模式,也称为MVC模式(Mod ...

随机推荐

  1. python 带参数运行

    近段时间学考,又爱上了游戏.LOL  nba2k 使命召唤 哎! 因为使命召唤的原因  有时候会卡住  然后点关闭没用. 然后任务管理器打不开 所以我想写个杀掉这个程序的东西.  当然写一下是简单.但 ...

  2. C#自定义控件 类似于Linechart

    界面效果: 对外提供的属性设置 /// <summary> /// 背景色 /// </summary> public Color BackColor; /// <sum ...

  3. 利用CSS3给图片添加旋转背景特效

    首先看旋转特效:http://***/demo/201512/2015-12-09-css3-image-hover-animate/index.html 这是一款纯CSS3实现的当鼠标滑过图片时文字 ...

  4. jquery、javascript实现(get、post两种方式)跨域解决方法

    一.实现get方式跨域请求数据 浏览器端 <script> $(document).ready(function(){ $.ajax({ url: "http://www.xxx ...

  5. POJ 2311 Cutting Game (博弈)

    题意:给定一个长方形纸张,每次只能水平或者垂直切,如果切到1*1的方格就胜,问先手胜还是负. 析:根据Nim游戏可知,我们可以分别求出每个子游戏的和,就是答案,所以我们就枚举每一种切法,然后求出SG函 ...

  6. linux查找工具(find,locate,whrers)

    find whereis locate 一.whereis whereis命令只能用于程序名的搜索,而且只搜索二进制文件(参数-b).man说明文件(参数-m)和源代码文件(参数-s).如果省略参数, ...

  7. VUE中实现iview的图标效果时遇到的一个问题

    [Vue warn]: You are using the runtime-only build of Vue where the template compiler is not available ...

  8. c#字符串字面量

    分为两种: 1 常规字符串字面量 2逐字字面量字符串:以@字符为前缀.注意:注意逐字字面量唯一例外的是相邻的双引号组,它们被解释为单个双引号字符.

  9. [Android]HttpClient和HttpURLConnection的区别

    转载:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在A ...

  10. [LOJ 2190] 「SHOI2014」信号增幅仪

    [LOJ 2190] 「SHOI2014」信号增幅仪 链接 链接 题解 坐标系直到 \(x\) 轴与椭圆长轴平行 点的坐标变换用旋转公式就可以了 因为是椭圆,所以所有点横坐标除以 \(p\) 然后最小 ...