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

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

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

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

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

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

前言

Java最初被命名为Oak,目标设定在家用电器等小型系统的编程语言,来解决诸如电视机、、闹钟、烤面包机等家用电器的控制和通讯问题。

由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。

就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景。

于是改造了Oak,以“Java”的名称正式发布。

  Java编程语言的风格十分接近C、C++语言。

Java是一个纯的面向对象的程序设计语言,它继承了C++语言面向对象技术的核心。

Java舍弃了C++语言中容易引起错误的指针(以引用取代)、运算符重载(operatoroverloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的存空间,使得程序员不用再为存管理而担忧。

在JavaSE1.5版本中,Java又引入了泛型编程(GenericProgramming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。

  Java不同于一般的编译执行计算机语言和解释执行计算机语言。

它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。

从而实现了“一次编译、到处执行”的跨平台特性。

不过,每次的编译执行需要消耗一定的时间,这同时也在一定程度上降低了Java程序的运行效率。

但在J2SE1.4.2发布后,Java的执行速度有了大幅提升。

  与传统程序不同,Sun公司在推出Java之际就将其作为一种开放的技术。

全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。

“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。

这与微软公司所倡导的注重精英和封闭式的模式完全不同。

  Sun公司对Java编程语言的解释是:

Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。

正文

1.1课程设计目的

《JAVA程序设计》是计算机相关专业的必修专业基础课程,其实践性、应用性很强。

实践教学环节是必不可少的一个重要环节。

本课程的程序设计专题实际是计算机相关专业学生学习完《JAVA程序设计》课程后,进行的一次全面的综合训练,JAVA程序设计的设计目的是加深对理论教学容的理解和掌握,使学生较系统地掌握程序设计及其在网络开发中的广泛应用,基本方法及技巧,为学生综合运用所学知识,利用软件工程为基础进行软件开发、并在实践应用方面打下一定基础。

2.1工程概况

2.1.1案例提出及工程用时

经过两天在图书馆以及网络上查阅的资料,然后提出这次课程设计的目标《贪吃蛇游戏》的设计。

然后接下来就是查阅更多的资料,制定接下来的详细计划,最终计划用两周的时间完成此次课程设计提出的案例。

2.1.2开发环境

硬件环境:

CPU:

IntelPentium(R)4

主频:

2.40GHz

存:

256MB

软件环境:

操作系统:

WindowsXP

编程环境:

JDK1.6

开发工具:

Eclipsejdk

3.1设计方案论证

3.1.1设计思路

贪吃蛇游戏设计与实现,主要分为以下二个模块:

游戏主界面模块和游戏控制模块。

在此只实现游戏的游戏主界面模块、游戏控制模块。

并且只是实现移动速度、暂停、重新开始等功能。

游戏主界面模块:

游戏的主界面是进入游戏后,能够给玩家第一感官的部分,主要包括游戏图形区域界面、游戏的速度选择更新界面、新生方块的预览、暂停游戏按钮、重新开始游戏按钮。

从很大程度上决定了玩家对游戏的兴趣问题,因此,游戏的主界面应该力求美观,爽心悦目。

游戏控制模块:

这个模块是游戏的中心环节,主要完成控制游戏的开始、暂停、重新开始等功能。

为了能够给玩家一个很好的游戏环境,这部分应该做到易懂、易操作。

本设计所开发的是基于Java的一个贪吃蛇游戏软件,主要实现游戏的速度控制、游戏的暂停、游戏的退出等功能,分为:

游戏主界面模块、游戏控制模块以二个模块。

3.1.2程序概述

本程序是一个利用Java应用软件制作的贪食蛇小游戏。

在游戏过程中,用户通过点击小键盘区的方向键来控制蛇的运行方向;游戏运行过程中,如果想暂停,只需要按F3键即可。

重新开始游戏的按键为F2。

当蛇没有吃到食物且碰到墙壁或自己的身体时游戏结束。

本程序的另一个功能是在程序运行窗口的左上角显示,用户在游戏过程中的移动和长度。

3.1.3程序流程图

本次游戏设计的处理流程如图1所示。

3.1.4总设计模块的划分

根据游戏需求中游戏所要实现的功能,整个游戏分为二个模块进行具体的设计,如图2所示。

游戏控制模块的主要框架如图3所示。

游戏暂停控制:

点击“F3”按钮,游戏暂停;再单击,游戏继续。

游戏重新开始控制:

点击“F2”键后,点击确定,即游戏重新开始。

游戏退出控制:

点击“F4”键好,点击确定,退出游戏界面。

3.1.5类、方法、属性说明

(1)成员变量

表1主要成员变量(属性)

成员变量描述

变量类型

名称

文件菜单中子菜单“新建”

JMenuItem

mFile_New

编辑菜单中子菜单“撤消”

JMenuItem

mEdit_Undo

格式菜单中子菜单“颜色”

JMenu

formatMenu_Color

帮助菜单中子菜单“帮助主题”

MenuItem

mHelp_HelpTopics

(2)方法

表2主要方法

方法名

功能

备注

Notepad4()

描述记事本

Text.setBackground(Color.black)

设置编辑区默认背景色

Text.setForeground(Color.black)

设置编辑区默认前景色

4.1设计结果与分析

本程序在运行后,能够正常的相应按键事件。

由于程序的主要部分已经集成为一个对象SnakeModel,所以利用键盘就可以实现操作。

蛇前行的过程中,可以任意向其左或右方向改变方向。

点击F3键后游戏就暂停了。

点击F2键游戏重新开始。

点击F4游戏退出。

运行结果如下图4所示:

图4程序运行图

当蛇没有吃到食物且碰到边界或碰撞到自己的身体时,游戏结束。

如果想重新开始即点击“确定”后按F2键,运行结果如下图5所示:

图5重新开始图

4.1.1程序异常处理

在蛇的运行线程过程中,当蛇撞到墙或自己的身体时,将抛出一个Exception类的异常对象,然后使用try-catch去捕捉这个异常,

异常的处理如下:

try{

Thread.sleep(timeInterval);}

catch(Exceptione)

{

break;

}

心得体会

通过这次课程设计,我对这学期所学的JAVA语言程序设计有一个更深刻的了解,将所学的知识应用于实践,由于所学知识有限,为了使游戏能够实现自己预先的构想,我通过上网和去图书馆找程序,比较好的流程图及功能模块,不断阅读修改代码使程序达到预期所要实现的目标,完成课程设计后,可以感觉到自己对Java程序的又有了新的认识。

总之,通过本次的课程设计,使我平时学到的理论知识得到了很好地升华,理论与实际得到一次很好的结合,为我今后参加工作打下了坚实的基础,使我受益匪浅。

参考文献

[1]文靖编著.Java程序设计基础与上机指导.:

清华大学,2006

[2]毅主编.跨平台程序设计语言——Java.:

电子科技大学,

[3]王路群.Java高级程序设计.:

中国水利水电,2006

[4]雍俊海编著.Java程序设计习题集.:

清华大学,2006

[5]朱福喜编著.Java语言习题与解析.:

清华大学,2006

[6]吴其庆编著.Java程序设计实例教程.:

冶金工业,2006

程序代码:

importjava.awt.*;

importjavax.swing.*;

importjava.util.*;

importjava.awt.event.*;

publicclassSheextendsJFrameimplementsActionListener,WindowListener{

JLabelbt1;

JLabelbt2;

MyPaintmp;

JMenuItemkaishi;

JMenuItemzanting;

JMenuItemtuichu;

JRadioButtonchu;

JRadioButtonzhong;

JRadioButtongao;

JRadioButtonchao;

JMenuItemguanyu;

Fontf;

publicShe(){

f=newFont("宋体",Font.PLAIN,12);

mp=newMyPaint();

mp.setShe(this);

JMenuBarcaidan=newJMenuBar();

JMenushezhi=newJMenu("设置");

shezhi.setFont(f);

JMenunandu=newJMenu("难度");

nandu.setFont(f);

JMenubangzhu=newJMenu("帮助");

bangzhu.setFont(f);

caidan.add(shezhi);

caidan.add(nandu);

caidan.add(bangzhu);

kaishi=newJMenuItem("开始游戏F2");

kaishi.setFont(f);

kaishi.addActionListener(this);

zanting=newJMenuItem("暂停/继续F3");

zanting.setFont(f);

zanting.addActionListener(this);

tuichu=newJMenuItem("退出F4");

tuichu.setFont(f);

tuichu.addActionListener(this);

chu=newJRadioButton("初级,最快速度195",true);

chu.setFont(f);

chu.addActionListener(this);

zhong=newJRadioButton("中级,最快速度225");

zhong.setFont(f);

zhong.addActionListener(this);

gao=newJRadioButton("高级,最快速度255");

gao.setFont(f);

gao.addActionListener(this);

chao=newJRadioButton("超级,最快速度275");

chao.setFont(f);

chao.addActionListener(this);

ButtonGroupbg=newButtonGroup();

bg.add(chu);

bg.add(zhong);

bg.add(gao);

bg.add(chao);

nandu.add(chu);

nandu.add(zhong);

nandu.add(gao);

nandu.add(chao);

guanyu=newJMenuItem("关于");

guanyu.setFont(f);

guanyu.addActionListener(this);

shezhi.add(kaishi);

shezhi.add(zanting);

shezhi.add(tuichu);

bangzhu.add(guanyu);

 

bt1=newJLabel(" 长度:

0");

bt1.setFont(f);

bt2=newJLabel("移动:

5");

bt2.setFont(f);

JPanelp=newJPanel();

p.setLayout(newGridLayout(1,2));

p.add(bt1);

p.add(bt2);

this.addWindowListener(this);//添加窗体监听器

this.setJMenuBar(caidan);

this.add(p,BorderLayout.NORTH);

this.add(mp);

this.add(newJLabel(" "),BorderLayout.WEST);

this.setSize(335,385);

this.setResizable(false);

this.setLocation(300,150);

this.setTitle("MyPaint");

this.setVisible(true);

}

publicvoidsetDS(inta,intb){

bt1.setText(" 长度:

"+a);

bt2.setText("移动:

"+b);

}

publicvoidsetChu(){

chu.setSelected(true);

mp.setSD(300,110);

this.setDS(0,305-300);

chu.setEnabled(true);

zhong.setEnabled(true);

gao.setEnabled(true);

chao.setEnabled(true);

}

publicvoidsetNanDu(){

chu.setEnabled(false);

zhong.setEnabled(false);

gao.setEnabled(false);

chao.setEnabled(false);

}

publicvoidactionPerformed(ActionEvente){

if(e.getSource()==zanting){

mp.setZanTing();

}

elseif(e.getSource()==kaishi){

mp.setKaiShi();

}

elseif(e.getSource()==tuichu){

mp.setTuiChu();

}

elseif(e.getSource()==guanyu){

JLabelgy=newJLabel("小游戏贪吃蛇V1.0");

gy.setFont(f);

JOptionPane.showMessageDialog(this,gy);

}

elseif(e.getSource()==chu){

mp.setSD(300,110);

this.setDS(0,305-300);

}

elseif(e.getSource()==zhong){

mp.setSD(250,80);

this.setDS(0,305-250);

}

elseif(e.getSource()==gao){

mp.setSD(200,50);

this.setDS(0,305-200);

}

elseif(e.getSource()==chao){

mp.setSD(150,30);

this.setDS(0,305-150);

}

}

publicstaticvoidmain(String[]args){

newShe();

}

/**

*MethodwindowOpened

*

*

*parame

*

*/

publicvoidwindowOpened(WindowEvente){

//TODO:

Addyourcodehere

}

publicvoidwindowClosing(WindowEvente){

System.exit(0);

}

publicvoidwindowClosed(WindowEvente){

//TODO:

Addyourcodehere

}

publicvoidwindowIconified(WindowEvente){

//TODO:

Addyourcodehere

}

publicvoidwindowDeiconified(WindowEvente){

//TODO:

Addyourcodehere

}

publicvoidwindowActivated(WindowEvente){

//TODO:

Addyourcodehere

}

publicvoidwindowDeactivated(WindowEvente){

//TODO:

Addyourcodehere

}

}

classMyPaintextendsJPanelimplementsRunnable,KeyListener,FocusListener{

Shes;

Fontf=newFont("宋体",Font.PLAIN,12);

intx=150;

inty=0;

Randomr=newRandom();

intsjx=r.nextInt(300)/10*10;

intsjy=r.nextInt(300)/10*10;

intfx=2;

intsw=0;

intsd=300;

intcs=0;

intd=150;

String[]zx=newString[1000];

booleanzanting=false;

booleanzanting1=false;

booleansiwang=false;

booleanshenti=false;

publicMyPaint(){

Threadt=newThread(this);

t.start();

this.addKeyListener(this);

this.setFocusable(true);

this.addFocusListener(this);

}

publicvoidsetShe(Shess){

s=ss;

}

publicvoidsetZanTing(){

if(zanting){

zanting=false;

}

else{

zanting=true;

}

}

publicvoidsetKaiShi(){

JLabelks=newJLabel("是否重新开始?

");

ks.setFont(f);

inta=JOptionPane.showConfirmDialog(s,ks);

if(a==0){

x=150;

y=0;

sjx=r.nextInt(300)/10*10;

sjy=r.nextInt(300)/10*10;

fx=2;

sw=0;

sd=300;

cs=0;

zanting=false;

siwang=false;

shenti=false;

s.setChu();

s.setDS(sw,305-sd);

}

}

publicvoidsetTuiChu(){

JLabeltc=newJLabel("确定退出吗?

");

tc.setFont(f);

inta=JOptionPane.showConfirmDialog(s,tc);

if(a==0){

s.dispose();

System.exit(0);

}

}

publicvoidsetSD(inta,intb){

sd=a;

d=b;

}

publicvoidpaint(Graphicsg){

zx[cs]=x+"/"+y;

super.paint(g);

g.setColor(Color.BLACK);

g.drawRect(0,0,300,300);

g.setColor(Color.BLACK);

g.fillRect(sjx,sjy,10,10);

g.setColor(Color.BLUE);

g.fillRect(x,y,10,10);

g.setColor(Color.RED);

for(inti=1;i<=sw;i++){

intj=cs-i;

if(j<0){

j=cs-i+999+1;

}

String[]s=zx[j].split("/");

if(x==Integer.parseInt(s[0])&&y==Integer.parseInt(s[1])){//蛇撞到自己身上了

siwang=true;

shenti=true;

}

if(sjx==Integer.parseInt(s[0])&&sjy==Integer.parseInt(s[1])){//食物在蛇身体上

g.setColor(Color.BLACK);

g.fillRect(sjx,sjy,10,10);

g.setColor(Color.RED);

continue;

}

g.fillRect(Integer.parseInt(s[0]),Integer.parseInt(s[1]),10,10);

}

}

publicvoidrun(){

while(true){

cs++;

if(cs==1000){

cs=0;

}

switch(fx){

case1:

y-=10;//上

break;

case2:

y+=10;//下

break;

case3:

x-=10;//左

break;

case4:

x+=10;//右

break;

}

this.repaint();

if(x==sjx&&y==sjy){

sjx=r.nextInt(300)/10*10;

sjy=r.nextInt(300)/10*10;

sw++;

if(sw==1){

s.setNanDu();

}

if(sd<=d)

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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