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店) 完整的一套汽车美容管理服务系统. 功能介绍:汽车美容服务终端功能强大而又简便实用,界面友 ...
随机推荐
- 采用Jenkins搭建持续集成环境
Jenkins介绍 Jenkins是一个CI工具.它可以根据设定持续定期编译,运行相应代码:运行UT或集成测试:将运行结果发送至邮件,或展示成报告... 这样做的最终目的是: 让项目保持健康的状态.如 ...
- LanSoEditor_advance1.8.0 视频编辑的高级版本
------------------------------------------2017年1月11日11:18:33------------------------------------- 我们 ...
- TortoiseSVN 1.8 关于右键的设置
以前用SVN但都是 IDE 自己集成的插件,最近使用 android studio 发现居然自己不带SVN command line插件,非得自己单独装一个,于是使用了 TortoiseSVN ,但用 ...
- 第一百二十二节,JavaScript表单处理
JavaScript表单处理 学习要点: 1.表单介绍 2.文本框脚本 3.选择框脚本 为了分担服务器处理表单的压力,JavaScript提供了一些解决方案,从而大大打破了处处依赖服务器的局面. 一. ...
- docker容器安全
title: docker容器安全 tags: Docker,容器,安全策略 grammar_cjkRuby: true --- Docker容器的安全性 1.安全策略-Cgroup 1.限制Cpu ...
- window 7 安装mysql
Mysql版本5.7.16 下载完mysql包之后,直接解压缩. 编辑my-default.ini文件,将下面2行注释取消. basedir = e:/mysql #mysql解压目录 datadir ...
- 用 monitorix 开启linux图形化监控
# yum install monitorix # service monitorix starthttp://host:8080/monitorix/
- 关于MongoDB数据库中文件唯一性的问题
※重要※——介绍一下我的环境:MongoDB的“win32-x86_64-2008plus-ssl-3.0.5”,MongoVUE版本是1.6.9,VS2010,dll是1.10版本. MongoDB ...
- ibaits的一个简单的完整的例子
ibaits的简单介绍: iBatis 是apache 的一个开源项目,一个O/R Mapping(对象/关系映射) 解决方案,iBatis 最大的特点就是小巧,上手很快.如果不需要太多复杂的功能,i ...
- html布局,左侧固定右侧自适应
前几天看到我们的UI稿,要实现左侧固定树结构,右侧自适应.想着自己写过几次但是每次都会忘记,在这里做个笔记. 第一种方法: <!DOCTYPE html> <html lang=&q ...