我们已将回合制的战斗模式讲解得很清楚了。那么,如果在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

最新文章

  1. [Thinking in Java]Nothing but Java
  2. javascript学习6
  3. tornado web高级开发项目之抽屉官网的页面登陆验证、form验证、点赞、评论、文章分页处理、发送邮箱验证码、登陆验证码、注册、发布文章、上传图片
  4. Java8简明教程(转载)
  5. unity中Debug输出控制
  6. AutoLayout技术选型和应用
  7. ERROR (ClientException) nova image-list
  8. .Net中的socket编程例子
  9. MySQL锁系列1
  10. C++ 类中指向函数的指针 以及 类模板
  11. Linux下安装openvpn
  12. ⑾bootstrap组件 徽章 大屏 页头 基础案例
  13. [Swift]LeetCode172. 阶乘后的零 | Factorial Trailing Zeroes
  14. MyBatis(三)MyBatis的增删改查
  15. Unity 3D中不得不说的yield协程与消息传递
  16. 第三方deepvoice3_pytorch安装使用
  17. 变邻域搜索(Variable neighborhood search)
  18. Python MD5算法使用
  19. 使用nginx实现负载均衡的配置
  20. LVS主从部署配置和使用

热门文章

  1. 2016-2017 CT S03E02: Codeforces Trainings Season 3 Episode 2
  2. Android开源库loopj的android-async-http的 JsonHttpResponseHandler 存在死循环GC_CONCURRENT
  3. Ajax实现页面动态加载,添加数据
  4. db2 常用配置
  5. vim 常用操作
  6. Hihocode 1015 KMP算法
  7. portal安装常见问题
  8. The Key to final data
  9. Angular this vs $scope $event事件系统
  10. Error js内置错误 js处理错误流程 Throw语句