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

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

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

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

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

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

成绩:

 

 

课程设计报告书

 

所属课程名称

Java综合实践

题目

取火柴小游戏

院(系)

信息工程学院

班级

软件工程

(2)班

学  号

学生姓名

指导教师

 

2016年12月26日

课程设计(论文)任务书

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

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

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

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

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

1.本课程设计的目的

(1)掌握Java语言的程序设计方法;

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

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

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

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

1)基本要求:

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

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

(3)掌握GUI图形界面编程技术;

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

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

(1)理论设计部分以课程设计论文的形式提交,格式必须按照课程设计论文标准

格式进行书写和装订。

(2)课程设计报告(论文)包括目录、设计目的、实现思路、实现步骤、设计心得

参考文献、附录等;

3)课程设计评分标准:

(1)学习态度:

10分;

(2)系统设计:

20分;

(3)编程调试:

20分;

(4)回答问题:

20分;

(5)论文撰写:

30分。

4)参考文献:

(1)丁振凡主编.Java语言实用教程[M].北京邮电大学出版社.2004.12

(2)丁振凡主编.Java语言实用教程实验指导[M].北京邮电大学出版社.2004.12

(3)

5)课程设计进度安排

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

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

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

程序总体设计、详细设计

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

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

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

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

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

编写一个程序使计算机随机产生20—50根火柴,由人与计算机轮流拿,每次拿的

数量不超过3根,拿到最后一根为胜。

使用图形界面编写,要求界面布局合理,

并且能够顺利关闭界面,退出程序。

 

学生签名:

 

2016年12月25日

目 录

第1章系统设计目的.............................1

第2章系统实现思路..............................2

第3章系统详细设计..............................3

第4章系统调试运行..............................10

第5章课程设计心得.............................13

第6章参考文献.................................13

第7章附录...............................14

 

第1章系统设计目的

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

1:

使计算机随机产生数;

2:

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

3:

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

4:

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

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

1:

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

2:

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

3:

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

第2章系统实现思路

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

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

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

1:

界面设计

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

2:

功能设计

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

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

3:

代码设计

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

第3章系统详细设计

1:

界面设计

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

主要代码:

importjava.awt.Color;//引入颜色类

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

importjava.awt.Dimension;//引入封装单个对象中组件的宽度和高度(精确到整数)的类

importjava.awt.Graphics;//引入图形类

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

importjava.awt.event.ActionEvent;//引入事件类

importjava.awt.event.ActionListener;//引入事件监听器类

importjava.awt.image.BufferedImage;//引入缓冲图像类

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;//引入选项面板类

importjavax.swing.JPanel;//引入面板类

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

{

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

{

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

}

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

privatestaticfinalintMAX_CNT=50;//定义一个常量,设置为最大火柴棍数量为50

privatestaticfinalintMAX_TAKE=3;//定义一个常量,设置为最大拿火柴数量为3

privatestaticfinalintDELAY=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.CENTER);//设置标签内容沿X轴的对齐方式

lab11.setBounds(0,10,200,20);//设置该标签显示位置为坐标(0,10),宽200,高20

mainPanel.add(lab11);//将标签加入主面板

JButtonbtn11=newJButton("Reset");//定义一个重新来的按钮

btn11.addActionListener(newActionListener()//为“Reset”添加行为事件监听器,采用匿名类的方式

{

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()//为电脑开始按钮定义行为事件监听器

{

@Override

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

{

userNum.addItem(i+1);//通过循环给列表框逐个添加选项

}

userNum.setBounds(495,40,90,20);//设置下拉列表框中的位置,左上角的坐标为(495,40),大小为宽90,高20

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

paints=newMyPaintPanel[3];//定义我画的面板

for(inti=0;i<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);//设置当前主窗口的可见性

init();//调用初始化方法

}

2:

功能设计

定义初始化方法,调用重置方法,定义三块初始面板,定义用户拿火柴棒的方法和电脑拿火柴棒的方法,定义一个自定义的面板类并继承了组件类。

主要代码:

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的数

for(inti=0;i

{

paints[1].add(i+1);//分别将产生的随机数添加到第二块面板

}

}

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

{

compBtn.setEnabled(false);//设置按钮不可用

inttakeCnt=userNum.getSelectedIndex()+1;//定义用户拿得火柴棍的数量

intrel=paints[1].getCnt();//将自定义的第二个面板中的火柴棍的数量赋给rel

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

{

JOptionPane.showMessageDialog(mainFrame,"Thereisonly"+rel

+"matches.");//用标准对话框类调用显示”Thereisonlymachines“的对话框

return;

}

for(inti=0;i

{

intindex=paints[1].remove();//将第二个面板要移除的火柴棍的数量给index变量

paints[2].add(index);//将index的值添加到用户拿的面板上

}

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

{

JOptionPane.showMessageDialog(mainFrame,"Youarethewinner.");//显示”你胜利的对话框“

init();//并重新初始化

}

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

{

compTake();//让电脑接着拿火柴棍

}

}

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

{

compBtn.setEnabled(false);//设置电脑按钮的当前状态为不可用

userBtn.setEnabled(false);//设置用户按钮的当前状态为不可用

MyTasktask=newMyTask();//实例化一个MyTask的对象

timer.schedule(task,DELAY);//执行线程,安排在指定延迟1秒后执行指定的任务

}

privateclassMyTaskextendsTimerTask//定义一个继承了实现Runnable接口的类使自己也具有线程功能

{

@Override

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

{

intrel=paints[1].getCnt();//将火柴棍面板中的火柴的数量赋给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的数,给电脑要拿的数量

}

for(inti=0;i

{

intindex=paints[1].remove();//将火柴面板中的火柴移除并赋给index

paints[0].add(index);//将移除的火柴添加到电脑拿的面板上

}

compTxt.setText("Computertakes"+takeCnt+"matchesthistime.");//设置电脑显示拿火柴的数量

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

{

JOptionPane.showMessageDialog(mainFrame,//显示信息对话框提示电脑胜利了!

"Computeristhewinner.");

init();//并重新初始化

}

userBtn.setEnabled(true);//设置用户按钮重新可用

}

}

@SuppressWarnings("serial")

privateclassMyPaintPanelextendsComponent//定义一个自定义的面板类并继承了组件类

{

privateBufferedImagebimg;//创建一个BufferedImage的变量bimg

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

privateMyPaintPanel()//构造我的初始面板的方法

{

bimg=newBufferedImage(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();//在此面板中实例化一个具体的栈的对象

}

publicvoidpaint(Graphicsg)//定义画图形的默认方法

{

g.drawImage(bimg,0,0,null);//从坐标(0,0)出开始画图片

g.dispose();//释放此图形的上下文以及它使用的所有系统资源。

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

}

 

3:

代码设计

privatevoidadd(intnum)//添加火柴棍

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

当前位置:首页 > 自然科学 > 物理

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

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