版权申明:

  • 本文原创首发于以下网站:
  1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
  2. 优梦创客的官方博客:https://91make.top
  3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
  4. 『优梦创客』的微信公众号:umaketop
  • 您可以自由转载,但必须加入完整的版权声明

目标

实现功能

道具会在豆子的坐标上随机出现

玩家吃下道具时怪物会改变颜色

道具的随机出现

在AStar算法中可以获得所有豆子的坐标集合

将该坐标集合储存起来

在创建道具时在豆子坐标集合中随机获取一个坐标最为道具创建的位置达到随机创建豆子的目的

  public void SpawnPowerUp()
{
//游戏结束后将不创建道具
if (gameOver)
return;
//使用预制体创建道具
GameObject powerUp = Instantiate(powerUpPrefab);
//道具创建的位置
powerUp.transform.position = walkableList[Random.Range(0,walkableList.Count-1)]-liftBottom;
//道具创建时设置父节点
powerUp.transform.SetParent(powerUpParent.transform);
}

怪物的改变颜色

在游戏控制器中有一个isPowerUp来决定玩家是否得到了PowerUp的道具

//获得道具时
if (GameController.gameController.isPowerUp)
{
//将怪物的颜色设置淡一些
this.GetComponent<SpriteRenderer>().material.color = new Color(0.5f,0.5f,0.8f,1.0f);
}
else
{
//道具失效后怪物的颜色将变为原来的颜色
this.GetComponent<SpriteRenderer>().material.color = Color.white;
}

完成了怪物在玩家吃到道具的时候逃跑

逻辑:

在玩家吃掉道具时,怪物会选择一个角落进行寻路,也是要转到路点移动状态。

选择一个角落时,计算怪物到角落的距离,计算玩家到角落的距离,如果是怪物的距离比较短,就放入候选角落,最后在候选角落里随机选择一个目标点。

实现:

选择角落代码:

    public Vector2 GetEscapeCorner(Vector3 monsterPos)
{
//获得逃跑目标点
List<Vector2> escapable = new List<Vector2>();
for(int i=0;i<v3corners.Length;i++)
{
Vector3 playerPos = playerTrans.position;
float dPlayer = (playerPos - v3corners[i]).magnitude;
float dMonster = (monsterPos - v3corners[i]).magnitude;
if(dMonster<dPlayer)
{
escapable.Add(corners[i].position);
}
}
Vector2 selectCorner = escapable[UnityEngine.Random.Range(0, escapable.Count)];
return selectCorner;
}

怪物内,发现玩家时的状态:

    class SeekState : WaypointState
{
public SeekState(List<Vector2> path): base(path)
{ }
public override void Update(Monster e)
{
if(GameController.instance.isPlayerPowerUp)
{
Vector2 corner = GameController.instance.GetEscapeCorner(e.transform.position);
Vector2 p = GameController.instance.leftBottom;
List<Vector2> path = e.finder.Find((Vector2)e.transform.position-p, corner-p);
for (int i = 0; i < path.Count; i++)
{
path[i] += p;
}
e.stateMaginer.ChangeState(new EscapeState(path));
return;
}
base.Update(e);
}
}

PacMan 04——道具生成吃下道具怪物的移动的更多相关文章

  1. Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置

    Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置 一.基本设置 首先,为了可以使我们的c++ 可以找到 iostream类,std标准库,我们需要在C/C++ General- ...

  2. Ubuntu 14.04 AMD 64位 下 Android Studio 的安装

    Ubuntu 14.04 AMD 64位 下 Android Studio 的安装 作者:yoyoyosiyu 邮箱:yoyoyosiyu@163.com 时间:2015年8月25日 Android ...

  3. 在ubuntu16.04+python3.5情况下安装nltk,以及gensim时pip3安装不成功的解决办法

    在ubuntu16.04+python3.5情况下安装nltk,以及gensim时pip3安装不成功的解决办法,我刚开始因为不太会用linux命令,所以一直依赖于python 的pip命令,可是怎么都 ...

  4. js递归生成树形下拉菜单

    需求:我需要把一个单表的数据转换成类似菜单那种如图所示:我呢需要把这个菜单树放入到下框里面去如图所示: 下面是实现思路:1.第一步1.1var afTypeJson=${afTypeJson}// 这 ...

  5. (NO.00004)iOS实现打砖块游戏(十六):导弹发射道具的实现(下)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上一篇我们完成了导弹道具相关的道具制作,本篇中我们来完成其实现 ...

  6. Ubuntu 16.04 grub rescue 模式下修复 grub

      前几天整理了下电脑的分区,合并并删除一些分区,结果导致 grub 被破坏了,Ubuntu进不去了,启动后直接进入了 rescure 模式.后来又折腾了下,终于修复好了,现总结一下. 先说一下我的系 ...

  7. java动态生成带下拉框的Excel导入模板

    在实际开发中,由于业务需要,常常需要进行Excel导入导出操作.以前做一些简单的导入时,先准备一个模板,再进行导入,单有十几. 二十几个导入模板时,往往要做十几.二十几个模板.而且,当在模板中需要有下 ...

  8. 04、生成 HTMLTestRunner 测试报告

    1.HTMLTestRunner 是 Python 标准库的 unittest 模块的一个扩展.它生成易于使用的 HTML 测试报告 1>下载HTMLTestRunner.py文件,地址为: h ...

  9. ubuntu16.04在GTX1070环境下安装 cuda9.1

    设备要求 系统:Ubuntu16.04 显卡:GTX 1070 驱动:nvidia系列,显卡驱动的版本必须大于等于cuda的sh文件名里面的版本号 驱动可从 此处 下载,我已经整理好了 检查安装驱动 ...

随机推荐

  1. Liunx学习总结(三)--用户和用户组管理

    用户和组的基本概念 用户和组是操作系统中一种身份认证资源. 每个用户都有用户名.用户的唯一编号 uid(user id).所属组及其默认的 shell,可能还有密码.家目录.附属组.注释信息等. 每个 ...

  2. Spring Boot MyBatis 数据库集群访问实现

    Spring Boot MyBatis 数据库集群访问实现 本示例主要介绍了Spring Boot程序方式实现数据库集群访问,读库轮询方式实现负载均衡.阅读本示例前,建议你有AOP编程基础.mybat ...

  3. 《GO Home Trash!》UML类图,ER图以及数据库设计

    <Go Home Trash!>UML类图 ER图以及数据库中数据表 分析: 这款软件经过我们前期的讨论以及需求分析,确定了用户,客服以及管理员三个实体.在设计UML类图时,对各个实体之间 ...

  4. hdu6437 Problem L.Videos(网络流)

    Problem L.Videos Problem Description: C-bacteria takes charge of two kinds of videos: ’The Collectio ...

  5. hdu 6215 Brute Force Sorting(模拟)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6215 题解:类似双链表的模拟. #include <iostream> #include ...

  6. Codeforces Round #383 (Div. 2)D. Arpa's weak amphitheater and Mehrdad's valuable Hoses(dp背包+并查集)

    题目链接 :http://codeforces.com/contest/742/problem/D 题意:给你n个女人的信息重量w和美丽度b,再给你m个关系,要求邀请的女人总重量不超过w 而且如果邀请 ...

  7. 快速构建第一个Flink工程

    本文简述通过maven和gradle快速构建的Flink工程.建议安装好Flink以后构建自己的Flink项目,安装与示例运行请查看:Flink快速入门--安装与示例运行. 在安装好Flink以后,只 ...

  8. 【LeetCode】[0001] 【两数之和】

    题目描述 思路分析 Java代码 代码链接 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个整数,并返回他们的数组下标.你可以假设每种输入只会对 ...

  9. 使用dubbo引用和发布服务时出现的异常:HTTP状态500 - 请求处理失败; 嵌套异常是com.alibaba.dubbo.rpc.RpcException:无法在服务cn.e3mall.service.ItemService中调用方法getTbItemById。使用dubbo版本2.5.3在消费者...

    异常情况如下: 从异常看,主要是因为TbItem没有序列化: 分析问题: 表现层调用服务端时返回了一个TbItem对象即Java对象,此时这个对象远程调用拿过来必须进行序列化,要进行网络传输必须先要把 ...

  10. DNS解析域名的过程

    一.DNS解析域名的过程 1.大的过程可分为三步: (1).在缓存中查找是否之前解析过 (2).在windows系统的host文件中查找 (3).请求DNS服务器 2.小的过程可分为十步: (1).浏 ...