JAVA火柴小游戏课程设计报告.docx

上传人:b****4 文档编号:24825500 上传时间:2023-06-01 格式:DOCX 页数:32 大小:84.99KB
下载 相关 举报
JAVA火柴小游戏课程设计报告.docx_第1页
第1页 / 共32页
JAVA火柴小游戏课程设计报告.docx_第2页
第2页 / 共32页
JAVA火柴小游戏课程设计报告.docx_第3页
第3页 / 共32页
JAVA火柴小游戏课程设计报告.docx_第4页
第4页 / 共32页
JAVA火柴小游戏课程设计报告.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

JAVA火柴小游戏课程设计报告.docx

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

JAVA火柴小游戏课程设计报告.docx

JAVA火柴小游戏课程设计报告

成绩:

课程设计报告书

 

所属课程名称

JaVa综合实践

 

题目取火柴小游戏

院係)信息工程学院

班级软件工程⑵班

学号

学生

指导教师

2016年12月26日

课程设计(论文)任务书

学院信息工程学院专业15软件工程班级_1

_、课程设计(论文)题目取火柴小游戏

二、课程设计(论文)工作:

自2016年12月20曰起至2016年12月31日止。

三、课程设计(论文)的容要求:

1∙本课程设计的目的

(】)堂握JQVO语言的程序设计方法;

(2)理论联系实际,进一步提高学生的软件开发技术;—

(3)培养学生分析、解决问题的能力;—

^^(4)提高学生实践论文撰写能力。

2.课程设计的任务及要求

1)基本要求:

(】)熟悉JAVA开发环境,堂握JAVA程序的编译和运行;—

(2)堂握JAVA基本编程技术和方法;—

(3)堂握GUl图形界面编程技术;

(4)了解异常处理机制。

2)课程设计论文编写要求—

(】)理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准格式进行书写和装订。

(2)课程设计报告(论文)包括目录、设计目的、实现思路、实现步骤、设计心得参老文献、附录等;—

3)课程设计评分标准:

(】)学习态度:

】0分;

(2)系统设计

20分;

(3)编程调试

20分;

(4)回答问题

20分;

(5)论文撰写

30分。

4)參考文献:

⑴丁振凡主编.JoVCI语言实用教程[M]・邮电大学・2004」2

⑵丁振凡主编.JOvQ语言实用教程实验指导[M].邮电大学.2004.12

(3)

5)课程设计进度安排

】.准备阶段(4学时):

选择设计题目、了解设计目的要求、查阅相关资料—

2∙程序模块设计分析阶段(8学时):

程序总体设计、详细设计

3.代码编写调试阶段(8学时):

程序模块代码编写、调试、测试

4・撰写论文阶段(4学时):

总结课程设计任务和设计容,撰写课程设计论文

6)课程设计题目具体要求:

编写一个程序使计算机随机产生20-50根火柴,由人与计算机轮流拿,每次麺数量不超过3根,拿到最后一根为胜。

使用图形界面编写,要求界面布局合理,并旦能够顺利关闭界面,退出程序。

学生签名:

2016年12月25日

章章章章章章章

1234567⅛ra6-ΓJ6-p⅛Γ7⅛Γ□⅛Γ>SP

系统设计目的1

系统实现思路2

系统详细设计3

系统调试运行10

课程设计心得13

参考文献13

附录14

第1章系统设计目的

D设计一个简单的取火柴小游戏,可以实现以下功能:

1:

使计算机随机产生数;

2:

设计岀人性化的游戏界面;

3:

给予不同的提示完成游戏;

4:

能够顺利关闭游戏,退岀游戏。

2)通过这次设计,可以帮助学生:

1:

提高对JClVO语言设计的掌握能力;

2:

理论联系实际,进一步提高学生的软件开发技术;

3:

培养学生分析、解决问题的能力。

第2章系统实现思路

该游戏程序设计的主要容是使用Java中的各种组件与容器互相搭配来完成的一个小游戏。

游戏设计中的主要的知识要点包括jOVO的OWt包中的颜色类,图形类,图像类,事件监听器类,和Util包中的StQCk类,timer类,和timertask类的使用方法,以及SWing包中的窗口类,按钮类,标签类,面板类,复选框类等一些常用组件的用法。

通过这些组件来掌握事件监听器的用法,jovcι中栈的用法,以及实现了RUngbIe类的TimerTaSk类的用法,通过这个类实现线程技术,还有GraPhiCS类中的主要方法的使用,学会运用这些方法来来绘制火柴,绘制图片的目的。

1:

界面设计

设責重責按钮的位責,左上角坐标为(250,10),大小为宽】00,高20;设責用户标签的位責,左上角坐标为(400,10),大小为宽200,高20;

2:

功能设计

为“Reset”添加行为事件监听器,采用匿名类的方式。

为用户按钮定义行为事件监听器。

3:

代码设计

编写每个控件的相关代码,并进行调试。

第3章系统详细设计

1:

界面设计

创建一个游戏界面,设責用户拿按钮的位責,下拉列表框中的位責,游戏中火柴的颜色,位責和大小。

主要代码:

importjαvα.αwt.Color;//引入颜色关

importjava.awt.Component;〃引入组件类

importjava.awt.Dimension;//?

|2^封装单个对棣中组件的究度和高度(精确到SJ数)的类

imPOftjava.awt.GfaPhiCs;//引入自形黄

importjava.awt.Gfaphics2D;//引入二维图形类

importjava.awt.event.Actio“Event;//引入亭件类

importjava.awt.event.ActionLfctener;〃引入亭件监圻晁类

importjava.awt.image.Bufferedlmage;〃引入缓冲图儉类

importjava.util.Stack;//引入栈类

importjava.UtiLTimer;//引入计时品类

importjava.util.TimerTask:

//?

|A75?

现Runnable按口的类.并具有了线程的功能

importjavax.swing」Button;//弓∣入按钮类

importjavax.swing」COmbOBox;//引入下拉列裘框关

importjavax.swing.JFrame;//引入主框架主宙口类

importjavax.swing.JLabel;〃引入标签类

importjavax.swing」OPtiOnPane;//引入选项面极类

importjavax.swing.JPaneI;//引入面极类

PUbliCCIaSSho〃定义一个公共的主类TeSt

{

PUbIiCStatiCVOidmai∩(String[]OrgH〃定义主方法moin

<

newho();〃洞用TeSt类的构造方法Test()

}

PriVoteStatiCfinalinfMlN-CNT=20;//定义一个常fit,设置为最小火柴棍黴fit为20

PriVOteStatiCfinalinfMA)CCNT=50:

〃定义一个洋fit.设置为最大火柴棍鞍fit为50

PriVOteStatiCfinali∩tMAX」AKE=3;〃定义一个常fit,设置为最大拿火柴数量为3

PriVOteStatiCfinalinfDELAY=ICe0:

//定义一个常fit.设置为延迟时间为IOCO

PriVOteJFrCmemainFrame;//定义主框果变量

PriVOteMyPaintPonel[]paints;//定义我自己画的面极散组变fit

PriVoteJBUttOnUserBtn;//定义我的按钮属性

PriVOteJCOmbOBOXUSerNUm;//定义我的下拉列裘

PriVOteJButtonCOmPBtn;//定义电膜按钮属性

PriVOteJLabelCOmPTXt;//定义电胧标签

PriVOteTimertimer;〃定义计时的变fit

PriVoteha()//定义一个私有的构造方法,来充成游戏的初始化动作

{

mainFrame=newJFrOme();//实例化一个主宜IJ

mainFrame.setResi∑oble(fal5e∣;//设置宙体大小不可调整maiπFrame.setDefa∪ltClθ3eOperation(JFrome.EXIT-ON.CLOSE};//设置默认的关闭揀作为关闭虫口

JPanelmainPonel=newJPanel();//^例化一个主面极对较

mainPanel.setLoyout(null);//设置布局为空.即没有任何布局mainPanel.setPrefeσedSize(newDimension(600.400));//将组件的首迭大小设置为當量值mainFrame.odd(mainPanel):

//将主面极溢加到框架(SLJ)中

JLabelIabll=new儿Obel「电R∏:

//创连并设置标签按钮的容为电威

IablksetHorizontolAlignmEnt(JLObel.CENTER);//设置标签容沿X釉的对齐方或

Iabl1.setBounds(0,IOz2∞,20);〃设置该标签显示位■为坐标(OJO),究200,Sf20mainPanel.add(labll);//将标签加入主面扳

JBUttOnbtnll=newJBUttOReSer);//定义一个至新来的按钮

bt∩l1.oddActio∩Listener(newACtiOnLfctener()〃为KReSet,,添加行为亭件监听第,采用査合类的方丈{

PUbliCVOidOCtiOnPerfOfTned(ACtiOnEVer4e)〃实现盎听舉中的方法

{

i∩it():

//当单击此按包时.调用该初始化方法

}

});

bt∩ll.setBou∩ds(250z10.IOOz20):

//按钮的位置,左上角坐标为(250,10),大小为X100,

商20

mainPanel.add(btnl1):

//5^签游加到主面坝上

JLabelIabl2=new儿Obelr用户“);//定义用户标签lαbl2.setHorizontolAlignment(JLobeLCENTER);//设置用户水平方为居中

labl2.setBounds(400,10.200,20);//设■用户标签的位SL左上角坐标为(4∞J0)I大小为宽200,高mainPanel.add(lobl2);//^用户标签添加到主面扳上

COmPBtn=newJBUttOn(“ComputerFirst*');//定义一个倒筋首先拿的按钮

COmPBtn.addActio∩Listener(newActionListener()〃为电脑开始按钮定义行为亭件监听餵

{

OVerride

PUbIiCVOidactio∩Performed(Actio∩Evente)//行为监听晁中的默认方法

ComPTake();//当羊击电膜按钮时.调用电廉拿方法

}

});

COmPBtn.setBounds(IOz40,180z20);//设置电脑按钮的位■左上角坐标为(10,40).大小为宽180,

高20

mainPanel.add(compBtn);//按钮滋加到主面按上

COmPTXt=newJLabeI():

〃定义一个空标签

COmPTXt.setBou∩ds(10,70,4∞,20);//设置空标签的位置.左上角坐标为(10,70),大小为宽400,高

20

mainPanel.add(compTxt);//将空标签加到主面扱上

UserBtn=newJBUttOnnOke,,);〃定义用户拿按钮

USerBtn.OddActiOnListener!

newActionListenerI)//为用户按钮定义行为亭件监圻Sg

PUbliCVOidaCtiOnPerfOrmed(ACtiOnEVente)

{

USerTake{);〃当单击用户拿按钮时.调用用户拿方法

}

});

USerBtn.setBo∪nds(400,40.90z20):

//设置用B拿按包的位置.左上角的坐标为(4C0.40),大小为宽90,商20

HnainPaneLadd(UserBtn);//用户按钮添加到主面械上

υserNum=newJCOmbOBOX();〃定义一个下拉列裘框

for(inti=O;i

∪serNum.αddltem(i÷1);//通过循环给列表框逐个添加选项

}

υserNum.setBounds(495,40,90.20);//设置下拉列裘框中的位置,左上角的坐标为(495,40),大小为究

90,ft20

mainPanel.add(userNum);//将列表框游加到主面极上

POintS=newMyPaintPanel⑶;//定义我画的面按

for(inti=0;i<3;i++)//用3次循环来画出三个面极

{

PaintS[i]=newMyPaintPaneH);//分别创建3个面极.并调用构造方法初始化三个面桩

PaintS[i].SetBoundsfS÷200*L110,190z285);//设置三个面桩的垃置和坐标,闾距为5mainPa∩el.add(paints(i]);//将三个面极分别添加到主面桩上

}

mainFrame.pack()r∕∕i^S此宝口的大小,以适合其子组件的首选大小和布局.

mainFrame.seIVisibIe(true);//设置当前主虫口的可见性

init():

〃调用初始化方法

}

2:

功能设计

定义初始化方法,调用重直方法,定义三块初始面板,定义用户拿火柴棒的方法

和电脑拿火柴棒的方法,定义一个自定义的面板类并继承了组件类。

主要代码:

PriVOteVOidinit()〃定义初始化的方法

{

if(timer!

=null)//如果计时Sg不为空的话就扶行下面的诣句

<

timer.ca∩cel();//快速终止计时晁的任务执行线理

}

timer=∩ewTimer();//实例化一个计时黑的对空

COmPTXt.5etTextf-jι∕∕iS置空标签的文本为空

COmPBtn.SetEnabIed(true);//设置是否启用电脑按钮组件,即电脑组件可用

USerBtn.SetEnobIed(true):

〃设置是否启用用户按钮组件,即用户组件可用

PaintS[O].reset();//^用至置方法.来21新定义第一坎面极

PaintS(l].reset();//^用至置方法.来里新定义第二块面极

paints⑵.©3();//调用电置方法.来里新定义筆三块面桩

intnum=MIN.CNT÷(int)((MA)CCNT÷1・MlN-CNT)∙Math.random!

));//随机产生一个大于

20小于50的数

for(inti=0J

PaintS[l].odd(i÷1);〃分别将产生的随机数潘加到策二块面极

}

PriVateVOidUSerTake(}∕/定义一个用H拿火柴檸的方法

{

COmPBtn.setEnobleC(fol汨);〃设置按空不可用

inttakeCnt=USerNUm.getSelectedl∩dex()÷1;//定义用H拿得火柴棍的数fitintrel=paints(l].getC∩t();//将白定义的笔二个面板中的火柴棍的数量照给relif(takeCnt>rel)∕∕⅜n果用户拿火集棍的披fit比面极中的鞍fit大的话,执行下面的诒句

<

JOPtiOnPOne.showMessageDialog(mainFrame,'ThereisOnly,*÷rel

÷,,matches?

);//用标准对话框类调用显示”ThereisOnIYmachines的对

话框

return;

}

for(inti=OJ

{

i∩tindex=PaintS[1).removed;//将策二个面按要移除的火柴根的数fit给index吏fitPaintS[2].odd(index);/mindex的值添加到用户拿的面扳上

}

if(takeCnt==rel)//如果用户拿的火柴根的数■和第二个相等执行下面的请句

<

JOPtiOnPOne.showMessageDialog(mainFrame,"YouOretheWinner.,,)7∕S示°你胜利的对话框U

i∩it():

//并•新初始化

}

else//如果不相等的话,执行下面的诣句,

{

COmPTake();//让电脑按着拿火柴橙

}

PriVateVOidCOmPTake()//定义电膜拿的方法

COmPBtn.setE∩αbled(fαlse);//设置电筋按钮的当前状态为不可用

USerBtn.SetEnobIed(false);〃设置用户按钮的当前状态为不可用

MyTaSktask=newMyTaSk():

//$例化一个MyTOSk的对空timer.sched∪le(task,DELAY);//执行线屋,安摊在指定延迟1秒后执行指定的任务

}

PriVateCIaSSMyTaSkextendsTimefTaSk//定义一个進承了实现RUnnabIe接口的类使自己也具有线屋功能

{

OVerride

PUbIiCVOidrun()//因为TimerTaSk实现了RUnnObIe接口,至可父类的run方法

i∩trel=PaintS[l].getCnt();//将火柴棍面极中的火柴的给rel

i∩tIakeCnt=0;//设置当前拿火柴棍的数童为0

if(rel<=MAX3AKE)//如果当前火柴棍的数Sttt最大拿火柴的数量小的话.执行下面的话句

{

takeCnt=心1;〃将火菓棍的数■賦绘电膜要拿的数童

}

elseif(rel%(MA)CTAKE+1)>0)//如果面扳中的火柴根的数■对4取余大于O的话执行下面的话句

{

takeCnt=rel%(MA)CTAKE÷1);//将面扳中的火柴的数■对4取余±SC¾给电脑要拿的火柴的披fit

}

else〃否则面坝中的火柴棍的数■对4取余小于或尊于O的话执行下面的诒句

{

takeCnt=1÷(int)(MAX.TAKE*Math.random(H:

〃随机产生一个小于4的数.给电前要拿的数童

}

for(infi=O;i

{

i∏tindex=POintS[l].remove();//将火柴面扳中的火柴移涂并販给index

PaintS(O].add(index);//将移除的火集添加到电筋拿的面桩上

}

COmPTXt.setText(,,Computertakes"÷takeCnt+”matchesthistime.');//设置电脑显示拿火柴的数St

if(takeCnt==rel)〃如果和邑脑那的歎fit和面极中的数量相等执行下面的话句

JOPtiOnPone.showMessαgeDiolog(mαinFrome,〃显示信息对话框提示电脑肚利

了!

''ComputeristheWinner.n);

i∏it∣);//并莖薪初始化

}

USerBtn.SetEnabIed(True);//设置用H按匹新可用

}

}

SUPPreSSWamingS(HSeriar,)

PriVateCIaSSMyPaintPanelextendsCOmPOnent〃定义一个包定义的面械类并绘承了组件类

{

PriVOteBUfferedlmOgebimg;〃创建一个BUfferedlmage的支fitbimg

PriVOteStaCkCIoteι;//定义一个私有的栈类型的芟■data

PriVoteMyPaintPonel()∕∕⅛造我的初始面极的方法

<

bimg=newBUfferedlmage(190z285,BUfferedImOge.TYPE-3BYTE-BGR);//表示一个具有8位RGB颜色分St的图像.

GraPhics2Dg2=bimg.createGτaphics();//创建一个GrOPhies2D,并将它绘制到此BUfferedImage中

g2.setColor(Color.WHlTE);//设置要画的颜色,即面极的颜色

g2.fillRect(0z0,190,285};//在坐标(0,0)处画一个大小为190.高为285的白色矩形区域g2.dispose(};//释放此图形的上下文以及它使用的所有系统资混・调用dispose±Jσ.就不能再使用GrOPhiCS对燎.

data=newStaCk();//在此面极中实例化一个具体的栈的对燎

}

PUbIiCVOidPaint(GfaPhiCSg)〃定义画图形的默认方法

{

g.drawlmoge(bimgzOZ0,null);//从坐标(0.0)出开始画图片

g.dispose()7∕⅛放此图形的上下文以及它使用的所有系统资源・调用dispose之厉,就不戢再汝用GfQPhiCS对象.

}

3:

代码设计

PnVateVOidOdd(irdnum)//添加火集棍的方法

GraPhics2Dg2=bimg.createGraphicc();//创建一个GfaPhics2D,并将它绘制到此Bufferedlmage中

intloc=data.size();//将当前栈的大小蹴给吏fitIOC

//System.out.printl∩f,当前栈为,'+data.si∑e());

intOffX=IOC%3塔65;〃动态的坐标

intOffY=loc∕3*15;〃动态的坐标

g2.setColor{Color.YELLOW);//设置火柴樓的颜色为黄色

g2.fillRect(offX÷8,OffY÷5,50,6);〃填充火柴檸的颜色区域g2.setColor{Color.GREEN);//设置火柴檸头的颜色为冬色

g2.fillArc(offX+50,OffY÷3.10.IOZ0.360);〃设置火柴棒头的坐标,大小为富和高为10的360度的亚

g2.setColor(Color.BLACK);//设置当前火集棒的根数的颜色g2.drawString(String.valueOf(num),offX,OffY

+g2.gθtFont().getSizβ());//画出数宇

data.push(num);//把数宇1压入堆栈顶部

reρoint{)7∕5Si

g2.dispose();//釋放此图张的上下文以及它使用的所有系统资舉调用dispose±fi.就不能再使用

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

当前位置:首页 > 工程科技 > 兵器核科学

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

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