zoukankan      html  css  js  c++  java
  • 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

    至少证明我们还活着
  • 相关阅读:
    近期安卓与IOS招聘面试有感
    java线程池技术(二): 核心ThreadPoolExecutor介绍
    java线程池技术(一):ThreadFactory与BlockingQueue
    Java设计模式之策略模式与状态模式
    java线程间通信:一个小Demo完全搞懂
    Android M 新的运行时权限开发者需要知道的一切
    Java多线程同步问题:一个小Demo完全搞懂
    java多线程之守护线程以及Join方法
    安卓电量优化之JobScheduler使用介绍
    安卓电量优化之WakeLock锁机制全面解析
  • 原文地址:https://www.cnblogs.com/pengde/p/5336092.html
Copyright © 2011-2022 走看看