JAVA课程设计打砖块含代码.docx
《JAVA课程设计打砖块含代码.docx》由会员分享,可在线阅读,更多相关《JAVA课程设计打砖块含代码.docx(70页珍藏版)》请在冰点文库上搜索。
JAVA课程设计打砖块含代码
Java程序课程设计任务书
一、主要内容
打砖块游戏是一种动作电子游戏的名称。
玩家操作一根萤幕上水平的“棒子”,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。
球碰到砖块、棒子与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。
二、具体要求
通过图形用户界面(GraphicsUserInterface,GUI)和线程,使用户和程序之间可以方便地进行交互。
运用Swing组件,编写小应用程序游戏,加深对Java语言的理解,深入地了解图形用户界面的设计,更加熟练地运用编程软件。
功能要求:
(1)游戏运行需键盘的操作;
(2)游戏可统计分数;
(3)球落到底下会失去一颗,按ENTER可重新开始。
开发工具:
JCreater软件;
开发技术:
J2ME。
三、进度安排
12月28日:
课程设计选题,查找参考资料
12月29日:
完成打砖块游戏程序设计分析
12月30日~1月3日:
完成程序代码的编写
1月4日~1月5日:
游戏测试与完善
1月6日~1月7日:
完成课程设计报告,准备答辩
四、主要参考文献
[1](美)埃克尔著陈昊鹏,饶若楠等译.Java编程思想[J].机械工业出版社,2005
[2](美)GaryJ.Bronson著张珑刘雅文译.Java编程原理[J].清华大学出版社,2004
[3](美)MichaelMorrison著徐刚,于健,薛雷译.游戏编程入门[J].人民邮电出版社,2005.9
[4](美)WendyStahler著冯宝坤,曹英译.游戏编程中的数理应用[J].红旗出版社,2005
[5](美)克罗夫特(DavidWallaceCroft)著彭晖译.Java游戏高级编程[J].清华大学出版社,2005
[6](美)DavidBrackeen著邱仲潘译.Java游戏编程[J].科学出版社,2004
[7]聂庆亮编著.Java应用开发指南[J].清华大学出版社,2010
[8]耿祥义,张跃平编著.Java面向对象程序设计[J].清华大学出版社,2010
[9]杨绍方编著.Java编程实用技术与案例[J].清华大学出版社,2000.11
[10]明日科技编著.Java编程全能词典[J].电子工业出版社,2010
摘要
随着Java语言的不断发展和壮大,现在的Java已经广泛的应用于各个领域,
包括医药,汽车工业,手机行业,游戏,等等地方。
Java游戏的开发为满足人们娱乐所需而设计。
本游戏为打砖块游戏,是基于Java的图形用户界面而开发的,可以放松心情的小游戏。
游戏从系统操作简便、界面友好、灵活、上手即会的基本要求出发,完成整款游戏的开发。
游戏更设置了暂停、计分、音乐、速度,用户信息保存等功能,可以根据自己的爱好,挑战更高难度,为用户带来愉悦的体验。
本课程设计报告介绍了游戏的构想,分析,开发,实现的过程。
论述了游戏的功能开发,设计构思。
给出了游戏的设计步骤,游戏系统关键的设计思想;在游戏系统实现章节给出了部分功能流程和相关代码。
关键词:
游戏,打砖块
第1章引言
1.1背景
游戏是全球最大的娱乐经济项目之一,已经被命名为“第九艺术”。
而由“游戏”派生出来的职业,除了软件开发外,游戏包装宣传推广、攻略指导、网络游戏管理员和职业游戏玩家等,已成为了一系列专门的岗位。
面对游戏产业如此巨大的市场空间,国内各大城市纷纷加大了这方面的人才培养,中国的游戏人才培训已随着游戏行业的总体发展开始逐步迈入了正轨。
虽然说中国的游戏行业开始逐步的迈入了正轨,但是现今,游戏人才出现严重的瓶颈时期,高校的扩招、金融危机的侵袭直接影响着我们最关心的就业问题,但是另一方面游戏人才的缺乏又直接制约着行业的发展,这就更加严格了对社会培训机构的稳定性和正规性的要求。
在我国,游戏人才培养体系还未健全,部分开设了相关专业的高校,游由于理论和实践的脱离无法完全满足网游公司对人才的需求。
所以,就中国目前的市场分析来看,加强游戏产业必须在多渠道人才培养体系上加快突破,尽快建立起多渠道人才培养体系,来满足社会对游戏人才的需求。
1.2课程设计内容
打砖块游戏是一种动作电子游戏的名称。
玩家操作一根萤幕上水平的弹板,让一颗不断弹来弹去的“球”在撞击作为过关目标消去的“砖块”的途中不会落到萤幕底下。
球碰到砖块、弹板与底下以外的三边会反弹,落到底下会失去一颗球,把砖块全部消去就可以破关。
游戏的功能包含以下内容:
(1)基本的游戏操作
用户可以通过鼠标或者键盘来操作弹板,尽量让弹球不要掉下底下。
开始按钮和暂停按钮可以控制游戏的进行。
(2)宝物获得功能
用户在游戏过程中,可能获得相关的宝物,可以使弹板增长一部分。
(3)速度设置功能
本游戏有5个速度设置,可以根据用户的需要,调节到用户想要的速度进行游戏。
(4)音乐设置功能
用户可以根据自己的喜好,选择自己喜欢的音乐,或者是关掉它。
(5)用户注册登录功能
每个用户在游戏开始时都要输入用户的信息注册,登录,并记录。
当用户退出游戏以后,系统将记录用户的游戏信息。
(6)计分,记时功能
用户在游戏的过程中,系统将记录游戏的成绩,并保存在文件中,用户退出游戏后也可以查询成绩。
1.3任务分工
第二章弹砖块小游戏应用程序
2.1弹砖块小游戏应用程序概述
此程序设计是一个小游戏(弹砖块)的实现,主要运用了用户图形界面,程序接口和基本函数绘制来实现,事件监听(包括鼠标事件,键盘事件,响应时间)也是这个程序的特色。
此程序用到了图片的引用,砖块、弹板应用了函数绘制和图片引用,弹球的设计外且安全是应用函数绘制。
游戏还利用JAVAApplet实现了播放声音。
再加入复选框,按钮,标签等来实现本游戏用户界面布局。
总之,本游戏在用户界面的可操作性、游戏的美观度、计分计时存储结果方便都基本完善,有一定的可玩性。
2.1.1打砖块小游戏系统任务及目的
此小程序是为群众闲暇消遣之用,玩家在进入游戏后输入自己的大名,按游戏规则用弹球打掉弹板上的全部砖块,获得相应的分数,进入下一关,知道全部过关,游戏结束后可记录玩家分数及排行榜名次
进入游戏界面,一个文本框可以选择是否记录游戏这名字,接着是“开始”、“暂停”、“重新开始”按钮以及四个复选框分别控制背景音乐、速度、模型和关卡,还有四标签记录时间、生命分数和排行榜数据。
2.2主要特色系统介绍
游戏增加了背景音乐以及碰撞音乐的设置,并用图片代替了纯粹用函数构造出的砖块,使玩家在使用此程序时更加能体验到乐趣。
自主选关、模式选择和速度选择给了玩家更多的自主机动性,使得玩家可以根据自己的意愿来设定游戏难度,排行榜功能也是特色之一,玩家可以根据排行榜来了解自己玩的如何,可以有个相对的比较。
2.3本章小结
虽然游戏在功能和界面上不能算的上很棒,但是麻雀虽小,五脏俱全,游戏具备了弹砖块这个经典游戏锁应该具有的基本雏形。
通过这一章,我们对这个游戏应该有了比较宏观的了解,我们将在这一基础上探究游戏更完美的改变。
第3章打砖块游戏系统的设计
这一章是打砖块游戏系统的设计,从系统需求分析开始,介绍开发环境和用到的开发工具,系统主要的功能设计,系统的数据流程图。
3.1系统需求分析
打砖块的设计目标为:
(1)实现打砖块游戏功能,使用背景音乐,可用键盘或者鼠标控制挡板,并对游戏时间,游戏分数进行记录并保存成绩到文本,列出成绩排行榜。
(2)实现游戏难度和游戏模型的选择,通过本关后可以选择进入下一关。
(3)得到不同宝物可以实现多种游戏功能,加强游戏可玩性。
3.2系统开发及运行环境
硬件平台:
❑CPU:
INTEL-I5。
❑内存:
1024MB以上。
软件平台:
❑操作系统:
WindowsXP。
❑数据库:
TXT文档。
❑开发工具包:
JDKVersion1.6.2。
❑分辨率:
最佳效果1024×768像素。
3.3系统主要功能要求
本系统为了实现游戏打砖块。
本系统主要实现如下功能:
❑系统界面美观大方舒适。
❑实现游戏一些基础信息的保存和读取。
❑画面流畅,具有可玩性
❑没有较大的游戏BUG。
❑显示游戏者的游戏时间和积分。
❑存储玩家的积分。
❑实现多种难度的选择。
❑实现多种砖块的排列模型。
❑多种宝物可以实现不同的功能
❑玩家可以输入名称存入数据库。
❑系统最大限度地实现了易维护性和易操作性。
❑系统运行稳定、安全可靠。
❑实现用户的注册及注册信息的保存
3.4.1打砖块系统总体结构
打砖块游戏是基于基本的软件和普通硬件基础上的传统优秀游戏,一个游戏应该包括以下几大功能,如图3.1所示
图3.1系统功能结构图
各功能模块实现的功能为:
游戏管理模块:
实现基本的打砖块操作并实现游戏模型调整和游戏难度调整。
查询统计:
让玩家注册用户并保存它的游戏数据。
实现游戏分数的查询。
游戏管理模块图如图3.2所示。
图3.2游戏管理功能模块图
查询统计模块图如图3.3所示
图3.3查询统计功能模块图
3.4系统数据流图
游戏信息的流向,即系统数据流图如图2.3所示。
图3.3系统数据流图
3.5本章小结
本章是打砖块游戏的具体设计过程,有具体的需求分析、系统功能模块、系统数据流图。
这里我们开始接触JAVA程序设计的最初步骤,也是很重要的一步。
第4章系统数据库设计
本章是打砖块的数据库设计,有了数据库,就可以对游戏的成绩,玩家姓名进行保存,提高游戏的可玩性、竞争性
4.1数据库设计过程
数据库设计是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库应用系统,使之能有效的存储数据,满足各种用户的应用需求。
数据库设计方法是研究数据库及其应用系统的技术,是数据库在应用领域中的主要的研究课题。
4.1需求分析
打砖块的游戏存储需要两部分:
一是游戏姓名注册以及存储,二是游戏分数存储
4.2功能实现
运用较为简单的java程序代码,先需要注册用户名,效果如图4.2.1将游戏数据存入一个名为score.txt的文本文档。
实现效果如下图4.2.2
图4.2.1
图4.2.2游戏信息的存储
4.3本章小结
本章是打砖块游戏系统的数据库开发。
采用的是TXT文本。
第5章系统的具体实现
界面是系统和玩家之间最直接的交互界面,界面的友好性体现了程序设计的质量,界面是否便捷易懂也是程序所基本的要求。
5.1界面设计
5.1.1用户登录界面图
5.1.2游戏主界面
上图就是进入游戏后的界面,接下来用一个框图来表现界面的说明。
界面的初始化的关键代码为:
publicclassGameextendsJFrameimplementsRunnable,KeyListener,
ActionListener{
privateStrings=newString("打砖块游戏");
//定义组件
JToolBartoolbar=newJToolBar();//工具栏
JButtongstart=null;//开始按钮
JButtongstop=null;//暂停按钮
JButtongrestart=null;//重新开始按钮
JButtonsetmusic=null;//设置音乐按钮
JButtonsetspeed;//设置速度按钮
JLabelctime=null;//计时标签
JLabelclife=null;//生命标签
JLabelcscore=null;//分数标签
JComboBoxgmodel=null;//砖块排列模型
JComboBoxsetgate=null;//设置关卡
JTextFieldsetName=null;//游戏者姓名
//定义变量
staticintspeed=100;//速度(全局静态)
staticbooleanisfire=true;//isfire为true时,有碰撞声
staticinttoolgate=0;
staticbooleanrespeed=false;
inthours=0,minutes=0,seconds=0;
intm=8,n=5;
intlife=3;//生命
intscore=0;//分数
booleanisstop=true;//开始暂停
booleansetpaddle=true;
booleansetball=true;
intmodel=1;//砖块叠放的模型0为矩形1为三角形2为倒三角形3为空三角形4为六边形
//定义嵌入对象
SetMusicGetMusic;//音乐窗口
SetSpeedsettingspeed;//速度窗口
FireVoicefirevoice;//声明碰撞声音类
Threadt=newThread(this);
//定义图形
Brickbrick[][]=null;//砖块
Ballball=newBall();//球
Paddlepaddle=newPaddle();//板块
Treasure[]treasure=newTreasure[4];//宝物
MyPanelpanel;//画板
BufferedImageimg1;//图片
BufferedImageimg2;
/**
*主界面初始化函数
***/
publicvoidinit(){
initvariable();
GetMusic=newSetMusic();//开启音乐
settingspeed=newSetSpeed();//初始化速度设置窗口
firevoice=newFireVoice();
setName=newJTextField(10);//输入姓名对话框
//设置窗体
setSize(800,500);
setBackground(Color.white);
panel=newMyPanel();
this.setResizable(false);
this.setLocation(200,200);
ContainercontentPane=getContentPane();
contentPane.setLayout(newBorderLayout());
this.setTitle(s);
//初始化按钮
gstart=newJButton("开始");
gstop=newJButton("暂停");
grestart=newJButton("重新开始");
setmusic=newJButton("设置音乐");
setspeed=newJButton("设置速度");
//初始化计时标签
ctime=newJLabel("计时:
00:
00:
00");
clife=newJLabel("生命:
3");
cscore=newJLabel("分数:
0");
//初始化下拉栏
String[]smodel={"模型1","模型2","模型3","模型4","模型5"};
gmodel=newJComboBox(smodel);
String[]sgate={"第1关","第2关","第3关","第4关","第5关"};
setgate=newJComboBox(sgate);
//将组件添加到工具栏
toolbar.add(gstart);
toolbar.addSeparator();//添加分隔栏
toolbar.add(gstop);
toolbar.addSeparator();//添加分隔栏
toolbar.add(grestart);
toolbar.addSeparator();//添加分隔栏
toolbar.add(setmusic);
toolbar.addSeparator();//添加分隔栏
toolbar.add(setspeed);
toolbar.addSeparator();//添加分隔栏
toolbar.add(gmodel);
toolbar.addSeparator();//添加分隔栏
toolbar.add(setgate);
toolbar.addSeparator();//添加分隔栏
toolbar.add(ctime);
toolbar.addSeparator();//添加分隔栏
toolbar.add(clife);
toolbar.addSeparator();//添加分隔栏
toolbar.add(cscore);
//添加组件到画板
contentPane.add(toolbar,BorderLayout.NORTH);
contentPane.add(panel,BorderLayout.CENTER);
//监听事件
gstop.setEnabled(false);
gstart.addActionListener(this);
gstop.addActionListener(this);
grestart.addActionListener(this);
setmusic.addActionListener(this);
setspeed.addActionListener(this);
gmodel.addActionListener(this);
setgate.addActionListener(this);
setName.addActionListener(this);
addMouseMotionListener(newMouseMove());
panel.addKeyListener(this);
panel.requestFocus();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//输入姓名
setVisible(true);
inth=JOptionPane.showConfirmDialog(null,setName,"输入姓名",JOptionPane.YES_NO_OPTION);
if(h==1){
System.exit(0);
}else{
t.start();
}
}
5.2程序设计及调试运行
编写12个CLASS文件,存入一个包“S”中,各个模块的程序代码都完成后,进行编译连接运行,经过反复调试,找出错误和不足,以达到游戏所需的基本功能和基本界面。
这个过程比较繁琐,我们参考网络上现有的资源,并加以改进,对各个模块仔细分析备注并进行调试,做到程序简洁易懂,可读性好。
尽量避免因代码不完善而导致的游戏运行中可能出现的错误。
5.2.1自动计时
游戏的自动计功能是非常有必要的,可以让玩家很直观地看到自己所玩的时间。
下面是自动计时功能的部分关键代码:
publicStringgettimes(inthours,intminuts,intseconds){//设置时间格式
Stringtext;
if(hours<10)
text="时间:
"+"0"+hours;
else
text=String.valueOf(hours);
if(minutes<10)
text=text+":
"+"0"+minutes;
else
text=text+":
"+minutes;
if(seconds<10)
text=text+":
"+"0"+seconds;
else
text=text+":
"+seconds;
returntext;
}
5.2.2在JPanel中画图
JPanel是一般轻量级容器,可以向JPanel容器中放入JPanel,JTextfiled,JButton等。
Swing的JPanel支持doublebuffering的功能,使得JPanel在处理动画上更为流畅,较不会有画面闪烁的情况发生。
下面是此程序运用Jpanel画图的部分主要代码:
classMyPanelextendsJPanel{
protectedvoidpaintComponent(Graphicsg){
Graphics2Dg2d=(Graphics2D)g;
ctime.setText(gettimes(hours,minutes,seconds));//设置时间
g.drawImage(img1,(int)paddle.xpaddle,(int)(paddle.ypaddle),
(int)paddle.width,(int)paddle.height,null);//画板块
for(intj=0;jfor(inti=0;ibrick[i][j].xBrick=i*(800/m);
brick[i][j].yBrick=j*(200/n);
if(brick[i][j].alive==1){
g.drawImage(img2,(int)brick[i][j].xBrick,
(int)brick[i][j].yBrick,
(int)brick[i][j].width,
(int)brick[i][j].heigh,null);
}
}
}
//画球
g2d.setPaint(newGradientPaint((int)ball.xBall,(int)ball.yBall,
Color.blue,(int)(ball.xBall+ball.r),
(int)(ball.yBall+ball.r),Color.yellow,true));
g2d.fill(newEllipse