`

贪吃蛇(已经比较完善)

    博客分类:
  • Java
 
阅读更多

附件中含有两个版本,

第一版本实现了最基本的功能.包括运动,吃food,暂停,计分,重来.

使用了一个二维数组来存储当前地图上有哪些东西,0表示没有,1表示自己的一部分,2表示障碍物,3表示food.

才开始新建一个点,将其加入LinkedList中保存

每一次移动都是将LinkedList的头移除,再在尾部加一个相关方向的next元素.,在这个过程中就需要判断是否越界或者撞到自己.



 



 

吃东西的代码:

 

	public static boolean eatFood() {
		Node last = list.peekLast();// 获取但不移除列表的尾
		if (last.equals(MainFrame.food)) {
			MainFrame.score += 10;
			MainFrame.scoreDisplay.setText("" + MainFrame.score);
			return true;
		}
		return false;
	}

 

 

碰撞的代码:

	public static boolean bump(int row, int col) {
		if (data[row][col] == 2 || data[row][col] == 1) {
			// 撞到障碍物
			return true;
		}
		return false;
	}

 

移动的代码:

	/**
	 * 蛇移动的方法
	 * 
	 * @param colSpeed
	 *            1为向下, -1为向上 0表示横向
	 * @param rowSpeed
	 *            1为向右, -1为向左 0表示竖向
	 */
	public static void move(int colSpeed, int rowSpeed) {
		// 最后出来的是尾巴,前面的是头,这样add时不用插入到最前面方便操作.
		Node last = list.peekLast();// 获取但不移除列表的尾
		int row = last.r + colSpeed;
		int col = last.c + rowSpeed;

		// 判断是否越界
		if ((last.r + colSpeed) >= ROWS || (last.c + rowSpeed) >= COLS
				|| (last.r + colSpeed) < 0 || (last.c + rowSpeed) < 0) {
			if (colSpeed == 1) {
				row = 0;
			} else if (colSpeed == -1) {
				row = ROWS - 1;
			} else if (rowSpeed == 1) {
				col = 0;
			} else {
				col = COLS - 1;
			}
		}

		// 判断是否碰撞
		if (bump(row, col)) {
			MainFrame.isPause = true;
			MainFrame.isAlive = false;
			System.out.println("游戏结束");
			MainFrame.menu.setText("重来");
			return;
		}

		data[row][col] = 1;
		node[row][col].setColor(Color.white);
		list.add(node[row][col]);

		// 一切正常,判断是否吃到了食物
		if (!eatFood()) {
			Node first = list.pollFirst();// 获取并移除列表的头,将其置为空的
			data[first.r][first.c] = 0;
			node[first.r][first.c].setColor(Color.black);
		} else {
			// 再出来一个食物
			MainFrame.creatFood();
		}

	}

 

 

重写JPanel对窗体进行重绘.

 

 

第二个版本加入了新的游戏模式,包括第一版本的传统模式和闯关模式,内置了7张地图,吃到指定数量的food自动切换.可进行游戏.

加入了保存进度的功能.



 



 

 

下面这张是测试时候的截图,第7关.

 

 

详细代码(含一些基本注释和地图制作工具(data文件夹下,jdk1.7)):

制作好的地图欢迎大家传至网盘分享

 

 

 

 

已发现的bug:

首先,在随机生成Food的时候,如果遇到了生成的点已经有东西了,就会再随机一个方向进行位移,比如食物生成在(4,5).结果该位置有障碍物,那么会再随机生成一个方向,比如右边,那么这个位置就变成(4,6),知道不遇到障碍物.

但是,当随机生成的食物本来就在边界,再对其进行加减就会越界了.

在这里加一些判定

 

关卡模式进行跳关的时候还是会随机生成食物,就变成了有两个Food.又由于线程sleep的原因,生成food还在sleep,在读取之后.所以直接读取地图时不处理读到的Food.

重新上传代码:

 

  • 大小: 135.6 KB
  • 大小: 136.4 KB
  • 大小: 26 KB
  • 大小: 136.1 KB
  • 大小: 140.7 KB
2
1
分享到:
评论
1 楼 人生难得糊涂 2014-08-08  
       

相关推荐

    hge写的贪吃蛇 比较完善

    用hge写的贪吃蛇 比较的完善 用hge写的贪吃蛇 比较的完善 用hge写的贪吃蛇 比较的完善

    C语言贪吃蛇完善版

    贪吃蛇,贪吃蛇,贪吃蛇,C语言贪吃蛇,C语言贪吃蛇贪吃蛇

    java版贪吃蛇

    java版贪吃蛇 打包成exe,自带java jre

    Java版贪吃蛇,可以下下来玩玩

    Java写的比较简单的贪吃蛇程序,练练手的

    贪吃蛇(mfc做的贪吃蛇)

    贪吃蛇源码!适于初学者下载,自己做的,不是很完善!

    java军衔版,贪吃蛇!(含源代码)

    自制的一个贪吃蛇游戏(含源代码),军衔版(最高级别为大元帅)

    appinventor超简易贪吃蛇源码.rar

    这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个包括apk应用和aia源码,适用于各位下载学习,请谨慎下载。 游戏说明:蓝色是食物,黑色和红色是蛇,白色是...

    用c++编写的贪吃蛇小游戏

    用c++编写的贪吃蛇游戏,功能比较完善,可供大家参考学习。

    C#贪吃蛇完善版,原创作品,含源代码和安装包

    之前上传过一个,但是还有很多没有完善的地方, 这个是修改后的版本, 支持单双人对战,三种食物,一个石头, 对应不同效果,可左右设置宽度和高度, 超出屏幕则减少超出部分

    MFC贪吃蛇游戏源代码

    近年来,随着通信技术的高速发展,网络技术和移动终端性能的不断提高与完善,以及手机、电脑的高普及率,使得人们对终端系统应用开发的需求在不端增大,贪吃蛇游戏是受广大人群喜爱的一款的电脑单机游戏,在这个游戏...

    C#贪吃蛇(非常强悍的C#贪吃蛇游戏,你一定不会后悔的)

    有C#写的一个非常强大的贪吃蛇游戏,共分5关,可以选择关数,可以选择速度,有暂停,开始,帮助。。等按钮,,,一个很完善,很强大的小例子。。。。

    appinventor超简易贪吃蛇(只含apk).apk

    这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个是apk安卓应用,不包括aia源码,适用于各位下载试用,所以不需要积分(如果要积分的话,就是系统修改的了),...

    Qt贪吃蛇完整版

    贪吃蛇,所有软件:Qt4.8.5,Qt creator。主体算法部分来参考了CSDN网友,抱歉网址不记得了。我自己重写了一个,又加了一些菜单界面,和背景音乐,程序ICO图标等。

    C语言写的贪吃蛇

    C语言写的贪吃蛇练习,linux平台下写的,不是很完善

    java swing 贪吃蛇

    用java Swing 开发的一款贪吃蛇小游戏,基本功能已经完善,有几个不同的游戏速度,可以暂停/开始游戏,还可以重新开始游戏,经测试,小游戏比较稳定。

    汇编 贪吃蛇 小游戏

    可以在masm5/汇编运行环境上调试。非常完善的一个贪吃蛇游戏,界面也不错,很漂亮哦~~

    超简单贪吃蛇vb代码

    超简单的vb贪吃蛇代码,类似与80后们玩的小游戏机上的方块儿贪吃蛇游戏,至于关次和分值大家可以进一步完善,适合于初学者哦!

    VC++贪吃蛇游戏设计

    VC++MFC 设计贪吃蛇游戏。方向键 开始 空格重新开始 。 功能还不够完善 ,有兴趣的可以完善下。

    贪吃蛇游戏源代码附有实验报告C#编程

    基于C#.NET编程的游戏,本游戏实现了贪吃蛇的基本功能,需要要完善之处,望IT好友修正之。 程序功能 1)游戏选项:主要实现游戏的开始、暂停、退出,分别可以使用快捷键F2、空格键、F4。 2)设置: a)游戏难度等级设置...

Global site tag (gtag.js) - Google Analytics