想要做到人机随机生成我们需要做到以下几点
1,确定随机生成的位置
2,确定随机生成人机的样式
3,实例化人机
4,绘制人机
在项目中我们由三个位置让人机生成,但是每次生成人机就需要在3个位置中随机挑选一个,所以我们需要将三个位置储存成数组用来调用
private static Point[] Points=new Point[3]; //放置人机位置
Points[0].X = 0;
Points[0].Y = 0;
Points[1].X = 7 * 30;
Points[1].Y = 7 * 30;
Points[2].X = 14 * 30;
Points[2].Y = 14 * 30;
这样,我们就可以设置0到2的随机数传入数组索引随机调用坐标了
Random rd = new Random();//生成随机数
int rds=rd.Next(0, 3);//设置只能在0到3之间生成随机数,包含最小值不包含最大值
Point pos = Points[rds];//创建一个坐标随机放置生成人机的位置
运行一次生成一个坐标
生成坐标后我们还需要随机生成人机的种类,需要创建一个renji类用来实例化人机
renji类和玩家类很像,都有是否移动,速度,四个方向的图片
但是由于我们人机类需要实例化4种人机所以图片对象不是固定的,我们可以将图片对象设置为传参
public renji(int x,int y,int speed,Bitmap up,Bitmap down,Bitmap left,Bitmap right)
{
this.x = x;
this.y = y;
this.speed =speed;//速度
BitmapUp = up;//设置对应方向图片
BitmapDown = down;
BitmapLeft = left;
BitmapRight = right;
Fangxiang = fangxiang.Down;
//因为需要设置4种敌人所以将图片设置为传入的参数,在设置人机时传参调用
}
将四种方向的图片都设置为传参,然后将4种坦克全部实例化出来放进方法中方便调用
private static void renji1(int x,int y)//实例化人机Gray
{
renji renji1 = new renji(x,y,4,Resources.GrayUp,Resources.GrayDown,Resources.GrayLeft,Resources.GrayRight);
//实例化人机
renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji2(int x,int y)//实例化人机Green
{
renji renji1 = new renji(x, y,3, Resources.GreenUp, Resources.GreenDown, Resources.GreenLeft, Resources.GreenRight);
//实例化人机
renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji3(int x, int y)
{
renji renji1 = new renji(x, y,2, Resources.QuickUp, Resources.QuickDown, Resources.QuickLeft, Resources.QuickUp);
//实例化人机
renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji4(int x, int y)
{
renji renji1 = new renji(x, y ,5, Resources.SlowUp, Resources.SlowDown, Resources.SlowLeft, Resources.SlowRight);
//实例化人机
renjilist.Add(renji1);//将生成的人机放入列表
}
将实例化的人机放入renji类型的列表储存起来方便调用
然后设置人机生成条件,目前设置条件为运行60帧后(一秒后)生成一次,我们可以设置一个数,每当方法运行一次计数器就会加一,等到计数器加到60就向下运行人机生成的代码然后将计数器归0
public static void renji()//人机生成
{
int renjishencheng++;//每调用一次计数器加一
if (renjishencheng <60) return;//如果计数器小于60次那么直接返回出去不调用下面代码
Random rd = new Random();//生成随机数
int rds=rd.Next(0, 3);//设置只能在0到3之间生成随机数,包含最小值不包含最大值
Point pos = Points[rds];//创建一个坐标随机放置生成人机的位置
Random renjird = new Random();//生成随机数设置人机种类
int renjirds = renjird.Next(1, 5);//设置只能在1到5之间生成随机数,包含最小值不包含最大值
switch(renjirds)//随机生成人机
{
case 1:
renji1(pos.X,pos.Y);
break;
case 2:
renji2(pos.X,pos.Y);
break;
case 3:
renji3(pos.X,pos.Y);
break;
case 4:
renji4(pos.X,pos.Y);
break;
}
renjishencheng = 0;//计数器归零
}
这样,每一秒实例化一个人机出来
在update方法中绘制人机,用foreach方法遍历renjilist将检测到的renji类型绘制出来
foreach (renji renji in renjilist)//实例化人机
{
renji.update();
}
将生成人机方法放入update,每秒在renjilist方法中生成一个renji信息