【Unity 3D学习笔记】P&D 过河游戏智能实现

2023-10-30

P&D 过河游戏智能帮助实现


  • 实现状态图的自动生成

  • 讲解图数据在程序中的表示方法

  • 利用算法实现下一步的计算

对于过河游戏,首先需要知道其中各个状态之间的转换关系,绘制状态转移图如下:

其中,P代表出发岸上的牧师,D代表出发岸上的恶魔,加号和减号分别标识船停在出发一侧的岸上还是终点一侧的岸边。则黄色框代表起始的状态,此时出发岸上有三个牧师和三个恶魔,船停在出发一侧的岸上;红色框代表游戏终止时的状态,此时为胜利状态,出发岸上没有牧师和恶魔,船停在终点一侧的岸边。双箭头表示两个状态间可以相互转移。

 

“sense-think-act” paradigm(范式) 是构造 agent、robot、NPC(Non-Player Character) 的基础概念。自从上世纪80年代提出以来,我们使用 Sense-Think-Act 范例思考机器人如何工作,并设计它们。 即使机器人最终设计的方式不同,STA 通常仍然是一个有用的开始。 随着机器人技术的发展,协同技术越来越重要,机器人之间的 “Communicate”通常也纳入设计之中。本节主要关注 NPC 如何产生看似理性(Rational)的行为(模拟人)的设计方法。

根据以上的状态转移图,首先完成“感知”部分的设计:

感知是 agent 接收世界信息的行为,其获取的数据将是思考的输入。在游戏中,程序是可以获得游戏世界任意信息的,设计一个“干死”玩家的算法通常是比较容易的,因此如何限制信息获取是设计不同级别 agent 的核心问题。

在游戏中,定义获取信息能力通常可以从视觉、听觉和嗅觉等渠道去考虑:

  • 视觉(Vision)
    • 识别“敌人”的位置和属性
    • 识别“障碍物”及其范围
  • 听觉(Sound)
    • 识别事件的方向和距离
  • 嗅觉(Smell)
    • 获得玩家/事件的痕迹

在这里,我使用最简单的方法让游戏智能体感知到应该作出下一步决策,就是增加一个按钮,每当玩家点击这个按钮,游戏智能体就会改变当前的状态并作出对应的改变。

相关的代码如下:

	void OnGUI() {
	    if (result == 0 && GUI.Button(new Rect(Screen.width/2-70, Screen.height/2 - 70, 120, 60), "Next", bStyle))
		action.nextMove();
            if (result != 0 && GUI.Button(new Rect(Screen.width/2-70, Screen.height/2 - 130, 120, 60), "Replay", bStyle)) {
		result = 0;
		action.replay();
	    }
	    if (result == 1)
		GUI.Label(new Rect(Screen.width/2-50, Screen.height/2-190, 100, 50), "You lose!", style);
	    else if(result == 2)
		
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Unity 3D学习笔记】P&D 过河游戏智能实现 的相关文章

  • Python编程题

    1 输入直角三角形的两个直角边的长度a b 求斜边c的长度 from math import sqrt 从math库中导入sqrt方法 a eval input 输入直角边a的长度 b eval input 输入直角边b的长度 c sqrt

随机推荐

  • Python FastAPI上传文件至七牛云

    最近需要给博客添加上传图片的功能 之前有图片上传的 上传主题图片的 考虑到博客的话图片太多就不存到服务器了 存到七牛云上比较好 相关的图片服务也比较多 我的上传流程是 前端上传图片至服务器 服务器在上传到七牛云 我的后台使用的是Python
  • linux系统的宝塔面板密码忘记了?用户名忘记了?访问地址忘记了?安全入口忘记了?宝塔服务是否已开启?以下是解决方法!修改密码、修改用户名、修改访问端口、修改安全入口等等!

    宝塔面板 在Linux系统下 宝塔面板 BT Panel 可以帮助用户简化服务器的管理和配置 宝塔面板适用于多个Linux发行版 如CentOS Ubuntu等 并提供了图形化的界面 使得用户可以通过简单的点击和配置来完成各种操作 使用宝塔
  • VS2017 创建动态链接库并使用

    下面我们直接步入正题 1 首先在VS2017中新建Dll项目 2 组织你的项目工程目录如下 3 其中 MyDll h文件中的代码为 pragma once ifdef MY DLL EXPORTS define MY DLL EXP dec
  • redis打开若依前端出现端口错误无法显示验证码

    解决方案 由深到表 1 redis服务没有开 箭头朝下 2 redis cli没有开 箭头朝下 3 redis cli打开后报错及解决 我出现的问题是自己在这两个文件设置了密码 但是没有输入导致无法连接 可以去查下如何在文件内设置redis
  • paramiko的两种简单用法,sftp上传下载,执行服务器cmd

    注 1 安装paramiko之前需要安装pycrypto 2 需要服务端添加你的公钥权限你才能使用对应的私钥 1 上传下载文件 import paramiko privatekeyfile 私钥的地址 mykey paramiko RSAK
  • 软件测试综述-软件开发过程

    1 软件产品构成的主要部分 1 客户需求 2 产品说明书 3 进度表 4 软件设计文档 包括 结构文档 数据流图 状态转换图 流程图 代码注释等 5 测试文档 包括 测试计划 测试用例 缺陷报告 测试工具和自动测试 质量 统计和总结 2 软
  • POJ-1416 Shredding Company(DFS)

    题目链接 点击打开链接 大致题意 公司现在要发明一种新的碎纸机 要求新的碎纸机能够把纸条上的数字切成最接近而不超过target值 比如 target的值是50 而纸条上的数字是12346 应该把数字切成四部分 分别是1 2 34 6 因为这
  • 推荐系统-基于用户的协同过滤(User-based CF)

    基于邻域的算法应该算是推荐系统中最基础的算法之一了 主要包括基于用户的协同过滤和基于物品的协同过滤 我觉得他们是最符合直觉的推荐算法了 你想想看 如果给你若干人的行为数据 你怎么去做推荐 一个就是找到和他最相似的用户 因为他们臭味相投 所以
  • SpringCloud之Eureka的报错(版本神坑)

    一 报错内容 2021 09 12 14 47 53 594 INFO 20640 freshExecutor 0 com netflix discovery DiscoveryClient Disable delta property f
  • springboot如何实现短信验证注册和短信验证码登录

    Spring Boot实现短信验证注册和短信验证码登录的步骤如下 1 集成短信服务 选择一个短信服务商 例如阿里云 腾讯云等 并集成该服务商提供的API 2 实现短信发送接口 编写一个短信发送的接口 该接口需要传入手机号并发送短信验证码到该
  • C#Socket通信基础方法知识整理

    一 IP地址操作类 1 IPAddress类 a 在该类中有一个 Parse 方法 可以把点分的十进制IP表示转化成IPAddress类 方法如下 IPAddress address IPAddress Parse 192 168 0 1
  • python sqlite3

    含数据库连接 表创建 增删改查 查看sqlite数据库的软件推荐使用sqlitestudio 下载地址 sqlitestudio SQLite文档类资源 CSDN下载 coding utf 8 乐乐感知学堂公众号 author https
  • SQL Server如何备份数据库

    一 首先把当前的数据库备份成一个文件 1 按照操作来 选择对应的数据库 确定备份文件的存储位置 点击确定 生成备份文件 2 然后可以通过该备份文件还原数据库 右键数据库点击还原文件和文件组 然后设置目标数据库的名字 如果数据库中已经存在相同
  • TSINGSEE青犀视频安防监控管理平台EasyNVR如何配置鉴权?

    视频监控汇聚平台EasyNVR是基于RTSP Onvif协议的视频平台 可支持将接入的视频流进行全平台 全终端的分发 分发的视频流包括RTSP RTMP HTTP FLV WS FLV HLS WebRTC等格式 为了满足用户的集成与二次开
  • Qt 串口类QSerialPort 使用笔记

    Qt 串口类QSerialPort 使用笔记 虽然现在大多数的家用PC机上已经不提供RS232接口了 但是由于RS232串口操作简单 通讯可靠 在工业领域中仍然有大量的应用 Qt以前的版本中 没有提供官方的对RS232串口的支持 编写串口程
  • virtual box安装Ubuntu操作系统

    在提供Ubuntu 18 10 Cosmic Cuttlefish映像的地址中有ubuntu 18 10 desktop amd64 iso和ubuntu 18 10 live server amd64 iso版本 它们是什么区别 简单的说
  • 机器学习——所有非支持向量的拉格朗日乘子一定为0

    问 SVM模型求解过程中所有非支持向量的拉格朗日乘子一定为0 答 正确 SVM模型的求解过程中 对于非支持向量的数据点 其对应的拉格朗日乘子为0 这是因为非支持向量数据点已经满足了约束条件 不需要对目标函数造成日对目标函数有贡献 简而言之
  • UDIMM、RDIMM和LRDIMM

    UDIMM RDIMM和LRDIMM UDIMM UDIMM 全称Unbuffered DIMM 即无缓冲双列直插内存模块 指地址和控制信号不经缓冲器 无需做任何时序调整 直接到达DIMM上的DRAM芯片 UDIMM由于在CPU和内存之间没
  • 基于python的Page Factory模式

    Pythium 基于 Python 的 Page Factory 设计模式测试库 类似于Java的Page Factory模式 旨在减少代码冗余 简单易用 具有高度的可扩展能力 支持以 annotation的方式定义元素 支持同一个元素多种
  • 【Unity 3D学习笔记】P&D 过河游戏智能实现

    P D 过河游戏智能帮助实现 实现状态图的自动生成 讲解图数据在程序中的表示方法 利用算法实现下一步的计算 对于过河游戏 首先需要知道其中各个状态之间的转换关系 绘制状态转移图如下 其中 P代表出发岸上的牧师 D代表出发岸上的恶魔 加号和减