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
Unity3D 回合制 网上源码 目前还在研究构思的更多相关文章
- Unity3D游戏-愤怒的小鸟游戏源码和教程(二)
Unity愤怒的小鸟游戏教程(二) 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果 ...
- Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
Unity愤怒的小鸟游戏教程 本文提供全流程,中文翻译.Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) AngryEva游戏效果: 1 ...
- 分享一个Unity3D小作品,源码地址已公布在文章开头!
Update:回复量有点大,楼主工作期间可能无暇向童鞋们发送源码,为了不让童鞋们久等,现公布源码地址. 链接: http://pan.baidu.com/s/1sjpYW4d 密码: zhp9 请注 ...
- Android源码之Gallery专题研究(1)
前言 时光飞逝,从事Android系统开发已经两年了,总想写点什么来安慰自己.思考了很久总是无法下笔,觉得没什么好写的.现在终于决定写一些符合大多数人需求的东西,想必使用过Android手机的人们一定 ...
- 对vue源码之缓存的研究--------------引用
探索vue源码之缓存篇 一.从链表说起 首先我们来看一下链表的定义: 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个 ...
- C# unity3d 贪吃蛇 游戏 源码 及其感想
这个游戏的设计过程是这样的: 1,创建
- Android源码之Gallery专题研究(2)
引言 上一篇文章已经讲解了数据加载过程,接下来我们来看一看数据加载后的处理过程.按照正常的思维逻辑,当数据加载之后,接下来就应该考虑数据的显示逻辑. MVC显示逻辑 大家可能对J2EE的MVC架构比较 ...
- 2014年7月份第2周51Aspx源码发布详情
体育馆综合会员管理系统源码 2014-7-11 [VS2010]功能介绍:本系统适用于羽毛球馆,台球馆,乒乓球馆,棋牌室,篮球馆等综合体育馆,可同时使用.本系统功能非常强大,包含体育馆内餐厅,超 ...
- 2014年6月份第1周51Aspx源码发布详情
企业汽车服务终端管理系统源码 2014-6-3 [VS2010]源码描述:本系统专门服务于(汽车美容4s店) 完整的一套汽车美容管理服务系统. 功能介绍:汽车美容服务终端功能强大而又简便实用,界面友 ...
随机推荐
- linode开通Paypal付款方式
vps服务器品牌linode近期新闻不断.今天是linode成立13周年,全部套餐免费升级翻倍内存,所以现在linode最低配置套餐内存是2GB,每月2TB流量,40Gb机房带宽,非常超值. 长期以来 ...
- Python调用(运行)外部程序
在Python中可以方便地使用os模块运行其他的脚本或者程序,这样就可以在脚本中直接使用其他脚本,或者程序提供的功能,而不必再次编写实现该功能的代码.为了更好地控制运行的进程,可以使用win32pro ...
- [其他]win7下chrome浏览器插件导出与导入
下载了某些插件,重装电脑怎么不备份,重装之后怎么再次使用,一文搞定! 导出crx格式备份文件 1.选择 自定义格式及控制 > 更多工具 > 扩展程序: 2.勾选"开发者模式&qu ...
- Angular JS Scope(作用域)
Scope(作用域) 是应用在 HTML (视图) 和 JavaScript (控制器)之间的纽带. Scope 是一个对象,有可用的方法和属性. Scope 可应用在视图和控制器上. 当你在 Ang ...
- shell的入门
shell :弱类型. 解释型语言 从程序员的角度来看, Shell本身是一种用C语言编写的程序,从用户的角度来看,Shell是用户与Linux操作系统沟通的桥梁.用户既可以输入命令执行,又可以利用 ...
- action解耦方式
ServletAction方式,必须要有Servlet容器作支持 package com.hanqi.action; import javax.servlet.ServletContext; impo ...
- Aa3.0 事件机制
说明:本文由多处网络文章整理而成,在此未一一注明原文链接,敬请谅解! AS3:事件流机制 事件流 只要发生事件,Flash Player就会调度该事件对象. 如果事件目标不在显示列表中,则Flash ...
- 关于jq的load不用回调获取其中dom元素方法
jq的load方法如果要操作其中的dom元素,需要使用回调,等其加载完了再进行dom元素的获取,今天看我们项目组长写的一段代码,发现不用回调也能获取到其中的元素. 具体是这样写的: <scrip ...
- 2015 asia xian regional F Color (容斥 + 组合数学)
2015 asia xian regional F Color (容斥 + 组合数学) 题目链接http://codeforces.com/gym/100548/attachments Descrip ...
- [Mark] KVM 虚拟化基本原理
X86 操作系统是设计在直接运行在裸硬件设备上的,因此它们自动认为它们完全占有计算机硬件.x86 架构提供四个特权级别给操作系统和应用程序来访问硬件. Ring 是指 CPU 的运行级别,Ring 0 ...