收藏 分销(赏)

JAVA火柴小游戏专业课程设计方案报告.doc

上传人:w****g 文档编号:2495880 上传时间:2024-05-30 格式:DOC 页数:29 大小:507.54KB
下载 相关 举报
JAVA火柴小游戏专业课程设计方案报告.doc_第1页
第1页 / 共29页
JAVA火柴小游戏专业课程设计方案报告.doc_第2页
第2页 / 共29页
JAVA火柴小游戏专业课程设计方案报告.doc_第3页
第3页 / 共29页
JAVA火柴小游戏专业课程设计方案报告.doc_第4页
第4页 / 共29页
JAVA火柴小游戏专业课程设计方案报告.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、 成绩: 课 程 设 计 报 告 书所属课程名称Java综合实践题 目取火柴小游戏院 (系)信息工程学院班 级软件工程(2)班学号学生姓名指导老师 12 月 26 日 课 程 设 计( 论 文 )任 务 书学院 信息工程学院 专 业 15软件工程 班 级 1 一、课程设计(论文)题目 取火柴小游戏 二、课程设计(论文)工作:自 12月 20 日起至 12 月 31 日止。三、课程设计(论文)内容要求:1本课程设计目标(1)掌握Java语言程序设计方法; (2)理论联络实际,深入提升学生软件开发技术;(3)培养学生分析、处理问题能力;(4)提升学生实践论文撰写能力。2课程设计任务及要求1)基础要

2、求:(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. 北京邮电大学出版社. .12 (2

3、)丁振凡主编. Java语言实用教程试验指导M. 北京邮电大学出版社. .12(3)5)课程设计进度安排1准备阶段(4课时):选择设计题目、了解设计目标要求、查阅相关资料2程序模块设计分析阶段(8课时):程序总体设计、具体设计3代码编写调试阶段(8课时):程序模块代码编写、调试、测试4撰写论文阶段(4课时):总结课程设计任务和设计内容,撰写课程设计论文6)课程设计题目具体要求:编写一个程序使计算机随机产生2050根火柴,由人和计算机轮番拿,每次拿数量不超出3根,拿到最终一根为胜。使用图形界面编写,要求界面布局合理,而且能够顺利关闭界面,退出程序。学生署名: 12 月25日目录第1章 系统设计目

4、标.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中多种组件和容器相互搭配来完成一个小游戏。游戏设计中关键知识关键

5、点包含javaawt包中颜色类,图形类,图像类,事件监听器类,和util包中stack类,timer类,和timertask类使用方法,和swing包中窗口类,按钮类,标签类,面板类,复选框类等部分常见组件使用方法。经过这些组件来掌握事件监听器使用方法,java中栈使用方法,和实现了Runnable类TimerTask类使用方法,经过这个类实现线程技术,还有Graphics类中关键方法使用,学会利用这些方法来来绘制火柴,绘制图片目标。1:界面设计设置重置按钮位置,左上角坐标为(250,10),大小为宽100,高20;设置用户标签位置,左上角坐标为(400,10),大小为宽200,高20; 2:

6、功效设计为“Reset”添加行为事件监听器,采取匿名类方法。为用户按钮定义行为事件监听器。 3:代码设计编写每个控件相关代码,并进行调试。第3章系统具体设计1:界面设计创建一个游戏界面,设置用户拿按钮位置,下拉列表框中位置,游戏中火柴颜色,位置和大小。关键代码:import java.awt.Color;/引入颜色类import java.awt.Component;/引入组件类import java.awt.Dimension;/引入封装单个对象中组件宽度和高度(正确到整数)类import java.awt.Graphics;/引入图形类import java.awt.Graphics2D;

7、/引入二维图形类import java.awt.event.ActionEvent;/引入事件类import java.awt.event.ActionListener;/引入事件监听器类import java.awt.image.BufferedImage;/引入缓冲图像类import java.util.Stack;/引入栈类import java.util.Timer;/引入计时器类import java.util.TimerTask;/引入了实现Runnable接口类,并含有了线程功效import javax.swing.JButton;/引入按钮类import javax.swing

8、.JComboBox;/引入下拉列表框类import javax.swing.JFrame;/引入主框架主窗口类import javax.swing.JLabel;/引入标签类import javax.swing.JOptionPane;/引入选项面板类import javax.swing.JPanel;/引入面板类public class ha/定义一个公共主类Testpublic static void main(String args)/定义主方法mainnew ha();/调用Test类结构方法Test()private static final int MIN_CNT = 20;/定

9、义一个常量,设置为最小火柴棍数量为20private static final int MAX_CNT = 50;/定义一个常量,设置为最大火柴棍数量为50private static final int MAX_TAKE = 3;/定义一个常量,设置为最大拿火柴数量为3private static final int DELAY = 1000;/定义一个常量,设置为延迟时间为1000private JFrame mainFrame;/定义主框架变量private MyPaintPanel paints;/定义我自己画面板数组变量private JButton userBtn;/定义我按钮属性

10、private JComboBox userNum;/定义我下拉列表private JButton compBtn;/定义电脑按钮属性private JLabel compTxt;/定义电脑标签private Timer timer;/定义计时器变量private ha()/定义一个私有结构方法,来完成游戏初始化动作mainFrame = new JFrame();/实例化一个主窗口mainFrame.setResizable(false);/设置窗体大小不可调整mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置默认关闭操作

11、为关闭窗口JPanel mainPanel = new JPanel();/实例化一个主面板对象mainPanel.setLayout(null);/设置布局为空,即没有任何布局mainPanel.setPreferredSize(new Dimension(600, 400);/将组件首选大小设置为常量值mainFrame.add(mainPanel);/将主面板添加到框架(窗口)中JLabel lab11 = new JLabel(电脑);/创建并设置标签按钮内容为电脑lab11.setHorizontalAlignment(JLabel.CENTER);/设置标签内容沿 X 轴对齐方法l

12、ab11.setBounds(0, 10, 200, 20);/设置该标签显示位置为坐标(0,10),宽200,高20mainPanel.add(lab11);/将标签加入主面板JButton btn11 = new JButton(Reset);/定义一个重新来按钮btn11.addActionListener(new ActionListener()/为“Reset”添加行为事件监听器,采取匿名类方法public void actionPerformed(ActionEvent e)/实现监听器中方法init();/当单击此按钮时,调用该初始化方法);btn11.setBounds(250

13、, 10, 100, 20);/设置重置按钮位置,左上角坐标为(250,10),大小为宽100,高20mainPanel.add(btn11);/重来标签添加到主面板上JLabel lab12 = new JLabel(用户);/定义用户标签lab12.setHorizontalAlignment(JLabel.CENTER);/设置用户水平方法为居中lab12.setBounds(400, 10, 200, 20);/设置用户标签位置,左上角坐标为(400,10),大小为宽200,高20mainPanel.add(lab12);/将用户标签添加到主面板上compBtn = new JButt

14、on(Computer First);/定义一个电脑首先拿按钮compBtn.addActionListener(new ActionListener()/为电脑开始按钮定义行为事件监听器Overridepublic void actionPerformed(ActionEvent e)/行为监听器中默认方法compTake();/当单击电脑按钮时,调用电脑拿方法);compBtn.setBounds(10, 40, 180, 20);/设置电脑按钮位置,左上角坐标为(10,40),大小为宽180,高20mainPanel.add(compBtn);/按钮添加到主面板上compTxt = ne

15、w JLabel();/定义一个空标签compTxt.setBounds(10, 70, 400, 20);/设置空标签位置,左上角坐标为(10,70),大小为宽400,高20mainPanel.add(compTxt);/将空标签加到主面板上userBtn = new JButton(Take);/定义用户拿按钮userBtn.addActionListener(new ActionListener()/为用户按钮定义行为事件监听器public void actionPerformed(ActionEvent e)userTake();/当单击用户拿按钮时,调用用户拿方法);userBtn.

16、setBounds(400, 40, 90, 20);/设置用户拿按钮位置,左上角坐标为(400,40),大小为宽90,高20mainPanel.add(userBtn);/用户按钮添加到主面板上userNum = new JComboBox();/定义一个下拉列表框for (int i = 0; i MAX_TAKE; i+)/定义一个拿最大循环userNum.addItem(i + 1);/经过循环给列表框逐一添加选项userNum.setBounds(495, 40, 90, 20);/设置下拉列表框中位置,左上角坐标为(495,40),大小为宽90,高20mainPanel.add(u

17、serNum);/将列表框添加到主面板上paints = new MyPaintPanel3;/定义我画面板for (int i = 0; i 3; i+)/用3次循环来画出三个面板paintsi = new MyPaintPanel();/分别创建3个面板,并调用结构方法初始化三个面板paintsi.setBounds(5 + 200 * i, 110, 190, 285);/设置三个面板位置和坐标,间距为5mainPanel.add(paintsi);/将三个面板分别添加到主面板上mainFrame.pack();/调整此窗口大小,以适合其子组件首选大小和布局。mainFrame.setV

18、isible(true);/设置目前主窗口可见性init();/调用初始化方法 2:功效设计 定义初始化方法,调用重置方法,定义三块初始面板,定义用户拿火柴棒方法和电脑拿火柴棒方法,定义一个自定义面板类并继承了组件类。关键代码:private void init()/定义初始化方法if (timer != null)/假如计时器不为空话就实施下面语句timer.cancel();/快速终止计时器任务实施线程timer = new Timer();/实例化一个计时器对象compTxt.setText();/设置空标签文本为空compBtn.setEnabled(true);/设置是否启用电脑按钮

19、组件,即电脑组件可用userBtn.setEnabled(true);/设置是否启用用户按钮组件,即用户组件可用paints0.reset();/调用重置方法,来重新定义第一块面板paints1.reset();/调用重置方法,来重新定义第二块面板paints2.reset();/调用重置方法,来重新定义第三块面板int num = MIN_CNT + (int) (MAX_CNT + 1 - MIN_CNT) * Math.random();/随机产生一个大于20小于50数for (int i = 0; i rel)/假如用户拿火柴棍数量比面板中数量大话,实施下面语句JOptionPane.

20、showMessageDialog(mainFrame, There is only + rel+ matches.);/用标准对话框类调用显示”There is only machines“对话框return;for (int i = 0; i takeCnt; i+)/定义一个将第二块面板中火柴棍数量移动到用户面板循环int index = paints1.remove();/将第二个面板要移除火柴棍数量给index变量paints2.add(index);/将index值添加到用户拿面板上if (takeCnt = rel)/假如用户拿火柴棍数量和第二个相等实施下面语句JOptionPa

21、ne.showMessageDialog(mainFrame, You are the winner.);/显示”你胜利对话框“init();/并重新初始化else/假如不相等话,实施下面语句,compTake();/让电脑接着拿火柴棍private void compTake()/定义电脑拿方法compBtn.setEnabled(false);/设置电脑按钮目前状态为不可用userBtn.setEnabled(false);/设置用户按钮目前状态为不可用MyTask task = new MyTask();/实例化一个MyTask对象timer.schedule(task, DELAY);

22、/ 实施线程,安排在指定延迟1秒后实施指定任务private class MyTask extends TimerTask /定义一个继承了实现Runnable接口类使自己也含有线程功效Overridepublic void run()/因为TimerTask实现了Runnable接口,重写父类run方法int rel = paints1.getCnt();/将火柴棍面板中火柴数量赋给relint takeCnt = 0;/设置目前拿火柴棍数量为0if (rel 0)/假如面板中火柴棍数量对4取余大于0话实施下面语句takeCnt = rel % (MAX_TAKE + 1);/将面板中火柴数

23、量对4取余以后赋给电脑要拿火柴数量else /不然面板中火柴棍数量对4取余小于或等于0话实施下面语句takeCnt = 1 + (int) (MAX_TAKE * Math.random();/随机产生一个小于4数,给电脑要拿数量for (int i = 0; i takeCnt; i+)int index = paints1.remove();/将火柴面板中火柴移除并赋给indexpaints0.add(index);/将移除火柴添加到电脑拿面板上compTxt.setText(Computer takes + takeCnt + matches this time.);/设置电脑显示拿火柴

24、数量if (takeCnt = rel)/假如和电脑那数量和面板中数量相等实施下面语句JOptionPane.showMessageDialog(mainFrame, /显示信息对话框提醒电脑胜利了!Computer is the winner.);init();/并重新初始化userBtn.setEnabled(true);/设置用户按钮重新可用SuppressWarnings(serial)private class MyPaintPanel extends Component /定义一个自定义面板类并继承了组件类private BufferedImage bimg;/创建一个Buffer

25、edImage变量bimgprivate Stack data;/定义一个私有栈类型变量dataprivate MyPaintPanel()/结构我初始面板方法bimg = new BufferedImage(190, 285, BufferedImage.TYPE_3BYTE_BGR);/表示一个含有 8 位 RGB 颜色分量图像,Graphics2D g2 = bimg.createGraphics();/创建一个 Graphics2D,并将它绘制到此 BufferedImage 中g2.setColor(Color.WHITE);/设置要画颜色,即面板颜色g2.fillRect(0, 0

26、, 190, 285);/在坐标(0,0)处画一个大小为宽190,高为285白色矩形区域g2.dispose();/释放此图形上下文和它使用全部系统资源。调用 dispose 以后,就不能再使用 Graphics 对象。data = new Stack();/在此面板中实例化一个具体栈对象public void paint(Graphics g)/定义画图形默认方法g.drawImage(bimg, 0, 0, null);/从坐标(0,0)出开始画图片g.dispose();/释放此图形上下文和它使用全部系统资源。调用 dispose 以后,就不能再使用 Graphics 对象。3:代码设计

27、private void add(int num)/添加火柴棍方法Graphics2D g2 = bimg.createGraphics();/创建一个 Graphics2D,并将它绘制到此 BufferedImage 中int loc = data.size();/将目前栈大小赋给变量loc/System.out.println(目前栈为+data.size();int offX = loc % 3 * 65;/动态坐标int offY = loc / 3 * 15;/动态坐标g2.setColor(Color.YELLOW);/设置火柴棒颜色为黄色g2.fillRect(offX + 8,

28、 offY + 5, 50, 6);/填充火柴棒颜色区域g2.setColor(Color.GREEN);/设置火柴棒头颜色为绿色g2.fillArc(offX + 50, offY + 3, 10, 10, 0, 360);/设置火柴棒头坐标,大小为宽和高为10360度弧g2.setColor(Color.BLACK);/设置目前火柴棒根数颜色g2.drawString(String.valueOf(num), offX, offY+ g2.getFont().getSize();/画出数字data.push(num);/把数字1压入堆栈顶部repaint();/重画g2.dispose()

29、;/释放此图形上下文和它使用全部系统资源。调用 dispose 以后,就不能再使用 Graphics对象private int remove()/定义一个移除火柴棍方法Graphics2D g2 = bimg.createGraphics();/创建一个 Graphics2D,并将它绘制到此 BufferedImage 中int loc = data.size() - 1;/将目前栈大小即火柴棍数量减1/System.out.println(目前栈为+data.size();int offX = loc % 3 * 65;/动态获取坐标int offY = loc / 3 * 15;/动态获取

30、坐标g2.setColor(Color.WHITE);/设置移除填充颜色为白色g2.fillRect(offX, offY, 60, 15);/画出移除火柴棍位置g2.dispose();/释放此图形上下文和它使用全部系统资源。调用 dispose 以后,就不能再使用 Graphics 对象repaint();/调用重新画方法return data.pop();/移除堆栈顶部对象,并作为此函数值返回该对象。private void reset()/定义一个重置方法data.clear();/清楚该面板栈中内容Graphics2D g2 = bimg.createGraphics();/创建一个

31、 Graphics2D,并将它绘制到此 BufferedImage 中g2.setColor(Color.WHITE);/设置颜色为白色g2.fillRect(0, 0, 190, 285);/在坐标为(0,0)处填充大小为190,285矩形区域g2.dispose();/释放此图形上下文和它使用全部系统资源。调用 dispose 以后,就不能再使用 Graphics 对象。 repaint();/重绘此组件。 private int getCnt()/定义一个返回第二个面板火柴棍数量return data.size();/返回目前栈中火柴棍数量第4章系统调试运行1:运行界面2:游戏步骤截图(

32、1)假如是电脑先拿先单击Computer First按钮,电脑随机拿走几根火柴,并在电脑按钮下方显示“Computer takes *matches this time”提醒信息,单击以后电脑拿走按钮被禁用,直到用户单击自己按钮以后才能再拿。(2)用户单击自己Take按钮,依据自己情况拿对应火柴数,比如说用户拿三根火柴。(3)用户依据自己需要拿了三根火柴,以后电脑又拿了一根,如此循环,直到哪一方赢得比赛胜利。从下图中能够看到电脑赢得了比赛胜利。第5章课程设计心得经过一个星期我火柴小游戏课程设计,我在汤柱亮老师指导下,顺利完成该课程设计。经过该课程设计,收获颇多。在此次课程设计中,我碰到了很多问

33、题,也学会了很多东西。比如Graphics绘图方法问题,怎样绘制曲线,怎样绘制直线,怎样绘制矩形,怎样绘制圆形等部分基础图形绘制,经过自己和同学讨论,学会了图形类使用方法。还有浏览器中不能显示Applet程序使因为缺乏某种插件等等。不过伴随这些问题处理,我也从中学习到了新知识,感觉付出是值得。第6章参考文件1 耿详义,张跃平. Java 2 实用教程. 北京:清华大学出版社,.22 张利国.Java实用教程案例.北京:清华大学出版社,.103 周晓聪,等.面向对象程序设计和Java语言.北京:机械工业出版社,.34 李尊朝.Java语言程序设计.北京:中国铁道出版社,.25 (美)Philip

34、 Heller.Complate Java 2 Certification Study Guide Fourth Edition(Java 2 证学习指南) (第四版 英文版). 北京:电子工业出版社,.1第7章附 录程序源代码:import java.awt.Color;/引入颜色类import java.awt.Component;/引入组件类import java.awt.Dimension;/引入封装单个对象中组件宽度和高度(正确到整数)类import java.awt.Graphics;/引入图形类import java.awt.Graphics2D;/引入二维图形类import j

35、ava.awt.event.ActionEvent;/引入事件类import java.awt.event.ActionListener;/引入事件监听器类import java.awt.image.BufferedImage;/引入缓冲图像类import java.util.Stack;/引入栈类import java.util.Timer;/引入计时器类import java.util.TimerTask;/引入了实现Runnable接口类,并含有了线程功效import javax.swing.JButton;/引入按钮类import javax.swing.JComboBox;/引入下拉

36、列表框类import javax.swing.JFrame;/引入主框架主窗口类import javax.swing.JLabel;/引入标签类import javax.swing.JOptionPane;/引入选项面板类import javax.swing.JPanel;/引入面板类public class ha/定义一个公共主类Testpublic static void main(String args)/定义主方法mainnew ha();/调用Test类结构方法Test()private static final int MIN_CNT = 20;/定义一个常量,设置为最小火柴棍数量

37、为20private static final int MAX_CNT = 50;/定义一个常量,设置为最大火柴棍数量为50private static final int MAX_TAKE = 3;/定义一个常量,设置为最大拿火柴数量为3private static final int DELAY = 1000;/定义一个常量,设置为延迟时间为1000private JFrame mainFrame;/定义主框架变量private MyPaintPanel paints;/定义我自己画面板数组变量private JButton userBtn;/定义我按钮属性private JComboBo

38、x userNum;/定义我下拉列表private JButton compBtn;/定义电脑按钮属性private JLabel compTxt;/定义电脑标签private Timer timer;/定义计时器变量private ha()/定义一个私有结构方法,来完成游戏初始化动作mainFrame = new JFrame();/实例化一个主窗口mainFrame.setResizable(false);/设置窗体大小不可调整mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置默认关闭操作为关闭窗口JPanel main

39、Panel = new JPanel();/实例化一个主面板对象mainPanel.setLayout(null);/设置布局为空,即没有任何布局mainPanel.setPreferredSize(new Dimension(600, 400);/将组件首选大小设置为常量值mainFrame.add(mainPanel);/将主面板添加到框架(窗口)中JLabel lab11 = new JLabel(电脑);/创建并设置标签按钮内容为电脑lab11.setHorizontalAlignment(JLabel.CENTER);/设置标签内容沿 X 轴对齐方法lab11.setBounds(0

40、, 10, 200, 20);/设置该标签显示位置为坐标(0,10),宽200,高20mainPanel.add(lab11);/将标签加入主面板JButton btn11 = new JButton(Reset);/定义一个重新来按钮btn11.addActionListener(new ActionListener()/为“Reset”添加行为事件监听器,采取匿名类方法Overridepublic void actionPerformed(ActionEvent e)/实现监听器中方法init();/当单击此按钮时,调用该初始化方法);btn11.setBounds(250, 10, 100, 20);/设置重置按钮位置,左上角坐标为(250,10),大小为宽100,高20mainPanel.add(btn11);/重来标签添加到主面板上JLabel lab12 = new JLabel(用户);/定义用户标签lab12.setHorizontalAlignment(JLabel.CENTER);/设置用户水平方法为居中lab12.setBou

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服