项目效果展示和介绍

运行效果图如下: 

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇课程设计报告java

但是因为Java大作业做贪吃蛇的同学实在太多了,要是也交个贪吃蛇,肯定有和别的同学撞车的风险,而且老师也肯定看腻了,因此我就根据原先的贪吃蛇项目进行魔改,以蜘蛛侠和毒液作为项目的背景,把原先的贪吃蛇作为毒液~ 

先介绍一下游戏规则:

游戏开始后,我们操纵的是毒液(就是图上的贪吃蛇),右下角的蜘蛛侠会根据毒液的位置,向毒液所在的方向移动(具体的逻辑就是根据毒液的头部所在的位置,朝该方向移动),如果蜘蛛侠碰到了毒液的身体,游戏结束(当然如果贪吃蛇碰到了自己的身体也游戏结束,和原先的贪吃蛇规则一样),这里有三种食物,吃掉食物可能会造成分数score和身体长度的变化,第一种食物(加分加长度),第二种食物(减分加长度,不要吃),第三种食物(加分减长度,多吃),毕竟长度越短越不容易被抓嘛,当然这些规则可以自己改。随着分数的增加,界面会出现提示,提示蜘蛛侠加速了,这里蜘蛛侠会根据分数的增多一直进行加速。 另外这个项目还带上了背景音乐:)

分数到1000,蜘蛛侠加速了:) 

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_java_02

被蜘蛛侠抓到了,游戏结束了 :( 

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_java_03

另外为了方便直接运行,我还把项目打成了jar包的形式,只要在命令行运行即可啦~

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇_04

下面是实验报告节选:

1.系统总体设计

一、需求分析

  1. 三种不同的食物在被毒液吃掉后会在新位置随机生成。
  2. 毒液在吃到不同的食物后,长度和所得分数会发生相应的改变。
  3. 对于毒液,通过方向键实现移动方向的改变,同时,头部造型也随方向的改变而做出相应的调整。
  4. 蜘蛛侠会根据毒液的移动方向,自动做出移动方向的调整,去追赶毒液。
  5. 毒液分数超过一定值时,蜘蛛侠移动速度加快,并且在游戏区给出相应的警告。
  6. 毒液被蜘蛛侠抓到或者毒液的头部触碰了身体时,游戏结束。
  7. 添加了游戏背景音乐,并且在游戏过程中可以循环播放。
  8. 添加了控制按钮(空格),可以实现对游戏及音乐的暂停,以及在游戏结束后的重新开始。
  9. 在标题界面画出了三种不同食物对应的属性和提示,并实时更新毒液的长度和游戏分数。
  10. 打包成jar文件,方便使用。

二、概要设计

  1. 编写一个MPanel类,将对应功能的实现都放入这个类中。
  2. 通过该类的构造函数,实现游戏初始化,图片和音乐的加载。
  3. 在该类中通过方法paintComponent(Graphics g)来调用该类中的所有paint方法,进行绘图。
  4. 在该类中通过方法keyPressed(KeyEvent e)来调用该类中的所有Response方法,进行对键盘的监听和响应。
  5. 在该类中通过方法actionPerformed(ActionEvent e)来调用该类中的所有Movement方法和judgeFailed方法,来实现内容的移动和游戏结束判断。

2.功能模块划分

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_游戏_05

 3.系统详细设计

(1)类的设计及类继承关系

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇课程设计报告java_06

(2)系统流程图

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇_07

(3)方法调用关系

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇_08

4.各个功能模块的实现方法描述

贪吃蛇课程设计报告java 贪吃蛇游戏java设计报告_贪吃蛇课程设计报告java_09

代码风格如下:

//对空格进行响应 实现暂停和重新开始
	private void spaceResponse(KeyEvent e) {
		int keyCode=e.getExtendedKeyCode();//获取所敲的键盘对应的数字
		if(keyCode==KeyEvent.VK_SPACE) {//如果敲击的是空格键
			if(isFailed) {//游戏结束后再次敲击空格 重新开始
				isFailed=false;//游戏重新开始时将isFailed置false
				initSnake();
			}
			else {
				isStarted=!isStarted;//取反状态 开始-暂停 暂停-开始
			}
		
			repaint(); //修改isStarted参数后重新调用方法
						//重新画一遍 使得效果展示出来
			
			if(isStarted) {//在空格响应事件中实现声音的播放和暂停
				playBGM();
			}else {
				stopBGM();
			}
		}
	}