Unity3D 回合制 网上源码 目前还在研究构思
我们已将回合制的战斗模式讲解得很清楚了。那么,如果在Unity3D游戏中实现一个回合制游戏呢?我们从最简单的一对一模式来设计回合制游戏的原型。我们可以游戏的状态划分为下面三种状态:
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
我们已将回合制的战斗模式讲解得很清楚了。那么,如果在Unity3D游戏中实现一个回合制游戏呢?我们从最简单的一对一模式来设计回合制游戏的原型。我们可以游戏的状态划分为下面三种状态:
1、我方角色生命值为0,则游戏结束,角色输。
2、敌方角色生命值为0,则游戏结束,角色赢。
3、如果双方角色生命值均不为0,则反复执行下面的过程:
当当前操作状态为AI时,敌人根据AI算法逻辑行动
当当前操作状态为玩家时,根据玩家操作执行行动
这就是我们今天实现回合制游戏的算法原型。我们下面将根据这一原型来实现一个回合制游戏的示例。首先我们创建一个简单的游戏场景
接下里我们来讲解敌人AI的脚本,敌人需要在玩家执行结束后随机进行一个操作,所以这里需要用到概率,我们一起来看脚本:
using UnityEngine;
using System.Collections;
public class EnemyAI : MonoBehaviour {
//定义敌人最大生命值为100
public int HP=100;
public bool isWaitPlayer=true;
//当前回合数
private int index=1;
//动画组件
private Animation mAnimation;
void Start()
{
mAnimation=GetComponentInChildren<Animation>();
}
void OnDamage(int mValue)
{
HP-=mValue;
}
/// <summary>
/// 执行敌人的AI算法
/// </summary>
public void StartAI()
{
if(!isWaitPlayer)
{
if(HP>20)
{
//80%的攻击招式一
if(Random.Range(1,5)%5!=1)
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式一");
mAnimation.Play("Howl");
//在这里加上特效和伤害
index+=1;
isWaitPlayer=true;
}
//20%的攻击招式二
else
{
Debug.Log("在第"+index+"回合:敌人使用了攻击招式二");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
}
}else
{
switch(Random.Range(1,5)%5)
{
case 0:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式三");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 1:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式四");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
case 2:
Debug.Log("在第"+index+"回合:敌人使用了攻击招式五");
mAnimation.Play("Howl");
index+=1;
isWaitPlayer=true;
break;
}
}
}
}
}
类似地,我们在这里使用一个bool类型的变量isWaitPlayer来表示敌人是否处于等待玩家执行操作的状态,如果该值为false,则表明玩家已经执行完操作,此时敌人应该按照AI算法来实现随机的攻击,其中概率部分的代码如下:
Random.Range(1,5)%5!=1 这一句代码表示80%的概率,因为只有Random.Range(1,5)返回值为5时结果才会为1。如果我们以后希望在游戏中为敌人增加概率,我们都可以使用这种方法。游戏中使用概率的地方还是比较多的,比如在仙剑奇侠传游戏中的逃跑率、暴击率、避让率都是通过这种方式来实现的。大家可能注意到了我在这两个脚本中所有技能或者招式都是使用了一个动画,这当然是为了简化程序,让我们专注于游戏的核心实现,这一点希望大家谅解啊,而在两个脚本中的回合数index主要是为了调试程序的方便,具体应用中可以不用这个变量。好了,在介绍完玩家和敌人的脚本后,我们一起来看今天的核心脚本——TurnGame脚本:
using UnityEngine;
using System.Collections;
public class TurnGame : MonoBehaviour {
/// <summary>
/// 回合制游戏战斗模式原型
/// 说明:本程序以最简单一对一回合制游戏为例,基于Unity3D游戏实现回合制游戏算法
/// 如果需要实现多人对多人的回合制游戏算法,需要设计行动条算法
/// 基本的思路是将游戏状态划分为三种状态:
/// 1、我方角色生命值为0,游戏结束,玩家输
/// 2、敌方角色生命值为0,游戏结束,玩家赢
/// 3、双方生命值均不为0,则循环执行下列过程:
/// 当当前操作状态为AI时,敌人根据AI算法逻辑行动
/// 当当前操作状态为玩家时,根据玩家操作执行行动
/// </summary>
//定义玩家及敌人
public Transform mPlayer;
public Transform mEnemy;
//定义玩家及敌人脚本类
private Player playerScript;
private EnemyAI
http://www.yxkfw.com/thread-3384-1-1.html
转载于:https://www.cnblogs.com/pengde/p/5336092.html
Unity3D 回合制 网上源码 目前还在研究构思相关推荐
- C语言模拟回合制游戏 源码
源码下载地址: http://download.csdn.net/detail/monkey_uan/5115921 刚学C的作品,略带稚气,仅供参考学习,版权所有. #include<stdi ...
- python学习-综合练习三(斐波那契数列、阿姆斯特朗数、//和/、十进制转二进制bin、八进制oct、十六进制hex、进制转换源码、python中::和:的区别)
文章目录 斐波那契数列 阿姆斯特朗数 十进制转二进制bin.八进制oct.十六进制hex 补充进制转换源码 python中::和:的区别 说明:本篇博文的知识点大部分来自 Python3 实例 斐波那 ...
- 网上源码买卖靠谱吗?
看到这个问题的时候,我狠狠的拍了一下同学王五的大腿.这个问题重点不是靠谱不靠谱的问题.我们大家都知道源码是虚拟产品,我们只能在网上交易.所以大家必须得在网上交易源码.问这个问题的人我问你:你在现实中买 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译. Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏 ...
- unity3D埃及探险游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
unity3D埃及探险游戏源码,支持安卓+IOS双端 unity2019 C#语言开发.完整的源码可直接运营.拿来学习研究和二次开发都很不错. 源码下载 unity3D埃及探险游戏源码C#语言开发.完 ...
- oracle 883355,unity3d跑酷游戏DEMO源码
[实例简介] unity3d跑酷游戏DEMO源码,可以用来入门学习. 有障碍物,可以跳跃. [实例截图] [核心代码] RunningDemo └── RunningDemo ├── Assets │ ...
- Android AOSP基础(五)不会调试系统源码,还搞什么Android?
本文首发于微信公众号「刘望舒」 关联系列 Android AOSP基础系列 Android系统启动系列 应用进程启动系列 Android深入四大组件系列 Android深入理解Context系列 An ...
- yt88加密狗不识别_YT88 是天域一个很不错的加密狗工具,可以源码 ,还 外壳 ,带DLK开发包。 Windows Develop 256万源代码下载- www.pudn.com...
文件名称: YT88下载 收藏√ [ 5 4 3 2 1 ] 开发工具: Windows_Unix 文件大小: 12909 KB 上传时间: 2016-05-01 下载次数: 0 提 供 ...
- unity3d c语言,Unity3D实现简易五子棋源码
本文实例为大家分享了Unity3d简易五子棋源码,供大家参考,具体内容如下 对C#源码进行了改写简化: using UnityEngine; using System.Collections; pub ...
最新文章
- UVa10000_Longest Paths(最短路SPFA)
- java在jsp中判断td的值是1还是2_Snap7,Eel与S71200简单组态1
- 11g compression 新特性(1)
- EXT.NET GridPanel展开与收缩
- 判断整除(opj)(动态规划)
- oracle 自带table,Oracle中table函数的使用详解
- 设计模式-UML关系基础
- 基于JAVA+SpringMVC+Mybatis+MYSQL的网上书店管理系统
- [转]你可能不知道的五个强大HTML5 API
- 《AutoCAD 2014中文版超级学习手册》——1.4 配置绘图系统
- 修改鼠标指针的样式,让鼠标变成动态个性化图标,让你的鼠标图标更炫酷起来。
- linux下查看tomcat使用的jdk版本
- Morketing Summit 2019“破·局”:有破有立,突破棋局 | MS2019灵眸·全球营销商业峰会全面启动!...
- java 实现linux进度条,Linux实现的进度条一(基本知识学习和简单功能)
- linux内核结构体初始化时出现的.owner = THIS_MODULE
- 科研萌新成长记8——我不是不接受上帝,我只是不接受上帝创造的这个世界
- vue-element-admin 增删改查(五)
- 6.1儿童节,致我们回不去的童年
- 微信小程序开发实战 ⑤(API及多人协调开发)
- 你家200兆宽带 真的就是200兆吗?原来我们一直都搞错了