java火柴游戏课程设计报告文档格式.docx

上传人:b****3 文档编号:7718871 上传时间:2023-05-09 格式:DOCX 页数:24 大小:66.79KB
下载 相关 举报
java火柴游戏课程设计报告文档格式.docx_第1页
第1页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第2页
第2页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第3页
第3页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第4页
第4页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第5页
第5页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第6页
第6页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第7页
第7页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第8页
第8页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第9页
第9页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第10页
第10页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第11页
第11页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第12页
第12页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第13页
第13页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第14页
第14页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第15页
第15页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第16页
第16页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第17页
第17页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第18页
第18页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第19页
第19页 / 共24页
java火柴游戏课程设计报告文档格式.docx_第20页
第20页 / 共24页
亲,该文档总共24页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

java火柴游戏课程设计报告文档格式.docx

《java火柴游戏课程设计报告文档格式.docx》由会员分享,可在线阅读,更多相关《java火柴游戏课程设计报告文档格式.docx(24页珍藏版)》请在冰点文库上搜索。

java火柴游戏课程设计报告文档格式.docx

1.2技术原理1

二、概要设计1

三、详细设计

3.1程序类2

3.2主要代码2

四、测试10

五、收获和体会12

六、参考文献12

需求分析

1.1设计要求程序随机产生20—50根火柴,由人与计算机轮流拿,每次拿的数量不超过3根,拿到最后一根为胜。

(使用图形界面)

1.2技术原理

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

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

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

概要设计

1.设置随机数的范围

2.获取随机数

3.设计出人性化的图形界面

4.给予不同的提示完成游戏

三、详细设计

3.1程序类

'

..±

PackageEnplorer或

-j_r(.defaultpackage.)

dmJRESystemLibraryJc-iSE-17'

-<

■>

»

resourcesjar-D:

\Pro^ramFile£

\Java^jre#

>

园rtjar-D:

\Pragrafn

0辰已jn「-D:

\PrQgr3mFifC5\Java\jfe7\Jibo畐j-csjar-D:

\Programfiles\Java\jre7\lib

p@thar^tsjar-D;

\P「t?

gymFiles\Java\jrcA

D邑jfrjar-D:

\ProgramFile&

\Java\jre7\Jlb

©

wacce^-bridge.jflrD:

-,Frcg「日=1匚ikf后阳l>

邑dnsnsjar-D:

\ProgramFiles\Java^re7\lib

Oiojsrce^s.j^r-P:

P「cig「力mF:

leClx..于jr「7\l「

4星localedatajar-D^ProgramFltes\Java\jr<

jB邑^unecjar-D:

\ProgramRtfre\Iava\jre7\libT

■oiaeunjce_provid^r.jar-■-”二:

织:

爲sunmstapijsrC;

[:

了ug『mTi刁鬥皿乩]丘oh-suripkcslljar-L.-,-f.:

c:

lp.?

<

i三三.j?

de

■eiiziph.j^r?

^-ogrf!

nFijre?

Jib\t

图3.1程序类

3.2主要代码

importjava.awt.Color;

//引入颜色类

importjava.awt.Component;

importjava.awt.Dimension;

importjava.awt.Graphics;

importjava.awt.Graphics2D;

//引入组件类

//弓I入封装单个对象中组件的宽度和高度(精确到整数)的类

//引入图形类

//引入二维图形类

importjava.awt.event.ActionEvent;

//引入事件类

importjava.awt.event.ActionListener;

//引入事件监听器类

importjava.awt.image.Bufferedlmage;

//引入缓冲图像类

importjava.util.Stack;

importjava.util.Timer;

importjava.util.TimerTask;

//引入栈类

//引入计时器类

//引入了实现Runnable接口的类,并具有了线程的功能

importjavax.swing.JButton;

//引入按钮类

importjavax.swing.JComboBox;

importjavax.swing.JFrame;

importjavax.swing.JLabel;

//引入下拉列表框类

//引入主框架主窗口类

//引入标签类

importjavax.swing.JOptionPane;

//引入选项面板类

publicclassha//定义一个公共的主类Test

{

publicstaticvoidmain(String[]args)//定义主方法main

newha();

//调用Test类的构造方法Test()

}

private

static

final

int

MIN_CNT=20;

//定义一个常量,设置为最小火柴棍数量

为20

MAX_CNT=50;

//

定义一个常量,

设置为最大火柴棍数量

为50

MAX_TAKE=3;

设置为最大拿火柴数量

为3

DELAY=1000;

设置为延迟时间为1000

privateJFramemainFrame;

//定义主框架变量

privateMyPaintPanel[]paints;

//定义我自己画的面板数组变量

privateJButtonuserBtn;

//定义我的按钮属性

privateJComboBoxuserNum;

//定义我的下拉列表

privateJButtoncompBtn;

//定义电脑按钮属性

privateJLabelcompTxt;

//定义电脑标签

privateTimertimer;

//定义计时器的变量

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

mainFrame=newJFrame();

//实例化一个主窗口

mainFrame.setResizable(false);

//设置窗体大小不可调整

mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//设置默认

的关闭操作为关闭窗口

JPanelmainPanel=newJPanel();

//实例化一个主面板对象

mainPanel.setLayout(null);

//设置布局为空,即没有任何布局

mainPanel.setPreferredSize(newDimension(600,400));

//将组件的首选大小

设置为常量值

mainFrame.add(mainPanel);

//将主面板添加到框架(窗口)中

JLabellab11=newJLabel("

电脑”);

//创建并设置标签按钮的内容为电脑lab11.setHorizontalAlignment(JLabel.CENTEFR;

//设置标签内容沿X轴的对

齐方式

lab11.setBounds(0,10,200,20);

//设置该标签显示位置为坐标(0,10),宽

200,高20

mainPanel.add(lab11);

//将标签加入主面板

JButtonbtn11=newJButton("

Reset"

);

//定义一个重新来的按钮

btn11.addActionListener(newActionListener()//为“Reset1添加行为事件监

听器,采用匿名类的方式

@Override

publicvoidactionPerformed(ActionEvente)//实现监听器中的方法

init();

//当单击此按钮时,调用该初始化方法

});

btn11.setBounds(250,10,100,20);

//设置重置按钮的位置,左上角坐标为(250,10),大小为宽100,高20

mainPanel.add(btn11);

//重来标签添加到主面板上

JLabellab12=newJLabel("

用户"

//定义用户标签

lab12.setHorizontalAlignment(JLabel.CENTER);

//设置用户水平方式为居中lab12.setBounds(400,10,200,20);

//设置用户标签的位置,左上角坐标为

(400,10),大小为宽200,高20

mainPanel.add(lab12);

//将用户标签添加到主面板上

compBtn=newJButton("

ComputerFirst"

//定义一个电脑首先拿的按钮compBtn.addActionListener(newActionListener()//为电脑开始按钮定义行为事件监听器

publicvoidactionPerformed(ActionEvente)//行为监听器中的默认方法

compTake();

//当单击电脑按钮时,调用电脑拿方法

compBtn.setBounds(10,40,180,20);

//设置电脑按钮的位置,左上角坐标为(10,40),大小为宽180,高20

mainPanel.add(compBtn);

//按钮添加到主面板上

compTxt=newJLabel();

//定义一个空标签compTxt.setBounds(10,70,400,20);

//设置空标签的位置,左上角坐标为(10,

70),大小为宽400,高20

mainPanel.add(compTxt);

//将空标签加到主面板上

userBtn=newJButton("

Take"

//定义用户拿按钮userBtn.addActionListener(newActionListener()//为用户按钮定义行为事件监听器

publicvoidactionPerformed(ActionEvente)

userTake();

//当单击用户拿按钮时,调用用户拿方法

});

userBtn.setBounds(400,40,90,20);

//设置用户拿按钮的位置,左上角的坐标

为(400,40),大小为宽90,高20

mainPanel.add(userBtn);

//用户按钮添加到主面板上userNum=newJComboBox();

//定义一个下拉列表框

for(inti=0;

i<

MAX_TAKEi++)//定义一个拿最大的循环

userNum.addltem(i+1);

//通过循环给列表框逐个添加选项

userNum.setBounds(495,40,90,20);

//设置下拉列表框中的位置,左上角的坐

标为(495,40),大小为宽90,高20

mainPanel.add(userNum);

//将列表框添加到主面板上

paints=newMyPaintPanel[3];

//定义我画的面板

3;

i++)//用3次循环来画岀三个面板

paints[i]=newMyPaintPanel();

//分别创建3个面板,并调用构造方法初始

化三个面板

paints[i].setBounds(5+200*i,110,190,285);

//设置三个面板的位

置和坐标,间距为5

mainPanel.add(paints[i]);

//将三个面板分别添加到主面板上

mainFrame.pack();

//调整此窗口的大小,以适合其子组件的首选大小和布局。

mainFrame.setVisible(true);

//设置当前主窗口的可见性

//调用初始化方法

privatevoidinit()//定义初始化的方法

if(timer!

=null)//如果计时器不为空的话就执行下面的语句

timer.cancel();

//快速终止计时器的任务执行线程

timer=newTimer();

//实例化一个计时器的对象

compTxt.setText("

"

);

//设置空标签的文本为空

compBtn.setEnabled(true);

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

//设置是否启用用户按钮组件,即用户组件可用paints[0].reset();

//调用重置方法,来重新定义第一块面板

paints[1].reset();

//调用重置方法,来重新定义第二块面板

paints[2].reset();

//调用重置方法,来重新定义第三块面板

intnum=MIN_CNT+(int)((MAX_CNT+1-MIN_CNT)*Math.random());

//随机产生一个大于20小于50的数

num;

i++)//分别用for循环添加面板

paints[1].add(i+1);

//分别将产生的随机数添加到第二块面板

privatevoiduserTake()//定义一个用户拿火柴棒的方法

compBtn.setEnabled(false);

//设置按钮不可用

inttakeCnt=userNum.getSelectedlndex()+1;

//定义用户拿得火柴棍的数

intrel=paints[1].getCnt();

//将自定义的第二个面板中的火柴棍的数量赋给

rel

if(takeCnt>

rel)//如果用户拿火柴棍的数量比面板中的数量大的话,执行下面

的语句

JOptionPane.showMessageDialog(mainFrame,"

Thereisonly"

+rel

+"

matches."

//用标准对话框类调用显示”Thereisonlymachines"

的对话框

return;

for(inti=0;

takeCnt;

i++)//定义一个将第二块面板中的火柴棍的数量

移动到用户面板的循环

intindex=paints[1].remove();

//将第二个面板要移除的火柴棍的数量给

index变量

paints[2].add(index);

//将index的值添加到用户拿的面板上

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

Youarethewinner."

//

显示”你胜利的对话框“

//并重新初始化

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

//让电脑接着拿火柴棍

privatevoidcompTake()//定义电脑拿的方法

//设置电脑按钮的当前状态为不可用

userBtn.setEnabled(false);

//设置用户按钮的当前状态为不可用

MyTasktask=newMyTask();

//实例化一个MyTask的对象

timer.schedule(task,DELAY);

//执行线程,安排在指定延迟1秒后执行指定的任

privateclassMyTaskextendsTimerTask//定义一个继承了实现Runnable接口的

类使自己也具有线程功能

publicvoidrun()//因为TimerTask实现了Runnable接口,重写父类的run方法{

//将火柴棍面板中的火柴的数量赋给rel

inttakeCnt=0;

//设置当前拿火柴棍的数量为0

if(rel<

=MAX_TAKE〃如果当前火柴棍的数量比最大拿火柴的数量小的话,

执行下面的语句

takeCnt=rel;

//将火柴棍的数量赋给电脑要拿的数量

elseif(rel%(MAX_TAKE+1)>

0)//如果面板中的火柴棍的数量对4取余

大于0的话执行下面的语句

takeCnt=rel%(MAX_TAKE+1);

//将面板中的火柴的数量对4取余之

后赋给电脑要拿的火柴的数量

else//否则面板中的火柴棍的数量对4取余小于或等于0的话执行下面的语句

takeCnt=1+(int)(MAX_TAKE*Math.random());

//随机产生一个

小于4的数,给电脑要拿的数量

takeCnt;

i++)

//将火柴面板中的火柴移除并赋给

index

paints[0].add(index);

//将移除的火柴添加到电脑拿的面板上

Computertakes"

+takeCnt+"

matchesthis

time."

//设置电脑显示拿火柴的数量

if(takeCnt==rel)//如果和电脑那的数量和面板中的数量相等执行下面的语句

JOptionPane.showMessageDialog(mainFrame,//显示信息对话框提

示电脑胜利了!

Computeristhewinner."

userBtn.setEnabled(}

@SuppressWarnings("

serial"

privateclassMyPaintPanel

了组件类

privateBufferedImage

privateStackvInteger>

MyPaintPanel()

true);

//设置用户按钮重新可用

extendsComponent//定义一个自定义的面板类并继承

bimg;

//仓U建一个BufferedImage的变量bimg

data;

//定义一个私有的栈类型的变量data

//构造我的初始面板的方法

 

bimg=newBufferedlmage(190,285,

BufferedImage.TYPE_3BYTE_BGR);

//表示一个具有8位RGB颜色分量的图像,

Graphics2Dg2=bimg.createGraphics();

//创建一个Graphics2D,并将

它绘制到此BufferedImage中

g2.setColor(Color.WHITE);

//设置要画的颜色,即面板的颜色

g2.fillRect(0,0,190,285);

//在坐标(0,0)处画一个大小为宽190,高

为285的白色矩形区域

g2.dispose();

//释放此图形的上下文以及它使用的所有系统资源。

调用dispose之后,就不能再使用Graphics对象。

//定义画图形的默认方法

data=newStack<

Integer>

();

//在此面板中实例化一个具体的栈的对象}publicvoidpaint(Graphicsg){

g.drawImage(bimg,0,0,null);

//从坐标(0,0)岀开始画图片

g.dispose();

调用

对象

dispose之后,就不能再使用Graphics

}privatevoidadd(intnum)//添加火柴棍的方法

intloc=data.size();

//将当前栈的大小赋给变量loc

//System.out.println("

当前

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2