单机版坦克大战游戏小结

单机版坦克大战游戏总结

           刚刚做完坦克大战的游戏,不能说做完,功能还很简单,还有一些Bug。花了两个下午,一个晚上,因为时间很紧张,(主要怪自己,在别人工作的时候,我在去杭州了单机版坦克大战游戏小结,不过,玩得很开心,虽然来了"梅超风"单机版坦克大战游戏小结),这里只是简单的一些总结,整理一下自己的思路,Bug,以后会慢慢修复。单机版坦克大战游戏小结

 

       写一个游戏,首先要定义的自己的规则,搞清楚自己到底要实现的东西有哪些。然后,一点一点理清自己的思路。搞清楚,为了达到目的,我要做哪些事情,先后顺序是什么。

 

       一开始突然要写坦克,作者也是一头蒙。后来,静下心来,慢慢分析,先学会玩坦克大战这个游戏,搞清楚了游戏规则,然后开始模仿。要写这个游戏,首先,要有一个JFrame。要有自己的坦克和敌方坦克。坦克要会发射子弹。坦克要能够在JFrame上运动。要判断输赢,那么还要自己定义输赢标准。 这些是主干,其他的可以一点一点的加。

 

 

  一:界面,800*700的JFrame。

 

 


单机版坦克大战游戏小结

 

 

 

 

 

        背景图片是我截取的一个游戏的,然后一小块,一小块拼起来的,足足拼了400多块(因为这个背景图片很有战场的感觉)。

         然后,就是设计地图了。创建一个Map文件,用数字来表示地图上的事物。然后,读取文件,用到了前几天的文件的读取,将字符串转换成数组元素,用数组来存储。遍历数组,数组不同的元素,则绘制相对应的事物。

 

    //根据数组,画出地图

   public void createMap(int[][] array,Graphics g){
	   for(int i=0;i<array.length;i++){
		   for(int j=0;j<array[i].length;j++){
			   if(array[i][j]==1){
				   g.drawImage(Config.Wall.getImage(),35*(j),35*(i),null);
				   }
			   if(array[i][j]==2){
				   g.drawImage(Config.Stone.getImage(),35*(j),35*(i),null);
			   }
			   if(array[i][j]==3){
				   g.drawImage(Config.CantDie.getImage(),35*(j),35*(i),null);
			   }

		   }
	   }
   }

 

        JFrame双缓冲:借鉴了chang0501的blog,在这里附上地址:http://chang0501.iteye.com/blog/1027663

在这里就不多说了。真是牛人多多,要多多学习。

 

         二:己方坦克

 

         实现的功能:四个方向移动,发射子弹,判断障碍物,当被敌方坦克打中后,自动生成一个新的。游戏结束的标准是:敌方坦克被全部消灭或者己方坦克的基地被毁灭。己方坦克的作用就是保护基地不被毁,可以不断再生,直到游戏结束。

 

         用键盘来控制坦克的方向,需要添加键盘监听器:addKeyListener,用四个boolean变量来记录键盘的按键情况,按下键,相对应的值变为true,那么此时前进的方向就确定了,释放为false。

 

 

         /**

	 * 判断前进方向
	 */
	public void directionToHead() {
		if (dir == e.VK_RIGHT) {
			right = true;
			currentDirection = "right";
		}
		if (dir == e.VK_LEFT) {
			left = true;
			currentDirection = "left";
		}
		if (dir == e.VK_UP) {
			up = true;
			currentDirection = "up";
		}
		if (dir == e.VK_DOWN) {
			down = true;
			currentDirection = "down";
		}
	}

 

    三:敌方坦克

 

    其实,敌方坦克类里有许多和己方坦克相同的方法,比如,判断是否被打中,是否碰到障碍物。敌方坦克不同的是,被打中后,消失,直到全部被打中消失,那么,游戏结束,己方胜利。敌方坦克的运动方向和位置是随机的。前,后,左,右,四个方向随机选择。

   /**

	 * 随机选择前前进的方向
	 */
	public void initDirection() {
		Random ran = new Random();
		int dir = ran.nextInt(4);
		if (dir == 0) {
			up = true;
		}
		if (dir == 1) {
			down = true;
		}
		if (dir == 2) {
			left = true;
		}
		if (dir == 3) {
			right = true;
		}
	}

 

 

    四:子弹类

      己方子弹,和敌方子弹,创建方法时相同的,里面实现的方法也有很多相同的地方,其实可以合并写在一个类里。但,一开始的时候,我为了理清自己的思路,把他们一一的分开了。

     子弹的运动方向和位置的定义,是与坦克运动方向,位置相关的,因此可以用坦克的坐标来表示子弹的坐标,坦克的方向就是子弹的方向。子弹类里,会有一些方法,比如,子弹击中了墙,那么墙就要消失;子弹击中对方坦克,坦克消失,等等。

 

 

   五:实现爆炸效果

   爆炸的实现其实就是连续的绘制图片。将图片保存在数组里,然后遍历绘制。爆炸的产生是在子弹打中坦克的情况的产生的,因此,此时的子弹是setLive(false)的,调用爆炸方法即可。

 

  六:Config类

      因为要绘制很多图片,为了方便,可以将要用到的素材放到Config类里。

 

 

      以上只是我暂时的结果。还有很多要完善的地方,比如,敌方坦克不可以重合,由于敌方坦克运动方向是随机的,坦克可能会原地打转的问题,等等,很多。我会继续完善的。

 

1 楼 jcs130 2011-08-11  
图挂了……
2 楼 Jonathan樊 2011-08-11  
jcs130 写道
图挂了……

我先把图放到QQ相册里,得到网络地址,才能上传啊~~不然,怎么办呢?