TankWar 单机(JAVA版)版本2.0.1 在地图中加入墙体

网友投稿 266 2022-09-06

TankWar 单机(JAVA版)版本2.0.1 在地图中加入墙体

在地图中加入障碍物,首先说说我的思路。

我把整个panel看作一个二维的数组,然后为这个二维数组赋不同的值。

二维数组的值表示我们地图所需的土墙  石头墙  灌木丛 水池等。

在加载地图时我们遍历地图集合,画出地图。

首先新建了一个Wall类

package tankWar;import java.awt.Graphics;import java.awt.Image;import java.awt.Toolkit;public class Wall { private int x; private int y; private int width; private int height; //id区分是哪种墙 private int id; private static Toolkit tk=Toolkit.getDefaultToolkit(); private static Image littlewalls,littlesteels,river,littlegrass,steels,grass; static { littlewalls=tk.getImage("image/walls.gif"); littlesteels=tk.getImage("image/littlesteels.gif"); river=tk.getImage("image/river.jpg"); littlegrass=tk.getImage("image/grass.gif"); steels = tk.getImage("Image/steels.gif"); grass=tk.getImage("image/grass.gif"); } public Wall() { super(); // TODO Auto-generated constructor stub } public Wall(int x, int y, int id) { super(); this.x = x; this.y = y; this.id = id; } public void draw(Graphics g){ //根据不同的id画不同的障碍物 switch(id) { case 1: g.drawImage(grass, x, y, TankClient.tc); break; case 2: g.drawImage(steels, x, y, TankClient.tc); break; case 3: g.drawImage(littlewalls, x, y, TankClient.tc); break; case 4: g.drawImage(river, x, y, TankClient.tc); break; case 5: g.drawImage(littlegrass, x, y, TankClient.tc); break; case 6: g.drawImage(littlesteels, x, y, TankClient.tc); break; } }}

必须的x,y坐标 draw方法肯定不能少 至于宽和高  在后面我们也会用到。

然后就是新建的Map类

package tankWar;public class Map { //地图 private int map[][] = new int[TankClient.SCREENWIDTH][TankClient.SCREENHEIGHT]; //设置地图 public int[][] getMap() { drawASurB(200, 193, 3, 1); drawASurB(200 - 32, 193 - 32, 3, 1); drawASurB(100, 280, 2, 1); drawASurB(280, 400, 2, 4); drawASurB(0, 180, 4, 1); drawASurB(501, 100, 4, 1); drawASurB(501 + 32, 100 - 32, 4, 1); drawASurB(300, 60, 2, 1); drawASurB(300, 260, 2, 1); drawASurB(670, 270, 2, 1); drawASurB(670, 170, 2, 1); drawASurB(550, 370, 2, 1); for (int i = 350; i < 450; i += 16) { map[i][350] = 2; } map[400 - 16][500] = 3; map[400][500] = 3; map[400 + 16][500] = 3; map[400 + 32][500] = 3; map[400 - 16][500 + 16] = 3; map[400 + 32][500 + 16] = 3; map[400 - 16][500 + 32] = 3; map[400 + 32][500 + 32] = 3; return map; } private void drawASurB(int i, int j, int a, int b) { // TODO Auto-generated method stub if (a == 3) { map[i][j] = a; map[i + 16][j] = a; map[i + 16][j + 16] = a; map[i][j + 16] = a; } else map[i][j] = a; map[i][j + 32] = b; if (i - 32 >= 0) map[i - 32][j] = b; map[i + 32][j] = b; map[i][j - 32] = b; }}

map类 中的getMap方法就是返回一个二维数组 也就是地图

然后就是遍历二维数组 把地图元素放入地图集合

TankClient 类新增一个地图集合

//地图集合 public static List wallsList = new CopyOnWriteArrayList();

遍历二维数组,将地图元素放入地图集合

Map m=new Map(); int [][]tankMap=m.getMap(); for(int i=0;i

之后就在paint方法里面绘制了

for(Wall wall:wallsList){ wall.draw(g); }

运行结果如下图:

这里可以看到子弹和坦克都是可以穿墙的  。我们都知道坦克不能穿透石头,水池,土墙等障碍物,子弹可以穿过水池,灌木丛等障碍物。

下一篇文章优化。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TankWar 单机(JAVA版) 版本0.1&&版本0.2 显示一个窗口
下一篇:张之臻成公开赛时代首位跻身温网正赛的中国内地男球员!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~