`

贪吃蛇(已经比较完善)

    博客分类:
  • 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(Happy Game Engine)开发的贪吃蛇游戏,这款作品被认为在功能和体验上比较完整。HGE是一个C++库,专为创建2D游戏而设计,提供了包括图形渲染、音频处理、资源...

    C语言贪吃蛇完善版

    ### C语言贪吃蛇完善版:关键知识点 #### 1. 文件操作与配置读写 在游戏程序开发中,常常需要读取和保存配置或游戏状态数据。本程序通过`readini`和`writeini`函数来实现对INI文件的操作。 - **`readini`函数**:该...

    java版贪吃蛇

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

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

    本文将深入探讨如何利用C#编写一个完善的贪吃蛇游戏,包括单人模式、双人对战以及独特的游戏元素,如不同食物和石头,为玩家带来更加丰富的游戏体验。 首先,我们来看游戏的核心机制。贪吃蛇游戏的基本逻辑包括蛇的...

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

    这需要进行几何计算,如比较坐标或使用布尔掩码来检测碰撞。 6. **状态管理**:游戏有开始、暂停、结束等不同状态,需要一个状态机来管理这些状态的切换。 7. **循环与条件语句**:游戏的主要逻辑通常包含在一个...

    Qt贪吃蛇完整版

    这个版本的贪吃蛇游戏在原基础上进行了界面完善,意味着它可能具有以下特性: 1. **菜单界面**:增加了启动、设置、帮助等菜单选项,提升了用户体验,使得玩家可以方便地进行各种操作。 2. **背景音乐**:添加了...

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

    【贪吃蛇游戏详解】 贪吃蛇是一款经典的电子游戏,起源于1976年的"Blockade",随后在各种平台如诺基亚手机上流行起来。本项目是基于Java编程语言实现的军衔版贪吃蛇游戏,最高级别设定为大元帅,增加了游戏的趣味性...

    my_shake 贪吃蛇游戏

    综合以上信息,我们可以推测“my_shake 贪吃蛇游戏”是一个个人编程练习项目,使用了一些基础的编程概念,如光标控制、循环、条件判断等,并且在游戏逻辑方面还有待完善,尤其是在边界条件的处理上。对于想要学习...

    贪吃蛇课程设计 完整版

    贪吃蛇是一款经典的电子游戏,源自早期的计算机时代,因其简单易懂的玩法和无尽的挑战性而深受玩家喜爱。...在实际的开发过程中,还会涉及错误处理、优化以及用户体验等方面,使得游戏更加完善和有趣。

    appinventor超简易贪吃蛇源码.rar

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

    贪吃蛇 代码 代码贪吃蛇 代码贪吃蛇贪吃蛇 代码 代码VC++6.0

    根据提供的信息,我们可以总结出以下关于“贪吃蛇”游戏的实现细节,特别是使用 C++ 编程语言在 VC++6.0 开发环境中完成的版本。...此外,代码中还存在一些语法错误,如变量名拼写错误等,这些都需要进一步修正和完善。

    简单思路实现游戏----贪吃蛇源码

    在本文中,我们将深入探讨如何使用Cocos2d-x框架实现一个简单的“贪吃蛇”游戏。...在实践中,还可以进一步完善游戏,添加更多功能,如难度等级、成就系统、多人对战等,提高游戏的可玩性和趣味性。

    C++版本-贪吃蛇游戏

    对于碰撞检测,我们可以简单地比较蛇的头部坐标与自身身体和游戏边界的坐标。如果头部坐标与任何身体部分或边界相匹配,就判断为碰撞,游戏结束。 在C++中实现贪吃蛇游戏,还需要考虑性能优化。例如,通过使用数据...

    C语言,课程设计贪吃蛇源代码,强化版,包含演示PPT.

    资源中的贪吃蛇游戏已经过优化,修复了一些已知的BUG,使得游戏体验更加顺畅。游戏的算法经过完善,提高了程序的效率和稳定性。该项目使用了经典的Visual C++ 6.0作为编译器,但同样可以在其他环境如Visual Studio或...

    自己写的贪吃蛇

    《贪吃蛇游戏开发详解——基于Java编程》 贪吃蛇是一款经典的电子游戏,它以其简单易懂的规则和无尽的游戏模式深受玩家喜爱。...同时,不断迭代和完善游戏,使其更加完善,也将锻炼你的软件工程实践能力。

    贪吃蛇C语言程序设计

    贪吃蛇游戏是一款经典的计算机游戏,它通过简单的规则和丰富的策略性吸引了众多玩家。在C语言环境下编写贪吃蛇程序,不仅可以锻炼编程基础,还...在实践中不断迭代和完善,你将能够编写出更加复杂和完善的贪吃蛇游戏。

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

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

    MFC贪吃蛇游戏源代码

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

Global site tag (gtag.js) - Google Analytics