自学内容网 自学内容网

项目-坦克大战学习笔记-地图完善

之前我们详细讲解了怎么在地图上绘制墙,这次我们来完善整个地图,

地图的静态物体构成分为可破坏的墙体,不可破坏的铁块,以及最终boos

那我们为了方便存储将三个对象分开放为3个列表

private static List<gudin> walllist = new List<gudin>();//创建一个列表放置墙
private static List<gudin> steellist = new List<gudin>();//创建一个列表放置铁块
private static gudin boos;//创建一个gudin变量boos

在函数调用时直接把传进去的列表参数修改就行

但是boos与墙体和铁块又不一样,墙体和铁块都是15*15的大小,而boos更大并且只需要放一个,所以需要一个新的函数来放置boos

 private static  void boos(int x,int y, Image img,List<gudin>list)//放置boos专用方法
 {
     int X = x * 30;//定义一块墙占30像素点,同比例放大生成墙的坐标
     int Y = y * 30;
     gudin gudin1 = new gudin(X, Y, img);
     list.Add(gudin1);
 }

对着墙体代码仿写简化就行

最终,在设置地图函数中是这样的

 public static void map()//设置整体地图
 {
     wall(1, 1, 5,Resources.wall, walllist);//在30,30的位置创造竖着的五个墙体,传入(位置,数量,储存对象信息的列表)
     wall(3, 1, 5, Resources.wall, walllist);
     wall(5, 1, 3, Resources.wall, walllist);
     wall(7, 1, 5, Resources.wall, walllist);
     wall(9, 1, 3, Resources.wall, walllist);
     wall(11, 1, 5, Resources.wall, walllist);
     wall(13, 1, 5, Resources.wall, walllist);
     wall(4, 3, 1, Resources.steel, steellist);
     wall(10, 3, 1, Resources.steel, steellist);
     wall(4, 8, 1, Resources.wall, walllist);
     wall(5, 8, 1, Resources.wall, walllist);
     wall(3, 8, 1, Resources.wall, walllist);
     wall(2, 8, 1, Resources.wall, walllist);
     wall(11, 8, 1, Resources.wall, walllist);
     wall(12, 8, 1, Resources.wall, walllist);
     wall(9, 8, 1, Resources.wall, walllist);
     wall(10, 8, 1, Resources.wall, walllist);
     wall(1, 10, 5, Resources.wall, walllist);//在30,30的位置创造竖着的五个墙体,传入(位置,数量,储存对象信息的列表)
     wall(3, 10, 5, Resources.wall, walllist);
     wall(5, 10, 3, Resources.wall, walllist);
    
     wall(9, 10, 3, Resources.wall, walllist);
     wall(11, 10, 5, Resources.wall, walllist);
     wall(13, 10, 5, Resources.wall, walllist);
     
     wall(6, 12, 3, Resources.wall, walllist);
     wall(8, 12, 3, Resources.wall, walllist);
     wall(7, 12, 1, Resources.wall, walllist);
     boos(7, 14, Resources.Boss, booslist);//放置boos

 }、

列表需要遍历两次,然后直接调用boos中的huizhi方法

 public static void huizhi()//有了位置以及图片信息就可以调用Object里的绘制函数在窗体中实例化对象
 {
     foreach (gudin n in walllist)//遍历墙体列表
     {
         n.HuiZhi();//调用列表中定义的gudin类信息,传回父类GameObject
     }
     foreach (gudin n in steellist)//遍历铁块列表
     {
         n.HuiZhi();//调用列表中定义的gudin类信息,传回父类GameObject
     }
   boos.HuiZhi();//绘制boos
 }

这样通过绘制方法就可以将地图绘制出来了


原文地址:https://blog.csdn.net/2401_84659046/article/details/142673160

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!