unity:PD 过河游戏智能帮助实现
P&D 过河游戏智能帮助实现
github传送门
状态图
状态图课件有
状态图(Statechart Diagram)是描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的事件做出反应。
可以通过枚举类型表示不同的状态
private enum Boataction {empty, P, D, PP, DD, PD }
//P:船运载一个牧师
//D:船运载一个恶魔
//PP:船运载两个牧师
//DD:船运载两个恶魔
//PD:船运载一个牧师,一个恶魔
再加上左右岸的牧师、魔鬼人数以及船上人数等信息,根据状态图确定下一个动作是什么。
图数据的代码表示
- 成员变量
public static AutoMove autoMove = new AutoMove();
public FirstController firstScene;
private int fromDevilNum;
private int fromPriestNum;
private int BoatCoast; // -1 -> left, 1 -> right.
//P:船运载一个牧师
//D:船运载一个恶魔
//PP:船运载两个牧师
//DD:船运载两个恶魔
//PD:船运载一个牧师,一个恶魔
private enum Boataction {empty, P, D, PP, DD, PD }
private bool isFinished = true; //动作是否执行完成
private Boataction nextState;
//count执行步骤(0-4)
//0:初始 1:上了一个人 2:上了2个人 3:移动船 4:下船
private int count = 0;
//num表示船上的人数
private int num = 0;
- 获取下一状态
没有什么算法可言。。根据状态图做。可以用节点跟链表做状态图,或者用邻接矩阵表示状态。为了方便直接用枚举类型。
//根据状态图设置nextStateprivate Boataction getNext(){Boataction next = Boataction.empty;if (BoatCoast == 1){if (fromDevilNum == 3 && fromPriestNum == 3)//3P3DB{next = Boataction.PD;}else if (fromDevilNum == 2 && fromPriestNum == 3)//3P2DB{next = Boataction.DD;}else if (fromDevilNum == 1 && fromPriestNum == 3)//3P1DB{next = Boataction.PP;}else if (fromDevilNum == 2 && fromPriestNum == 2)//2P2DB{next = Boataction.PP;}else if (fromDevilNum == 3 && fromPriestNum == 0)//3DB{next = Boataction.DD;}else if (fromDevilNum == 1 && fromPriestNum == 1)//1P1DB{next = Boataction.PD;}else if (fromDevilNum == 2 && fromPriestNum == 0)//2DB{next = Boataction.D;}else if (fromDevilNum == 1 && fromPriestNum == 2)//2P1DB{next = Boataction.P;}else if (fromDevilNum == 2 && fromPriestNum == 1)//1P2DB{next = Boataction.P;}else if (fromDevilNum == 1 && fromPriestNum == 0)//1DB{next = Boataction.D;}else if(fromDevilNum == 3 && fromPriestNum == 2)//2P3DB{next = Boataction.D;}else next = Boataction.empty;}else{if (fromDevilNum == 2 && fromPriestNum == 2)//2P2D{next = Boataction.empty;}else if (fromDevilNum == 1 && fromPriestNum == 3)//3P1D{next = Boataction.empty;}else if (fromDevilNum == 2 && fromPriestNum == 3)//3P2D{next = Boataction.D;}else if (fromDevilNum == 0 && fromPriestNum == 3)//3P{next = Boataction.empty;}else if (fromDevilNum == 1 && fromPriestNum == 1)//1P1D{next = Boataction.D;}else if (fromDevilNum == 2 && fromPriestNum == 0)//2D{next = Boataction.D;}else if (fromDevilNum == 1 && fromPriestNum == 0)//1D{next = Boataction.empty;}else next = Boataction.empty;}return next;}
- 自动操作
public void move()
{if (isFinished){isFinished = false; int[] fromCount = firstScene.fromCoast.GetobjectsNumber();fromPriestNum = fromCount[0];fromDevilNum = fromCount[1];BoatCoast = firstScene.boat.get_State();if (count == 0){nextState = getNext();if ((int)nextState >= 3){num = 2;}else if ((int)nextState > 0) num = 1;else num = 0;count++;}Debug.Log("next state is " + nextState);//根据状态自动操作DoAction();Debug.Log("count:" + count);Debug.Log("num:" + num);}
}
unity:PD 过河游戏智能帮助实现相关推荐
- Unity学习之PD 过河游戏智能帮助实现
Unity学习之P&D 过河游戏智能帮助实现 根据之前设计好的动作分离版过河游戏,我们进行一个简单的状态图AI实现. 转移状态图 状态图老师已经给出: 该状态图只记录了游戏过程中左岸的情况.P ...
- 【Unity 3D学习笔记】PD 过河游戏智能实现
P&D 过河游戏智能帮助实现 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 对于过河游戏,首先需要知道其中各个状态之间的转换关系,绘制状态转移图如下: 其中,P ...
- 3D游戏编程实践——PD 过河游戏智能帮助实现
P&D 过河游戏智能帮助实现 需求 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 实现过程 实现状态图的自动生成&讲解图数据在程序中的表示方法 牧师与魔 ...
- Unity3d入门之路-PD 过河游戏智能帮助
文章目录 P&D 过河游戏智能帮助 状态图 实现方法 图的表示方法 广度优先搜索 P&D 过河游戏拓展 结果展示 P&D 过河游戏智能帮助 本次作业基本要求是三选一,我选择了P ...
- PD 过河游戏智能帮助实现
github传送门 https://github.com/ddghost/unity3d_n/tree/R%26D%E6%99%BA%E8%83%BD%E5%B8%AE%E5%8A%A9%E6%8F% ...
- 3D游戏编程与设计 PD(牧师与恶魔)过河游戏智能帮助实现
3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 文章目录 3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 一.作业与练习 二.设计简述 1. 状态图基础 ...
- 【Unity3d学习】魔鬼与牧师过河游戏智能帮助
文章目录 写在前面 实验内容 状态图自动生成(使用DFS) 1. 状态表示 2.DFS算法实现 3.DFS生成结果 更改Controller 效果展示 写在前面 本次项目Github地址:传送门 本次 ...
- 牧师与恶魔过河游戏——智能提示
前言 这次实现一个含提示功能的牧师与恶魔过河小游戏,主要在上一个版本的牧师与恶魔小游戏上进行更改,通过增加一个状态计算和改版了得寻路算法,实现向玩家提示如何胜利完成游戏.游戏主体实现思路见上一篇博客- ...
- unity3D学习9 游戏智能
游戏智能 作业要求 P&D 过河游戏智能帮助实现,程序具体要求: 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 参考:P&D 过河游戏智能帮助实现 实现 ...
最新文章
- 在web.config中配置httpHandlers节点是的说明
- Java项目打包成exe的详细教程
- node.js中对 redis 的安装和基本操作
- 微信公众号迁移具体内容
- linux 设备模型详解,Linux2.6 设备模型之input子系统详解
- 基于TI8168平台的16路D1分辨率的DVR方案
- 顺序表(C语言实现)
- MATLAB 读取图片像素处理
- 求一元二次方程的实根或虚根
- python中cnt是什么意思_CNT是什么意思
- 3D打印Arduino 四轴飞行器
- 计算机网络层包括哪些设备,网络层的设备有哪些
- 计算机小学生感兴趣的知识,计算机是 什 么-给小学生讲计算机知识.ppt
- 【ketlle】本地开发kitlle job提交至linux生产环境上执行流程
- 对接有赞平台获取订单信息接口Apijava后台报错问题
- 计算机磁盘格式化,电脑磁盘格式化问题如何解决?其实很简单
- SSD系列算法扩展与优化
- 高端课后晚托品牌“文启优思”获数千万A+轮融资,源道投资、高思教育、柏宏锐尔合投...
- linux---用户管理
- 文字转语音保存音频和在线朗读