基于java的贪吃蛇游戏设计课设.docx

上传人:b****4 文档编号:12099368 上传时间:2023-04-17 格式:DOCX 页数:29 大小:170.95KB
下载 相关 举报
基于java的贪吃蛇游戏设计课设.docx_第1页
第1页 / 共29页
基于java的贪吃蛇游戏设计课设.docx_第2页
第2页 / 共29页
基于java的贪吃蛇游戏设计课设.docx_第3页
第3页 / 共29页
基于java的贪吃蛇游戏设计课设.docx_第4页
第4页 / 共29页
基于java的贪吃蛇游戏设计课设.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

基于java的贪吃蛇游戏设计课设.docx

《基于java的贪吃蛇游戏设计课设.docx》由会员分享,可在线阅读,更多相关《基于java的贪吃蛇游戏设计课设.docx(29页珍藏版)》请在冰豆网上搜索。

基于java的贪吃蛇游戏设计课设.docx

基于java的贪吃蛇游戏设计课设

成绩评定表

学生姓名

Xxx

班级学号

Xxxxxxx

专业

通信工程

课程设计题目

基于Java的贪吃蛇游戏设计

 

 

组长签字:

成绩

 

日期

2014年12月5日

课程设计任务书

学院

信息科学与工程学院

专业

通信工程

学生姓名

Xxx

班级学号

Xxxxx

课程设计题目

基于Java的贪吃蛇游戏设计

实践教学要求与任务:

1、熟悉Java的编程

2、熟悉Java的运行环境

3、用Java语言实现贪吃蛇游戏的设计

4、运行、调试游戏程序

5、对游戏程序进行结果验证及分析

工作计划与进度安排:

12月1日熟悉设计任务、查阅资料、进行原理分析及可行性论证

12月2日~3日用Java语言实现贪吃蛇游戏的设计

12月4日验收、答辩、提交报告

 

指导教师:

2014年12月4日

专业负责人:

2014年12月4日

学院教学副院长:

2014年12月4日

 

1.Java语言的特点

1.1Java简介

SunMicrosystems公司在推出Java语言的同时,推出了一套开发工具JDK。

Sun提供的基于字符模式的Java开发工具包JDK:

Java开发工具(JDK)是许多Java专家最初使用的开发环境。

Java是平台无关的语言是指用Java写的应用程序不用修改就可在不同的软硬件平台上运行。

Java源程序编写借助于记事本,Editpuls,UltraEdit等第三方编辑工具。

所有的Java文件编辑、编译、调试、解释运行都是通过使用字符命令来执行操作。

JDK由一个标准类库和一组建立,测试及建立文档的Java实用程序组成。

其核心Java

API是一些预定义的类库,开发人员需要用这些类来访问Java语言的功能。

JDK是整个Java的核心,包括了Java运行环境(JavaRuntimeEnvirnment),一堆Java工具和Java基础的类库(rt.jar)。

不论什么Java应用服务器实质都是内置了某个版本的JDK。

因此掌握JDK是学好Java的第一步。

JDK里面是java类库和java的语言规范,它提供的是无论你用何种开发软件写java程序都必须用到的类库和java语言规范.没有jdk,你的java程序根本就不能用。

最主流的JDK是Sun公司发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JDK,例如IBM公司开发的JDK,BEA公司的Jrocket,还有GNU组织开发的JDK等等。

其中IBM的JDK包含的JVM(JavaVirtualMachine)运行效率要比SunJDK包含的JVM高出许多。

而专门运行在x86平台的Jrocket在服务端运行效率也要比SunJDK好很多。

但不管怎么说,我们还是需要先把SunJDK掌握好。

1.2.应用环境

(1).操作系统:

Solaris、WindowsNT、Windows95等

(2).应用软件:

jdk1.5

2.需求分析

2.1游戏开发的可行性

游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。

游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦”。

因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。

2.2设计目的

综合运用在校期间所学理论知识和技能,设计开发贪吃蛇游戏,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力。

2.3游戏需求

给出1条小蛇和随机出1个食物当小蛇吃到食物时就加分。

2.3.1游戏界面需求

良好的用户界面,有分数显示。

有存取档功能,并且可以暂停,还有“英雄榜”记录分数排名情况,并且可调节小蛇运动速度。

2.3.2游戏形状(方块)需求

良好的方块形状设计,绘制小蛇和食物,小蛇由几个方块组成,食物由1个方块组成。

2.3.3键盘处理事件

小蛇可通过键盘方向键(上、下、左、右键)进行向上、向下、向左、向右移动。

2.3.4显示需求

当小蛇吃掉几个食物后会变长,并且吃完食物时食物会消失,并立即随机生成1个新的食物。

 

2.3.5接口控制

本软件需求通过键盘进行操作,在Windows的操作系统下,利用键盘的上、下、左、右键对小蛇进行移动操作,要使用键盘的接口事件。

3.功能设计及源程序的主要部分

3.1游戏流程图

图1游戏流程图

 

3.2功能的实现,类的实现及类层次

3.2.1游戏界面

publicSnakeFrame(){

setSize(width,height);//设置窗体大小

setTitle("贪吃蛇");//标题

SnakePanelpanel=newSnakePanel();//游戏面板

add(panel);//将面板添加到窗体中

setLocation(260,160);//设置窗体位置

setVisible(true);

setResizable(false);//禁用窗体最大化

}

 

3.2.2功能按钮

publicSnakePanel(){//构造函数

//添加功能按钮

setLayout(null);

add(startGame);

add(stopGame);

add(saveGame);

add(listGame);

add(newGame);

add(exitGame);

//设置位置

startGame.setBounds(402,50,80,40);

stopGame.setBounds(402,100,80,40);

saveGame.setBounds(402,150,80,40);

listGame.setBounds(402,200,80,40);

newGame.setBounds(402,250,80,40);

exitGame.setBounds(402,300,80,40);

//添加监视器

ButtonListenerbtnListener=newButtonListener();

startGame.addActionListener(btnListener);

stopGame.addActionListener(btnListener);

saveGame.addActionListener(btnListener);

listGame.addActionListener(btnListener);

newGame.addActionListener(btnListener);

exitGame.addActionListener(btnListener);

//取消所有Button的焦点

startGame.setFocusable(false);

stopGame.setFocusable(false);

saveGame.setFocusable(false);

listGame.setFocusable(false);

newGame.setFocusable(false);

//速度

Stringspeed[]={"1","2","3","4","5","预设"};

combspeed=newJComboBox(speed);

combspeed.setBorder(BorderFactory.createTitledBorder("速度"));

add(combspeed);//添加组合框

combspeed.setBounds(402,340,80,46);

comboBoxListenercomblistener=newcomboBoxListener();

combspeed.addActionListener(comblistener);//添加监视器

combspeed.setFocusable(false);//取消焦点

initGame();//初始化游戏

addKeyListener(newListener());//添加键盘按键监视器

setFocusable(true);//将焦点设置在当前面板上以便通过键盘控制游戏

thiswin=this;

}

 

3.2.3键盘监视器

classListenerimplementsKeyListener{

publicvoidkeyPressed(KeyEvente){

intkey=e.getKeyCode();//获得键码

if(key==KeyEvent.VK_LEFT&&direction!

=2)

direction=0;//左

elseif(key==KeyEvent.VK_UP&&direction!

=3)

direction=1;//上

elseif(key==KeyEvent.VK_RIGHT&&direction!

=0)

direction=2;//右

elseif(key==KeyEvent.VK_DOWN&&direction!

=1)

direction=3;//下

}

publicvoidkeyReleased(KeyEvente){

}

@Override

publicvoidkeyTyped(KeyEvente){

}

}publicvoidkeyPressed(KeyEvente){

intkey=e.getKeyCode();//获得键码

if(key==KeyEvent.VK_LEFT&&direction!

=2)

direction=0;//左

elseif(key==KeyEvent.VK_UP&&direction!

=3)

direction=1;//上

elseif(key==KeyEvent.VK_RIGHT&&direction!

=0)

direction=2;//右

elseif(key==KeyEvent.VK_DOWN&&direction!

=1)

direction=3;//下

}

3.2.4蛇和食物的变化

3.2.4.1蛇和食物的产生:

publicvoiddrawSnake(Graphicsg){

Graphics2Dg2d=(Graphics2D)g;

for(inti=0;i

for(intj=0;j

if(arrayList[i][j]==1){//蛇身

g.setColor(frontcolor);//蛇身颜色

}elseif(arrayList[i][j]==2){//蛇头

g.setColor(Color.RED);//蛇头颜色

}elseif(arrayList[i][j]==3){//食物

g.setColor(foodcolor);//食物颜色

}

if(arrayList[i][j]!

=0){

intcurx=border_left+i*10;

intcury=border_top+j*10;

g2d.draw(newRectangle2D.Double(curx,cury,8,8));

}

}

}

}

 

3.2.4.2小蛇移动和吃掉食物:

publicbooleanMove(){//移动

if(direction==0)

x-=1;//左

elseif(direction==1)

y-=1;//上

elseif(direction==2)

x+=1;//右

elseif(direction==3)

y+=1;//下

//向前移动一步

if(GameOver()){//游戏结束

clock.stop();

gameover=true;

flag=false;//不再产生新的豆豆

if(x<0||x>=arrayList.length||y<0||y>=arrayList[0].length){

}else{

arrayList[x][y]=2;//此时蛇头位置

}

intheadx=snakeBody.get(0).x;//头部坐标

intheady=snakeBody.get(0).y;

arrayList[headx][heady]=1;//蛇头变蛇身

inttailx=snakeBody.get(snakeBody.size()-1).x;//尾部坐标

inttaily=snakeBody.get(snakeBody.size()-1).y;

arrayList[tailx][taily]=0;//修改尾部

returnfalse;//游戏结束

}

arrayList[x][y]=2;//此时蛇头位置

intheadx=snakeBody.get(0).x;//头部坐标

intheady=snakeBody.get(0).y;

arrayList[headx][heady]=1;//蛇头变蛇身

snakeBody.add(0,newPoint(x,y));//添加新的头部

inttailx=snakeBody.get(snakeBody.size()-1).x;//尾部坐标

inttaily=snakeBody.get(snakeBody.size()-1).y;

if(x==foodx&&y==foody){//吃掉了豆豆

flag=true;//可以产生新的豆豆

score+=time;//总分数

time=30;//新豆豆的分值

}else{

arrayList[tailx][taily]=0;//修改尾部

snakeBody.remove(snakeBody.size()-1);//删除旧的尾部

}

returntrue;

}

 

3.2.5记录游戏的功能

3.2.5.1判断是否可进入记录:

publicbooleanenableShow(){

if(score==0){

returnfalse;

}

if(!

newFile("Data").exists()){//Data目录不存在

returntrue;

}

if(!

newFile("Data","list.snake").exists()){//list.snake文件不存在

returntrue;

}

Filefile=newFile("Data","list.snake");

try{

BufferedReaderiostream=newBufferedReader(newFileReader(file));

Stringstrline=iostream.readLine();

if(strline==null){//空文件

returntrue;

}

introw=0;

while(strline!

=null){

Stringstr[]=strline.split("#");//信息以#分隔成name和score两部分

if(str.length!

=2){//格式错误时删除文件

iostream.close();//关闭流否则无法删除文件

file.delete();//删除文件

returntrue;

}

intgain=Integer.parseInt(str[1]);

if(score>=gain){

returntrue;

}

strline=iostream.readLine();//读取下一行

row++;

}

if(row<=9){

returntrue;

}

iostream.close();//关闭流

}catch(FileNotFoundExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}catch(IOExceptione){

//TODOAuto-generatedcatchblock

e.printStackTrace();

}

returnfalse;

}

3.2.5.2保存数据到文件:

publicvoidsaveDataToFile(Stringfilename){

if(gameover){//游戏已结束无法保存

return;

}

Filefile=newFile("Data",filename);

try{

BufferedWriterout=newBufferedWriter(newFileWriter(file));

//当前矩阵

out.write("Matrix\n");

for(inti=0;i

for(intj=0;j

out.write(arrayList[i][j]+"#");

}

out.write("\n");//换行

}

//snakeBody

out.write("snakeBody\n");

for(inti=0;i

Stringstr=String.valueOf(snakeBody.get(i).x);

str+=","+String.valueOf(snakeBody.get(i).y);

out.write(str+"\n");

}

//头部坐标

out.write("head\n");

out.write(x+","+y+"\n");

//当前食物坐标

out.write("food\n");

out.write(foodx+","+foody+"\n");

//是否可产生新的食物

out.write("flag\n");

out.write(String.valueOf(flag)+"\n");

//移动方向

out.write("direction\n");

out.write(String.valueOf(direction)+"\n");

//当前总分

out.write("score\n");

out.write(String.valueOf(score)+"\n");

//当前食物剩余分值

out.write("time\n");

out.write(String.valueOf(time)+"\n");

//关闭流

out.close();

}catch(IOExceptione){

e.printStackTrace();

}catch(Exceptionee){

}

}

3.2.5.3从文件中读取数据:

publicvoidreadDataFromFile(Stringfilename){

for(inti=0;i

for(intj=0;j

arrayList[i][j]=0;//全部初始化为空

}

}

snakeBody.clear();

Filefile=newFile("Data",filename);

try{

BufferedReaderin=newBufferedReader(newFileReader(file));

Stringstr=in.readLine();

if(!

str.equals("Matrix")){

JOptionPane.showMessageDialog(this,"文件格式错误:

无法读取");

return;

}

//读取矩阵元素

str=in.readLine();

inti=0;

while(str!

=null){

Stringdata[]=str.split("#");

for(intj=0;j

arrayList[i][j]=Integer.parseInt(data[j]);

}

i++;//下一行

str=in.readLine();

if(str.equals("snakeBody")){

break;//跳出while循环

}

}

//读取snakeBody数据

str=in.readLine();

while(str!

=null){

Stringdata[]=str.split(",");

intx=Integer.parseInt(data[0]);

inty=Integer.parseInt(data[1]);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1