java课程设计 GUI编程猜数字游戏

发布时间:2012-06-21 12:05:05

课程设计报告书

课程名称 面向对象程序设计

设计题目 GUI猜数字游戏程序

专业班级

指导教师

2012 6

目录

1 设计时间……………………………………………………………………1

2 设计目的……………………………………………………………………1

3 设计任务……………………………………………………………………1

4 设计内容……………………………………………………………………1

4.1需求分析 …………………………………………………………………1

4.1.1问题描述 ………………………………………………………………1

4.1.2基本要求 ………………………………………………………………1

4.2总体设计 …………………………………………………………………2

4.2.1 包的描述………………………………………………………………2

4.2.2 类的描述………………………………………………………………2

4.2.3类之间的关系 …………………………………………………………2

4.3详细设计 …………………………………………………………………2

4.3.1类图…………………………………………………………………… 3

4.3.2页面设计……………………………………………………………… 4

4.4测试与分析……………………………………………………………… 4

4.5 程序代码…………………………………………………………………5

5总结与展望…………………………………………………………………11

参考文献………………………………………………………………………12

1 设计时间

20126112012615

2 设计目的

《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。

3设计任务

设计一个GUI猜数字游戏程序该游戏可以由程序随机产生四个09之间的整数,且不重复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。假设随机数据为3792 时,分析如下

数据: 3792

输入: 1234 0A2B

输入: 5678 0A1B

输入: 0867 0A1B

输入: 9786 1A1B

输入: 1794 2A0B

输入: 2793 2A2B

输入: 3792 4A0B

4 设计内容

4.1需求分析

4.1.1问题描述

利用GUI编程实现一个猜数字的游戏,该游戏可以由程序随机产生四个09之间的整数,且不重复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。然后,根据用户所输入的的四个数字和程序随机产生的四个数字进行比较(包括数值与位置的比较)。最后,把比较的结果在游戏界面上显示出来,让游戏者得知。

4.1.2基本要求

GUI猜数字游戏,主要解决问题包括编写GUI界面,实现猜数字的功能。猜数字游戏中要实现的主要功能有产生四个不重复的随机数,将随机数与游戏者输入的数字比较得出A(随机数与输入数字的数值相同且位置相同)和B(随机数与输入数字的数值相同但位置不同)的个数。

4.2总体设计

4.2.1 包的描述

由于本程序就采用了AWT来实现游戏界面,仅仅就引用了Frame类,所以程序简单。程序只需要引用java.awt.*java.awt.event.*,一个作为各控件的引用包,一个是监听事件的引用包。

4.2.2 类的描述

在设计类的时候,考虑到简单明了,就用了三个类,一个主类MyFrame和两个事件监听类NumberListenerOperatorListener作为程序的整体框架。其中,MyFrame类继承于Frame类,NumberListenerOperatorListener类继承于ActionListener接口,两个事件监听类还是两个内部类。

4.2.3类之间的关系

1

4.3详细设计

4.3.1类图

Frame

int i //标识,控制点击数字显示在相应TextField

int f //标识,控制程序产生四个不同随机数

int f1 //标识,控制AB结果的显示

int A //计数,随机数与输入数数值和位置都相同的数字个数

int B //计数,随机数与输入数数值相同但位置都不同的数字个数

int Enter[] //存储游戏者输入的四个数字

int Arr[] //存储程序产生的四个随机数

TextField tf1,tf2,tf3,tf4 //显示输入的数字

TextField tf5,tf6 //显示AB结果

Panel p1,p2,p3,p4 //容器

Button b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,11,b12 //按钮

Label l1,l2 //显示AB

public MyFrame() //实现游戏界面

public void NumStore(ActionEvent e2) //游戏者输入四个数字,显示并存储

public void EventClick(ActionEvent e3) //对相应事件作相应处理

public static void main(String[] args) //实例化对象

2

NumberListener

ActionEvent e2 //产生触发事件的对象

public void actionPerformed(ActionEvent e2) //对触发事件的对象进行事件处理

3

OperatorListener

ActionEvent e3 //产生触发事件的对象

public void actionPerformed(ActionEvent e3) //对触发事件的对象进行事件处理

4

4.3.2页面设计

图形界面的设计,考虑到简单、实用、高效等特点,我选择了AWT来实现完成。

5

4.4测试与分析

1)点击开局,程序产生随机数,游戏者点击输入四个不同数字,然后点击确定按钮,程序内部进行比较,最后在AB对应位置给出结果。

6

2)若不是全部正确,游戏者可以点击本局重猜,清除显示部分,重新猜数字。

7

3)当全部猜对后,游戏者可以点击开局,程序产生新的随机数,同时程序内部全部初始化,然后就可以进行新一轮的游戏。

8

4)点击退出,则结束并退出游戏。

4.5 程序代码

import java.awt.*;

import java.awt.event.*;

public class MyFrame extends Frame

{

TextField tf1 = new TextField(); TextField tf2 = new TextField();

TextField tf3 = new TextField(); TextField tf4 = new TextField();

TextField tf5 = new TextField(); TextField tf6 = new TextField();

int i = 1; int Enter[] = new int[4]; int Arr[] =new int[4];

int A; int B; int f = 0;int f1=1;

public MyFrame()//实现游戏界面

{

super("Tony Guess Game");

setLocation(200, 200);

setSize(200, 200);

setVisible(true);

Panel p1 = new Panel(new GridLayout(1, 4, 10, 5));

Panel p2 = new Panel(new GridLayout(3, 3,6,6));

Panel p3 = new Panel(new GridLayout(4, 1));

Panel p4 = new Panel(new GridLayout(1, 3,6,6));

tf1.setEditable(false); tf2.setEditable(false); tf3.setEditable(false);

tf4.setEditable(false); tf5.setEditable(false); tf6.setEditable(false);

tf1.setForeground(Color.red);tf2.setForeground(Color.red);tf3.setForeground(Color.red);

tf4.setForeground(Color.red);tf5.setForeground(Color.red);tf6.setForeground(Color.red);

p1.add(tf1); p1.add(tf2); p1.add(tf3); p1.add(tf4);

NumberListener nl = new NumberListener();

OperatorListener ol=new OperatorListener();

Button b0 = new Button("0"); b0.addActionListener(nl);

Button b1 = new Button("1"); b1.addActionListener(nl);

Button b2 = new Button("2"); b2.addActionListener(nl);

Button b3 = new Button("3"); b3.addActionListener(nl);

Button b4 = new Button("4"); b4.addActionListener(nl);

Button b5 = new Button("5"); b5.addActionListener(nl);

Button b6 = new Button("6"); b6.addActionListener(nl);

Button b7 = new Button("7"); b7.addActionListener(nl);

Button b8 = new Button("8"); b8.addActionListener(nl);

Button b9 = new Button("9"); b9.addActionListener(nl);

Button b10 = new Button("本局重猜"); b10.addActionListener(ol);

Button b11 = new Button("确定"); b11.addActionListener(ol);

Button b12 = new Button("开局"); b12.addActionListener(ol);

b0.setForeground(Color.blue);b1.setForeground(Color.blue);b2.setForeground(Color.blue);

b3.setForeground(Color.blue);b4.setForeground(Color.blue);b5.setForeground(Color.blue);

b6.setForeground(Color.blue);b7.setForeground(Color.blue);b8.setForeground(Color.blue);

b9.setForeground(Color.blue);b10.setForeground(Color.blue);

b11.setForeground(Color.blue);b12.setForeground(Color.blue);

p2.add(b7); p2.add(b8); p2.add(b9); p2.add(b4); p2.add(b5);

p2.add(b6); p2.add(b1); p2.add(b2); p2.add(b3);

Label l1 = new Label("A",Label.CENTER);

Label l2 = new Label("B",Label.CENTER);

l1.setForeground(Color.blue);l2.setForeground(Color.blue);

p3.add(tf5); p3.add(l1); p3.add(tf6); p3.add(l2);

p4.add(b12); p4.add(b0); p4.add(b10); p4.add(b11);

add(p1, BorderLayout.NORTH); add(p2, BorderLayout.CENTER);

add(p3, BorderLayout.EAST); add(p4, BorderLayout.SOUTH);

addWindowListener(new WindowAdapter()

{

public void windowClosing(WindowEvent e1)

{ System.exit(0); }

});

pack();

}

public void NumStore(ActionEvent e2)//对点击事件处理

{

if(i<5)

{

if (i==1)

{

tf1.setText(e2.getActionCommand());

}

if (i == 2)

{

tf2.setText(e2.getActionCommand());

}

if (i == 3)

{

tf3.setText(e2.getActionCommand());

}

if (i == 4)

{

tf4.setText(e2.getActionCommand());

}

Enter[i - 1] = Integer.parseInt(e2.getActionCommand());

//System.out.print(Enter[i - 1]);

i++;

}

}

public void EventClick(ActionEvent e3)//对事件进行处理

{

if (e3.getActionCommand() == "开局")//产生四个不重复的随机数

{

for (int m = 0; m < 4; m++)

{

f = 0;f1=0;

while(f==0)

{

int n = (int)(Math.random() * 10);

if (m == 0) { Arr[m] = n; f = 1; }

if (m > 0)

{

for (int p = 0; p < m; p++)

{

if (Arr[p] == n) { f = 0; break; }

else f = 1;

}

if (f == 1) Arr[m] = n;

}

}

System.out.print(Arr[m]);

}

tf1.setText(""); tf2.setText(""); tf3.setText("");

tf4.setText(""); tf5.setText(""); tf6.setText("");

i = 1; A = 0; B = 0;

}

if (e3.getActionCommand() == "本局重猜")//清除tf1,tf2,tf3,tf4,tf5,tf6

{

tf1.setText(""); tf2.setText(""); tf3.setText("");

tf4.setText(""); tf5.setText(""); tf6.setText("");

i = 1; A = 0; B = 0;f1=0;

}

if (e3.getActionCommand() == "确定") //输入数字与随机数进行比较

{

if(f1==0&&i==5)

{

for(int j=0;j<4;j++)

{

for(int k=0;k<4;k++)

{

if (Enter[j] == Arr[k] && j == k) A++;

else if (Enter[j] == Arr[k] && j != k) B++;

}

}

tf5.setText(String.valueOf(A));

tf6.setText(String.valueOf(B));

f1=1;

}

}

}

class NumberListener implements ActionListener

{

public void actionPerformed(ActionEvent e2)

{

NumStore(e2);

}

}

class OperatorListener implements ActionListener

{

public void actionPerformed(ActionEvent e3)

{

EventClick(e3);

}

}

public static void main(String[] args)

{

new MyFrame();

}

}

5总结与展望

进行了几天的课程设计,经过反复的修改,我的猜数字游戏程序终于得以完成,Java是这学期才开的一门课,语法较多,但接受起来并不是很吃力,感觉和C语言有很多类似的地方。其中,我最喜欢的就是GUI编程这一章了,利用枯燥的代码实现优美的界面,感觉很有成就感。本次设计使得我在GUI和类,接口这几方面的掌握能力有了提高,在使用面向对象语言编写程序这方面,我有了深深的体会。Java是一种平台,也是一种程序设计语言,如何学习好程序设计是非常重要的。学习Java要脚踏实地,快餐式的学习方法不可取,要从平日里就勤加练习,多多实践,只要实践的多,写代码才能熟练。

参考文献

[1] 刘万军,郑少京,王松波,梁清华 Java6程序设计实践教程 北京:清华大学出版社,2009.5

课程设计成绩评定

出勤

情况

缺勤次数:

课程

设计

评估

设计成绩

教师签字

java课程设计 GUI编程猜数字游戏

相关推荐