附件中含有两个版本,
第一版本实现了最基本的功能.包括运动,吃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.
重新上传代码:
相关推荐
【标题】"hge写的贪吃蛇 比较完善"所指的是一款使用HGE(Happy Game Engine)开发的贪吃蛇游戏,这款作品被认为在功能和体验上比较完整。HGE是一个C++库,专为创建2D游戏而设计,提供了包括图形渲染、音频处理、资源...
### C语言贪吃蛇完善版:关键知识点 #### 1. 文件操作与配置读写 在游戏程序开发中,常常需要读取和保存配置或游戏状态数据。本程序通过`readini`和`writeini`函数来实现对INI文件的操作。 - **`readini`函数**:该...
java版贪吃蛇 打包成exe,自带java jre
本文将深入探讨如何利用C#编写一个完善的贪吃蛇游戏,包括单人模式、双人对战以及独特的游戏元素,如不同食物和石头,为玩家带来更加丰富的游戏体验。 首先,我们来看游戏的核心机制。贪吃蛇游戏的基本逻辑包括蛇的...
这需要进行几何计算,如比较坐标或使用布尔掩码来检测碰撞。 6. **状态管理**:游戏有开始、暂停、结束等不同状态,需要一个状态机来管理这些状态的切换。 7. **循环与条件语句**:游戏的主要逻辑通常包含在一个...
这个版本的贪吃蛇游戏在原基础上进行了界面完善,意味着它可能具有以下特性: 1. **菜单界面**:增加了启动、设置、帮助等菜单选项,提升了用户体验,使得玩家可以方便地进行各种操作。 2. **背景音乐**:添加了...
【贪吃蛇游戏详解】 贪吃蛇是一款经典的电子游戏,起源于1976年的"Blockade",随后在各种平台如诺基亚手机上流行起来。本项目是基于Java编程语言实现的军衔版贪吃蛇游戏,最高级别设定为大元帅,增加了游戏的趣味性...
综合以上信息,我们可以推测“my_shake 贪吃蛇游戏”是一个个人编程练习项目,使用了一些基础的编程概念,如光标控制、循环、条件判断等,并且在游戏逻辑方面还有待完善,尤其是在边界条件的处理上。对于想要学习...
贪吃蛇是一款经典的电子游戏,源自早期的计算机时代,因其简单易懂的玩法和无尽的挑战性而深受玩家喜爱。...在实际的开发过程中,还会涉及错误处理、优化以及用户体验等方面,使得游戏更加完善和有趣。
这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个包括apk应用和aia源码,适用于各位下载学习,请谨慎下载。 游戏说明:蓝色是食物,黑色和红色是蛇,白色是...
根据提供的信息,我们可以总结出以下关于“贪吃蛇”游戏的实现细节,特别是使用 C++ 编程语言在 VC++6.0 开发环境中完成的版本。...此外,代码中还存在一些语法错误,如变量名拼写错误等,这些都需要进一步修正和完善。
在本文中,我们将深入探讨如何使用Cocos2d-x框架实现一个简单的“贪吃蛇”游戏。...在实践中,还可以进一步完善游戏,添加更多功能,如难度等级、成就系统、多人对战等,提高游戏的可玩性和趣味性。
对于碰撞检测,我们可以简单地比较蛇的头部坐标与自身身体和游戏边界的坐标。如果头部坐标与任何身体部分或边界相匹配,就判断为碰撞,游戏结束。 在C++中实现贪吃蛇游戏,还需要考虑性能优化。例如,通过使用数据...
资源中的贪吃蛇游戏已经过优化,修复了一些已知的BUG,使得游戏体验更加顺畅。游戏的算法经过完善,提高了程序的效率和稳定性。该项目使用了经典的Visual C++ 6.0作为编译器,但同样可以在其他环境如Visual Studio或...
《贪吃蛇游戏开发详解——基于Java编程》 贪吃蛇是一款经典的电子游戏,它以其简单易懂的规则和无尽的游戏模式深受玩家喜爱。...同时,不断迭代和完善游戏,使其更加完善,也将锻炼你的软件工程实践能力。
贪吃蛇游戏是一款经典的计算机游戏,它通过简单的规则和丰富的策略性吸引了众多玩家。在C语言环境下编写贪吃蛇程序,不仅可以锻炼编程基础,还...在实践中不断迭代和完善,你将能够编写出更加复杂和完善的贪吃蛇游戏。
这个是在appinventor 官方广州服务器制作的简易贪吃蛇,只用了球形精灵和画布为主要插件,等待完善,这个是apk安卓应用,不包括aia源码,适用于各位下载试用,所以不需要积分(如果要积分的话,就是系统修改的了),...
近年来,随着通信技术的高速发展,网络技术和移动终端性能的不断提高与完善,以及手机、电脑的高普及率,使得人们对终端系统应用开发的需求在不端增大,贪吃蛇游戏是受广大人群喜爱的一款的电脑单机游戏,在这个游戏...