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 过河游戏智能帮助实现相关推荐

  1. Unity学习之PD 过河游戏智能帮助实现

    Unity学习之P&D 过河游戏智能帮助实现 根据之前设计好的动作分离版过河游戏,我们进行一个简单的状态图AI实现. 转移状态图 状态图老师已经给出: 该状态图只记录了游戏过程中左岸的情况.P ...

  2. 【Unity 3D学习笔记】PD 过河游戏智能实现

    P&D 过河游戏智能帮助实现 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 对于过河游戏,首先需要知道其中各个状态之间的转换关系,绘制状态转移图如下: 其中,P ...

  3. 3D游戏编程实践——PD 过河游戏智能帮助实现

    P&D 过河游戏智能帮助实现 需求 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 实现过程 实现状态图的自动生成&讲解图数据在程序中的表示方法 牧师与魔 ...

  4. Unity3d入门之路-PD 过河游戏智能帮助

    文章目录 P&D 过河游戏智能帮助 状态图 实现方法 图的表示方法 广度优先搜索 P&D 过河游戏拓展 结果展示 P&D 过河游戏智能帮助 本次作业基本要求是三选一,我选择了P ...

  5. 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% ...

  6. 3D游戏编程与设计 PD(牧师与恶魔)过河游戏智能帮助实现

    3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 文章目录 3D游戏编程与设计 P&D(牧师与恶魔) 过河游戏智能帮助实现 一.作业与练习 二.设计简述 1. 状态图基础 ...

  7. 【Unity3d学习】魔鬼与牧师过河游戏智能帮助

    文章目录 写在前面 实验内容 状态图自动生成(使用DFS) 1. 状态表示 2.DFS算法实现 3.DFS生成结果 更改Controller 效果展示 写在前面 本次项目Github地址:传送门 本次 ...

  8. 牧师与恶魔过河游戏——智能提示

    前言 这次实现一个含提示功能的牧师与恶魔过河小游戏,主要在上一个版本的牧师与恶魔小游戏上进行更改,通过增加一个状态计算和改版了得寻路算法,实现向玩家提示如何胜利完成游戏.游戏主体实现思路见上一篇博客- ...

  9. unity3D学习9 游戏智能

    游戏智能 作业要求 P&D 过河游戏智能帮助实现,程序具体要求: 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 参考:P&D 过河游戏智能帮助实现 实现 ...

最新文章

  1. 在web.config中配置httpHandlers节点是的说明
  2. Java项目打包成exe的详细教程
  3. node.js中对 redis 的安装和基本操作
  4. 微信公众号迁移具体内容
  5. linux 设备模型详解,Linux2.6 设备模型之input子系统详解
  6. 基于TI8168平台的16路D1分辨率的DVR方案
  7. 顺序表(C语言实现)
  8. MATLAB 读取图片像素处理
  9. 求一元二次方程的实根或虚根
  10. python中cnt是什么意思_CNT是什么意思
  11. 3D打印Arduino 四轴飞行器
  12. 计算机网络层包括哪些设备,网络层的设备有哪些
  13. 计算机小学生感兴趣的知识,计算机是 什 么-给小学生讲计算机知识.ppt
  14. 【ketlle】本地开发kitlle job提交至linux生产环境上执行流程
  15. 对接有赞平台获取订单信息接口Apijava后台报错问题
  16. 计算机磁盘格式化,电脑磁盘格式化问题如何解决?其实很简单
  17. SSD系列算法扩展与优化
  18. 高端课后晚托品牌“文启优思”获数千万A+轮融资,源道投资、高思教育、柏宏锐尔合投...
  19. linux---用户管理
  20. 文字转语音保存音频和在线朗读

热门文章

  1. GitLab: 官方镜像中的PostgreSQL
  2. 湖北师范大学计信2018届操作系统实训(参考答案)
  3. _torn_ado框架
  4. # 关于给小程序字体加粗
  5. SPSS分析MySQL数据库数据出现中文乱码问题
  6. matlab sift代码解读,MATLAB SIFT 代码
  7. 关于SPRT(Sequential probability ratio test)
  8. 左飞的十八般武艺上课有感(1)
  9. 协众信息技术设计 平面设计构成的八大形式
  10. 考前临时抱佛脚(DFS)