项目-坦克大战学习-人机随机生成

想要做到人机随机生成我们需要做到以下几点

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信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值