JAVA开放性实验报告贪吃蛇
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JA V A程序设计开放性实验报告
专业:计算机科学与技术
班级:2012级2班
学号:
姓名:
实验2贪吃蛇游戏设计(4学时)
1.实验内容
(1)创建软件主窗体和相关控制菜单;在窗体中以图形模拟蛇的形状,使用键盘控制图
形在窗体中任意移动,模拟贪吃蛇的行为.
(2)在窗体中可以设置障碍或奖励物品,以达到游戏的娱乐性。
2.预习内容
Java GUI编程;鼠标和键盘的事件处理;Java多媒体编程。
3.实验类型
综合性
4.实验目的
(1)了解JavaGUI编程特别是窗体,菜单;熟悉Java的事件委托处理机制,能完成鼠标和键盘的事件处理;
(2)熟悉Java中的多媒体技术如:音频文件的播放控制,游戏中各种事件的音效添加。
熟悉Java中的绘图操作,可以使用绘图函数进行图形的绘制和重绘等基本操
作;
(3)熟悉模块的划分及游戏控制类的编写,了解相关的游戏设计和实现模式;
(4)设计可视化界面,添加其他必要组件,对窗体进行相应的键盘事件处理,使蛇能移动,依据实验内容结合自己的设计想法,实现模拟贪吃蛇的游戏效果。
5.实验要求
依据实验内容,编写相关类,实现所需软件功能。
6.实验过程(分析设计、源文件、执行结果)
代码如下:
1、Node类
public class Node {
private int x;
private int y;
public Node(){
}
public Node(int x,int y){
this.x=x;
this.y=y; }
public int getX(){
return x;
}
public void setX(int x){ this.x=x;
}
public int getY(){
return y;
}
public void setY(int y){
this.y=y;
}
public String toString(){//方便类型转换
//括号里不是String类型通过toString来转换,不然会输出一个地址
return"("+x+","+y+")";
}
@Override
//伪代码可以理解为注释,重写:下面的方法名是否在父类中存在,如果没有//的话会报错。
//
public int hashCode(){//假设Node 是list集合里面,只有把Node节点对象 //放在set 集合时候写hashCode();
final int prime = 31;
int result = 1;
result=prime*result+x;
result=prime*result+y;
return result;
}
@Override
//比较Node对象是否在同一坐标都要写上equals方法
public boolean equals(Object obj){
if(this==obj){
return true;
}
if(this==null){
return false;
}
if(getClass()!=obj.getClass())
return false;
Node other=(Node)obj;
if(x!=other.x){
return false;
}
if(y!=other.y){
return false;
}
return true;
}
}
2、Worm 类
import java.util.LinkedList;
public class Worm {
private LinkedList
int dir;
public static final int UP = -1;
public static final int DOWN = 1;
public static final int LEFT = -10;
public static final int RIGHT = 10;
public static final int ROWS = 400;//ROWS行。宽度范围,
public static final int COLS = 500;//COLS列。长度范围
public Worm() {
getWorm().add(new Node(90, 90));//第90行90列,蛇扩大10倍
getWorm().add(new Node(80, 90));
getWorm().add(new Node(70, 90));
getWorm().add(new Node(60, 90));
getWorm().add(new Node(50, 90));
dir = RIGHT;
}
public void step() {// 走一步
Node
head=getWorm().get(0);// 找到头节点
int x = head.getX() + dir / 10 * 10;//X,Y横坐标与纵坐标
int y = head.getY() + dir % 10 * 10;
if (x > 0 && x < Worm.COLS && y > 0 && y < Worm.ROWS - 30