欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

单机版坦克大战游戏总结

程序员文章站 2024-03-07 08:27:32
...

           刚刚做完坦克大战的游戏,不能说做完,功能还很简单,还有一些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类里。

 

 

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

 

上一篇: php 常用的系统函数

下一篇: