java课程设计 GUI编程猜数字游戏
女生头像带字-佛歌南无阿弥陀佛
软 件 学 院
课程设计报告书
课程名称
面向对象程序设计
设计题目 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
1 设计时间
2012年6月11日-2012年6月15日
2 设计目的
《面向对象程序设计
》是一门实践性很强的计算机专业基础课程,课程设计是学习完
该课程后进行的一次较全面的综合练习。
其目的在于通过实践加深学生对面向对象程序设
计的理论、方法和基础知识的理解,掌握使用Java语
言进行面向对象设计的基本方法,
提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生
的应用能力。
3设计任务
设计一个GUI猜数字游戏程序,该游戏可以由程序随机产生四个
0到9之间的整数,
且不重复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。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编程实现一个猜数字的游戏,该游戏可以由程序随机产生四个0到9之间的
整数,且不重
复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。然后,根
据用户所输入的的四个数字和
程序随机产生的四个数字进行比较(包括数值与位置的比
较)。最后,把比较的结果在游戏界面上显示出
来,让游戏者得知。
4.1.2基本要求
GUI猜数字游戏,主要解决问题包括编写GUI
界面,实现猜数字的功能。猜数字游戏
中要实现的主要功能有产生四个不重复的随机数,将随机数与游戏
者输入的数字比较得出
A(随机数与输入数字的数值相同且位置相同)和B(随机数与输入数字的数值相
同但位置
2
不同)的个数。
4.2总体设计
4.2.1 包的描述
由于本程序就采用了AWT来实现游戏界面,仅仅就引用了Frame
类,所以程序简单。
程序只需要引用.*和.*,一个作为各控件的引用包,一个是监
听事件的
引用包。
4.2.2 类的描述
在设计类的时候,考虑到简单明了,就用了三个类,一个主
类MyFrame和两个事件监
听类NumberListener和OperatorListene
r作为程序的整体框架。其中,MyFrame类继承
于Frame类,NumberListener
和OperatorListener类继承于ActionListener接口,两个
事件监听类还
是两个内部类。
4.2.3类之间的关系
Frame
接口ActionListener
继承
实现 实现
MyFrame NumberListener OperatorListener
图1
4.3详细设计
3
4.3.1类图
Frame
int i
标识,控制点击数字显示在相应TextField
int f 标识,控制程序产生四个不同随机数
int f1 标识,控制A、B结果的显示
int A
计数,随机数与输入数数值和位置都相同的数字个数
int B
计数,随机数与输入数数值相同但位置都不同的数字个数
int Enter[]
存储游戏者输入的四个数字
int Arr[] 存储程序产生的四个随机数
TextField tf1,tf2,tf3,tf4 显示输入的数字
TextField tf5,tf6 显示A、B结果
Panel
p1,p2,p3,p4 容器
Button
b0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,11,b12 按钮
Label l1,l2 显示A、B
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
4.3.2页面设计
图形界面的设计,考虑到简单、实用、高效等特点,我选择了AWT来实现完成。
图5
4.4测试与分析
1)点击开局,程序产生随机数,游戏者点击输入四个不同
数字,然后点击确定按钮,
程序内部进行比较,最后在A、B对应位置给出结果。
图6
2)若不是全部正确,游戏者可以点击本局重猜,清除显示部分,重新猜数字。
图7
5
3)当全部猜对后,游戏者可以点击开局,程序产生新的随机数
,同时程序内部全部
初始化,然后就可以进行新一轮的游戏。
图8
4)点击退出,则结束并退出游戏。
4.5 程序代码
import .*;
import .*;
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(
setLocation(200, 200);
setSize(200, 200);
setVisible(true);
Panel p1 = new Panel(new GridLayout(1, 4, 10,
5));
6
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));
table(false);
table(false); table(false);
table(false);
table(false); table(false);
eground();eground();eground();
eground();eground();eground();
(tf1); (tf2); (tf3); (tf4);
NumberListener nl = new NumberListener();
OperatorListener ol=new OperatorListener();
Button b0 = new Button(
Button b1 = new
Button(
Button b2 = new Button(
Button b3
= new Button(
Button b4 = new Button(
Button b5 = new Button(
Button b6 = new
Button(
Button b7 = new Button(
Button b8
= new Button(
Button b9 = new Button(
Button b10 = new Button(本局重猜
Button b11 = new
Button(确定
Button b12
= new Button(开局
eground();eground();eground();
eground();eground();eground();
eground();eground();eground();
7
eground();eground();
eground();eground();
(b7); (b8); (b9); (b4); (b5);
(b6);
(b1); (b2); (b3);
Label l1 = new Label(
Label l2 = new Label(
eground();eground();
(tf5); (l1); (tf6);
(l2);
(b12); (b0); (b10); (b11);
add(p1, ); add(p2, );
add(p3, ); add(p4, );
}
addWindowListener(new
WindowAdapter()
{
});
pack();
public void
windowClosing(WindowEvent e1)
{ (0); }
public void NumStore(ActionEvent e2)对点击事件处理
{
if(i<5)
{
if (i==1)
{
}
if (i == 2)
{
t(ionCommand());
t(ionCommand());
8
}
}
}
if (i == 3)
{
}
if (i
== 4)
{
}
Enter[i - 1] =
nt(ionCommand());
(Enter[i - 1]);
i++;
t(ionCommand());
t(ionCommand());
public void EventClick(ActionEvent e3)对事件进行处理
{
if (ionCommand() ==
开局产生四个不重复的随机数
{
for (int m
= 0; m < 4; m++)
{
f = 0;f1=0;
while(f==0)
{
int n = (int)(() * 10);
if (m == 0) {
Arr[m] = n; f = 1; }
if (m > 0)
{
for (int p = 0; p < m;
p++)
{
9
}
}
}
if (Arr[p] == n) { f = 0; break; }
else f = 1;
if (f == 1) Arr[m] = n;
}
}
(Arr[m]);
t(
t(
i = 1; A =
0; B = 0;
if (ionCommand() ==
本局重猜清除tf1,tf2,tf3,tf4,tf5,tf6
{
}
if (ionCommand() == 确定输入数字与随机数进行比较
{
{
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++;
}
if(f1==0&&i==5)
t(
t(
i = 1; A = 0;
B = 0;f1=0;
10
}
}
}
}
}
t(f(A));
t(f(B));
f1=1;
class NumberListener implements ActionListener
{
}
class
OperatorListener implements ActionListener
{
}
public static void
main(String[] args)
{
}
new
MyFrame();
public void
actionPerformed(ActionEvent e3)
{
}
EventClick(e3);
public void
actionPerformed(ActionEvent e2)
{
}
NumStore(e2);
11
5总结与展望
进行了几天的课程设计,经过反复的
修改,我的猜数字游戏程序终于得以完成,Java
是这学期才开的一门课,语法较多,但接受起来并不
是很吃力,感觉和C语言有很多类似
的地方。其中,我最喜欢的就是GUI编程这一章了,利用枯燥的代
码实现优美的界面,感
觉很有成就感。本次设计使得我在GUI和类,接口这几方面的掌握能力有了提高
,在使用
面向对象语言编写程序这方面,我有了深深的体会。Java是一种平台,也是一种程序设计<
br>语言,如何学习好程序设计是非常重要的。学习Java要脚踏实地,快餐式的学习方法不
可取,
要从平日里就勤加练习,多多实践,只要实践的多,写代码才能熟练。
12
参考文献
[1]
刘万军,郑少京,王松波,梁清华 Java6程序设计实践教程 北京:清华大学出版社,2009.5
课程设计成绩评定
出勤
情况
课程
设计
评估
设计成绩
13
缺勤次数:
教师签字