《尹燕军 java火柴游戏课程设计报告》由会员分享,可在线阅读,更多相关《尹燕军 java火柴游戏课程设计报告(15页珍藏版)》请在金锄头文库上搜索。
1、Java 课程设计报告1JAVA 课程设计题目小游戏 班级网络工程 11-1 学号201101050627 姓名尹燕军 指导老师赵建立Java 课程设计报告2目录一、一、 需求分析需求分析1.1概述1.2技术原理二、二、 概要设计概要设计三、三、 详细设计详细设计3.1 程序类3.2 主要代码四、测试四、测试五、心得体会五、心得体会Java 课程设计报告3一、一、需求分析需求分析1.1 概述概述程序随机产生 2050 根火柴,由人与计算机轮流拿,每次拿的数量不超过 3 根,拿到最后一根为胜。 (使用图形界面)1.2 技术原理技术原理该游戏程序设计的主要内容是使用 java 中的各种组件与容器互
2、相搭配来完成的一个小游戏。 游戏设计中的主要的知识要点包括 java的 awt 包中的颜色类,图形类,图像类,事件监听器类,和 util 包中的 stack 类,timer 类,和 timertask 类的使用方法,以及 swing 包中的窗口类,按钮类,标签类,面板类,复选框类等一些常用组件的用法。通过这些组件来掌握事件监听器的用法,java 中栈的用法,以及实现了 Runnable 类的 TimerTask 类的用法, 通过这个类实现线程技术,还有 Graphics 类中的主要方法的使用,学会运用这些方法来来绘制火柴,绘制图片的目的。二、二、概要设计概要设计 设置随机数的范围 获取随机数
3、设计出人性化的图形界面 给予不同的提示完成游戏三、三、详细设计详细设计3.1 程序类Java 课程设计报告43.2 主要代码import java.awt.Color;/引入颜色类import java.awt.Component;/引入组件类import java.awt.Dimension;/引入封装单个对象中组件的宽度和高度(精确到整数)的类import java.awt.Graphics;/引入图形类import java.awt.Graphics2D;/引入二维图形类import java.awt.event.ActionEvent;/引入事件类import java.awt.eve
4、nt.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;/引入下拉列表框类Java 课程设计报告5import javax.swing.JFrame;/引入主框架主
5、窗口类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;/定义一个常量,设置为最小火柴棍数量为20private static final int MAX_CNT
6、 = 50;/定义一个常量,设置为最大火柴棍数量为50private static final int MAX_TAKE = 3;/定义一个常量,设置为最大拿火柴数量为3private static final int DELAY = 1000;/定义一个常量,设置为延迟时间为1000private JFrame mainFrame;/定义主框架变量private MyPaintPanel paints;/定义我自己画的面板数组变量private JButton userBtn;/定义我的按钮属性private JComboBox userNum;/定义我的下拉列表private JButto
7、n compBtn;/定义电脑按钮属性private JLabel compTxt;/定义电脑标签private Timer timer;/定义计时器的变量private ha()/定义一个私有的构造方法,来完成游戏的初始化动作mainFrame = new JFrame();/实例化一个主窗口mainFrame.setResizable(false);/设置窗体大小不可调整mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/设置默认的关闭操作为关闭窗口JPanel mainPanel = new JPanel();/实例化一个主
8、面板对象mainPanel.setLayout(null);/设置布局为空,即没有任何布局mainPanel.setPreferredSize(new Dimension(600, 400);/将组件的首选大小设置为常量值mainFrame.add(mainPanel);/将主面板添加到框架(窗口)中JLabel lab11 = new JLabel(“电脑“);/创建并设置标签按钮的内容为电脑lab11.setHorizontalAlignment(JLabel.CENTER);/设置标签内容沿 X 轴的对齐方式lab11.setBounds(0, 10, 200, 20);/设置该标签显示
9、位置为坐标(0,10),宽200,高20Java 课程设计报告6mainPanel.add(lab11);/将标签加入主面板JButton btn11 = new JButton(“Reset“);/定义一个重新来的按钮btn11.addActionListener(new ActionListener()/为“Reset”添加行为事件监听器,采用匿名类的方式Overridepublic void actionPerformed(ActionEvent e)/实现监听器中的方法init();/当单击此按钮时,调用该初始化方法);btn11.setBounds(250, 10, 100, 20)
10、;/设置重置按钮的位置, 左上角坐标为 (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 JButton(“Comp
11、uter First“);/定义一个电脑首先拿的按钮compBtn.addActionListener(new ActionListener()/为电脑开始按钮定义行为事件监听器Overridepublic void actionPerformed(ActionEvent e)/行为监听器中的默认方法compTake();/当单击电脑按钮时,调用电脑拿方法);compBtn.setBounds(10, 40, 180, 20);/设置电脑按钮的位置, 左上角坐标为 (10,40),大小为宽180,高20mainPanel.add(compBtn);/按钮添加到主面板上compTxt = new
12、 JLabel();/定义一个空标签compTxt.setBounds(10, 70, 400, 20);/设置空标签的位置,左上角坐标为(10,70),大小为宽400,高20mainPanel.add(compTxt);/将空标签加到主面板上userBtn = new JButton(“Take“);/定义用户拿按钮userBtn.addActionListener(new ActionListener()/为用户按钮定义行为事件监听器Java 课程设计报告7Overridepublic void actionPerformed(ActionEvent e)userTake();/当单击用户
13、拿按钮时,调用用户拿方法);userBtn.setBounds(400, 40, 90, 20);/设置用户拿按钮的位置,左上角的坐标为(400,40),大小为宽90,高20mainPanel.add(userBtn);/用户按钮添加到主面板上userNum = new JComboBox();/定义一个下拉列表框for (int i = 0; i rel)/如果用户拿火柴棍的数量比面板中的数量大的话,执行下面的语句JOptionPane.showMessageDialog(mainFrame, “There is only “ + rel+ “ matches.“);/用标准对话框类调用显示
14、”There is onlymachines“的对话框return;for (int i = 0; i 0)/如果面板中的火柴棍的数量对4取余大于0的话执行下面的语句takeCnt = rel % (MAX_TAKE + 1);/将面板中的火柴的数量对4取余之后赋给电脑要拿的火柴的数量else/否则面板中的火柴棍的数量对4取余小于或等于0的话执行下面的语句takeCnt = 1 + (int) (MAX_TAKE * Math.random();/随机产生一个小于4的数,给电脑要拿的数量for (int i = 0; i data;/定义一个私有的栈类型的变量dataprivate MyPai
15、ntPanel()/构造我的初始面板的方法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, 190, 285);/在坐标(0,0)处画一个大小为宽190,高为285的白色矩形区域g2.dispose()
16、;/释放此图形的上下文以及它使用的所有系统资源。调用dispose 之后,就不能再使用 Graphics 对象。data = new Stack();/在此面板中实例化一个具体的栈的对象public void paint(Graphics g)/定义画图形的默认方法g.drawImage(bimg, 0, 0, null);/从坐标(0,0)出开始画图片g.dispose();/释放此图形的上下文以及它使用的所有系统资源。调用dispose 之后,就不能再使用 Graphics 对象。private void add(int num)/添加火柴棍的方法Graphics2D g2 = bimg.createGraphics();/创建一个 Graphics2D,并将它绘制到此 BufferedImage 中int loc = da