小游戏 Java 课程设计报告书Word文档格式.docx
- 文档编号:17230620
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:38
- 大小:266.13KB
小游戏 Java 课程设计报告书Word文档格式.docx
《小游戏 Java 课程设计报告书Word文档格式.docx》由会员分享,可在线阅读,更多相关《小游戏 Java 课程设计报告书Word文档格式.docx(38页珍藏版)》请在冰豆网上搜索。
理解了Java的这种面向对象程序设计的基本思想之后,在以后的编程过程中,就应当个构造人们容易理解的更接近于真实物理世界物体的对象。
Java面向对象程序设计的过程非常简单。
这里介绍一种自顶向下的程序设计方法,首先构造一个类来处理需要解决的问题,然后根据已经拥有的类(例如以前求解其它问题时实现的类),分析与构造新的类,设法将问题分解下去,而最开始构造的类通过组织这些新构造的类、已有的类及由她们生成的实例来求解指定的问题。
这个过程可以继续递归下去,用在新构造的类上,直到最后解决了指定的问题,例如Java的应用程序与小应用程序都必须有一个类作为入口求解问题。
在计算机语言中,面向对象的类一般具有三个基本特性:
封装性、继承性与多态性,这三种特性进一步简化了Java求解模型,提高了程序的复用性,节省了程序的代码量,从而提高了软件的生产率。
(2)java技术分析
图形用户界面不仅可以提供各种数据的基本图形的直观表示形式,而且可以建立友好的交互方式,从而使计算机软件可以设计得十分简单易用。
从Java语言诞生到现在,Java语言已经提供了两代图形用户界面。
第一代图形用户界面AWT提供了基本的图形用户界面,它强烈地依赖于具体的计算机操作系统,而且缺少基本的剪贴板与打印支持功能。
现在第二代图形用户界面Swing对AWT进行了扩展,Swing不仅在功能上比AWT强大,而且在很大程度上克服了AWT的上述缺点,它所设计的图形用户界面与具体的计算机操作相关性很小,而且可以定制指定的操作系统风格的图形用户界面。
GUI(图形用户界面)组件构成了图形用户界面的基础。
在Java程序设计中,要求按照一定的布局方式将组件安排在容器中,然后通过事件处理的方式实现人机交互,而容器本身也就是组件,这样在容器中也可以含有容器,从而可以通过这种嵌套方式方便地组合各种组件。
事件处理模型就是Java语言提供的一种人机交互模型,它使得用户能够通过鼠标、键盘或其她输入设备来控制程序的执行流程,从而达到人机交互的目的。
对鼠标、键盘或其她输入设备的各种操作一般也称为事件。
Java语言对这些事件的处理模型就是采用面向对象的方法,即通过对象的形式把各种事件进行封装与处理。
这种事件处理模型的三个基本要素就是事件源、事件对象以及事件监听器。
事件源就是各种组件,就是接受各种事件的对象。
在各种事件源上运用鼠标、键盘或其她输入设备进行各种操作,就会有事件发生。
每种操作一般都对应着事件,Java语言通过事件对象来包装这些事件。
对事件进行处理就是通过事件监听器实现的。
因为鼠标事件也就是一种事件,所以对鼠标事件进行处理要遵循事件处理模型。
鼠标事件的处理也就是建立在事件源的基础之上,以事件对象本身,最后通过事件监听器进行处理。
类java、awt、event、MouseEvent包装常用的鼠标事件,例如,按下鼠标键与放开鼠标键等。
类MouseEvent的实例对象记录了鼠标的当前位置与状态发生变化的鼠标键等。
对鼠标事件进行处理最关键的就是实现事件监听器接口。
这些相关接口包括MouseListener,MouseMotionListener,MouseWheelListener,MouseInputListener。
前面三个就是包java、awt、event中的接口,最后一个接口MouseInputlistener来自包javax、swing、event。
接口Java、awt、event、MouseListener主要用来处理按下鼠标键、放开鼠标键、单击鼠标键、鼠标进入组件内与鼠标离开组件区域等事件。
对鼠标事件进行处理,就就是要设计类,实现上面的鼠标事件监听器接口,然后在事件源中注册处理鼠标事件监听器的对象,以便对鼠标事件进行处理。
三、概要设计
四、详细设计
(1)流程图
(2)界面的整体布局
分别构建mainPane,scoresPane两大模块放入游戏窗体,其中scoresPane包含2048字样的提示,当前得分与最高分,当得分超过最高分时,将得分存入工程文件夹下的myRecording、txt,覆盖最高分,同时在最高分显示最新myRecording、txt的内容。
通过Create方法随机产生2号方块或者4号方块,通过setColor方法设置每个数字代表的方块颜色。
(3)方法模块分析
方法1:
设置标签颜色,每次随机产生2或4与数字合并之后就要调用该方法来设置标签的颜色
publicvoidsetColor(inti,intj,Stringstr){
if("
"
、equals(str)){
texts[i][j]、setBackground(newColor(120,221,247));
return;
}
intresult=Integer、parseInt(str);
switch(result){
case2:
texts[i][j]、setBackground(newColor(240,240,0));
break;
case4:
texts[i][j]、setBackground(Color、pink);
case8:
texts[i][j]、setBackground(newColor(240,150,10));
case16:
texts[i][j]、setBackground(Color、green);
case32:
texts[i][j]、setBackground(Color、magenta);
case64:
texts[i][j]、setBackground(newColor(155,10,190));
break;
case128:
texts[i][j]、setBackground(Color、blue);
case256:
texts[i][j]、setBackground(Color、gray);
case512:
texts[i][j]、setBackground(Color、cyan);
case1024:
texts[i][j]、setBackground(Color、DARK_GRAY);
case2048:
texts[i][j]、setBackground(Color、red);
case4096:
texts[i][j]、setBackground(Color、white);
default:
}
方法2:
在随机位置产生一个2号或4号方块的方法,同时该方法也用于判断游戏就是否结束。
publicvoidCreate(){
inti,j;
//用于记录产生的二维方阵的下标值
booleanr=true;
Stringstr;
if(times>
0&
&
biaoji==1){
while(r){
i=random、nextInt(4);
j=random、nextInt(4);
str=texts[i][j]、getText();
if((str、compareTo("
)==0)){
intima=2*(int)(1+Math、random()*2);
//随机产生2或4
Stringimass=String、valueOf(ima);
texts[i][j]、setText(imass);
setColor(i,j,imass);
times--;
r=false;
p1=p2=p3=p4=0;
}
}
//记录当前的状态
for(intp=0;
p<
4;
++p){
for(intq=0;
q<
++q){
temp1[p][q]=temp2[p][q];
if("
、equals(texts[p][q]、getText()))temp2[p][q]=0;
elsetemp2[p][q]=Integer、parseInt(texts[p][q]、getText());
temp1scores=temp2scores;
temp2scores=scores;
}
elseif(p1>
p2>
p3>
p4>
0)
{
//l1到l4同时被键盘赋值为1说明任何方向键都不能产生新的数字,说明游戏失败
tips、setText("
游戏结束!
);
currentScores、setText("
<
html>
SCORE<
br>
+String、valueOf(scores)+"
/html>
JOptionPane、showMessageDialog(null,"
游戏结束!
System、exit(0);
;
}
方法3:
通过鼠标左键的按下与释放来判断向那个方向拖动,拖动实现主要就是通过记录按下鼠标左键时鼠标指针的位置,然后在记录鼠标左键释放时指针的位置坐标,通过对两次的坐标值计算处理,可以得到鼠标指针移动的方向,在将获得的方向值传到do_label_keyPressed(int)函数中,从而达到移动的目的。
publicvoidmousePressed(MouseEvente){
//TODOAuto-generatedmethodstub
//鼠标按下
//若鼠标位置在灰色的区域内则记录鼠标左键按下时的坐标
if(e、getX()>
=20&
e、getX()<
=480&
e、getY()>
=180&
e、getY()<
=640)
this、x1=e、getX();
this、y1=e、getY();
//调试程序输出鼠标的坐标位置
System、out、println("
X="
+e、getX()+"
"
+"
Y="
+e、getY());
@Override
publicvoidmouseReleased(MouseEvente){
//鼠标释放
//若鼠标位置在灰色区域内并且按下鼠标的位置不为0,则进行相应的处理
if(e、getX()>
=640&
this、x1!
=0&
this、y1!
=0)
this、x2=e、getX();
this、y2=e、getY();
if((x1>
x2)&
((x1-x2)>
Math、abs(y2-y1)))
{
option=1;
//移动的方向向左
System、out、println("
向左方向移动"
if((x1<
((x2-x1)>
option=2;
//移动的方向向右
向右方向移动"
if((y1>
y2)&
((y1-y2)>
Math、abs(x1-x2)))
option=3;
//移动的方向向上
向上方向移动"
if((y1<
((y2-y1)>
option=4;
//移动的方向向下
向下方向移动"
//将上一次的鼠标位置清零
this、x1=0;
this、y1=0;
this、x2=0;
this、y2=0;
do_label_keyPressed(option);
方法4:
从文件中读取,记录。
从文件中读取记录,同时也要将新的数据保存到文件中。
读取文件需要解决的问题就是,当程序首次运行的时候,文件不存在,这时不仅不能从文件中读数据,还要创建相应的文件。
创建文件之后,接下来在运行程序就能读取到数据。
文件读取结束要将文件关闭。
publicstaticvoidgetRecording()
{
booleanflag=false;
//用于判断文件就是否就是新创建的
try{
newFile("
src/myRecording、txt"
if(f、exists())
fr=new(f);
br=newBufferedReader(fr);
Stringn=br、readLine();
maxscores_2048=Integer、parseInt(n);
else
flag=f、createNewFile();
}catch(Exceptione){
//TODO:
handleexception
e、printStackTrace();
finally
{
try{
//关闭文件流的顺序,先开的后关闭
if(!
flag)
br、close();
fr、close();
}catch(Exceptione2){
//TODO:
e2、printStackTrace();
五、测试
(1)首次运行程序(在工程文件中建立保存最高分的文件)与再次运行程序
(2)游戏结束
六、总结
在这次的课程设计中不仅检验了我所学习的知识,也培养了我的实践能力,让我知道遇到一个问题,如何去寻找思路,如何去解决问题,最终完成整个事情。
课程设计就是我们专业课程知识综合应用的实践训练,就是我们迈向社会,从事职业工作前一个必不少的过程。
这次课程设计不仅就是对这学期所学知识的一种综合检验,而且也就是对自己动手能力的一种提高,增强了自己实践能力。
通过这次课程设计使我明白了自己知识还比较欠缺,只就是学习书本知识还就是远远不够的,自己不会的东西还有太多,学习需要自己长期的积累,在以后的学习、工作中都应该不断的学习,将课本的理论知识与生活中的实践知识相结合,不断提高自己文化知识与实践能力。
由于本次试验的很多知识都就是现学现用,以致很多地方的代码显得累赘繁琐。
但总体上主要功能就是实现了的,并且美化了一下主界面,使得界面更加简洁。
最后也感谢老师给予的耐心指导与帮助。
总之,此次课程设计让我获益匪浅,我将会继续把它完善做好
参考文献
[1]java语言程序设计基础篇[M]、机械工业出版社、2011、3、
[2]黄晓东、Java课程设计案例精编[M]、北京:
中国水利水电出版社,2007、5、
[3]求就是科技、Java信息管理系统开发实例导航[M]、北京:
人民邮电出版社、2009、4、
源代码清单
packagemy2048game;
importjavax、sound、sampled、*;
importjavax、swing、*;
importjava、io、*;
importjava、awt、*;
importjava、awt、event、*;
importjava、util、*;
publicclassMy2048GameextendsJFrame{
//定义自己的面板
MyPanelmp=null;
publicstaticvoidmain(String[]args){
//TODOAuto-generatedmethodstub
My2048Gamem2048=newMy2048Game();
m2048、setFocusable(true);
//(设置)该对象的焦点,不能用请求焦点对象名、requestFocus();
//构造函数
publicMy2048Game()
mp=newMyPanel();
this、add(mp);
//注册鼠标监听
this、addMouseListener(mp);
//注册键盘监听
this、addKeyListener(mp);
this、setTitle("
2048游戏"
this、setLocation(400,30);
this、setSize(500,800);
this、setResizable(false);
//禁止调整窗口大小
this、setDefaultCloseOperation(JFrame、EXIT_ON_CLOSE);
this、setVisible(true);
}
classMyPanelextendsJPanelimplementsMouseListener,KeyListener,ActionListener//动作监听器一般用于监听按钮或者菜单的点击事件
{
privateintx1=0,y1=0;
//按下鼠标左键的位置坐标
privateintx2=0,y2=0;
//释放鼠标左键的位置坐标
privateintoption=0;
//记录鼠标移动的方向
//定义组件
privateJButtonjb1;
//声音图标的按钮
privatestaticbooleanjb1_flag=true;
//用于控制声音开关的一个标志
privatebooleanjb1_flag2=true;
//
publicstaticbooleanisJb1_flag(){
returnjb1_flag;
publicstaticvoidsetJb1_flag(booleanjb1_flag){
MyPanel、jb1_flag=jb1_flag;
privateJPanelscoresPane;
//分数面板
privateJPanelmainPane;
//游戏主面板
privateJLabellabelMaxScores;
//"
最高分"
标签
privateJLabelm2048;
//显示2048
privateJLabellabelScores;
//当前"
得分"
privateJLabeltips;
//提示操作标签
privateJLabelcurrentScores;
privateJLabeltextScores;
privateJLabel[][]texts;
//创建文本框二维数组
privateint[][]temp1=newint[4][4];
//记录上一步的状态
privateint[][]temp2=newint[4][4];
//记录当前的状态
privateinttimes=16;
//记录剩余空方块数目
privateintscores=0;
//记录分数
privateintmaxscores=0;
//最高分
privateinttemp1scores=0;
privateinttemp2scores=0;
privateintp1,p2,p3,p4;
//用于判断游戏就是否失败
privateintbiaoji=1;
//标记能否移动
Fontfont=newFont("
Font、BOLD,14);
//设置字体类型与大小(标签字体的设置)
Fontfont2=newFont("
Font、BOLD,30);
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小游戏 Java 课程设计报告书 课程设计 报告书