上一篇文章,我们讲了1个角色vs另一个角色的代码该如何写,如果又忘记了的朋友,可以点击这里温故一下
那么,问题来了,1v1搞定了,但是如果打回合制游戏打boss的时候,boss带来了两个小弟,成了1打3,这可怎么办呢
同理,这其实和1v1是一样的做法,我们可以这样子理解:
- 我方玩家1个人,敌方3人
- 我方先攻击,随机选取敌方的一个目标进行攻击
- 轮到地方,敌方每个人都会攻击我方
- 然后又轮到我方,随机攻击敌方
- 循环到有一方死光位置
把逻辑理清楚,我们也就明白我们代码该怎么写了
我的上一篇文章,讲的是单挑的逻辑,是这样子的:
- 首先,回合+1
- 第二,如果是a的回合,a攻击b,如果是b的回合,b攻击a
- 第三,如果两个人中没有一个人死亡,同时没有到回合上限,循环前面两点
- 第四,如果有人死了,那么没死的人赢了,死的人输了
所以说,1v1和1v多人的唯一区别就是,我方攻击的目标是对方随机的一人,对方全体成员都会攻击我方
这样子的代码,其实很好写
我们先创建一个协程,代码如下:
using System.Collections.Generic;
using System.Collection;
using UnityEngine;
public class PK : MonoBehaviour{
IEnumerator Fight(Character a, List<Character> enemies, float Duration)//1 vs n
{
a.isTurn = true;//a goes first
for (int i = 0; i < enemies.Count; i++)//set all enemies' turn false
{
enemies[i].isTurn = false;
}
int Round = 0;//set the round
int IndexOfEnemy = 0;//set the index of enemies
}
}
在这里,我们给敌方角色设置的数组用的list,而不是直接Character[]
为什么要这样子呢,
首先,list是system.collections.generic里面的,所以大家请引用一下哈
其次,我们想一下,如果敌方角色死亡的话,我们是不是要把它从数组里移除,这里就体现List<T>的好处了,我们可以直接调用Remove方法移除数组中的某一项,而Character[]并不能直接移除
所以,综上所述,List<T>更适合我们使用
上面的代码里,我们有一个for循环在协程里,作用是把所有的敌方角色的回合设置为否,这样一来,就只用我方能够攻击
最下面创建的IndexOfEnemy的作用,是给敌方角色的数组设置一个指数,这样,我们就可以做到敌方按顺序一个个攻击我方,在后面的代码里我会对这个变量进行详细的解释
协程里在开始循环之前的部分我们写完了,接下来就是循环的部分了
循环的部分,我们要做到:
- 判断我方还是敌方攻击,如果是敌方攻击&#