java课程设计 GUI编程猜数字游戏
发布时间:2012-06-21 12:05:05
发布时间:2012-06-21 12:05:05
软 件 学 院
课程设计报告书
课程名称 面向对象程序设计
设计题目 GUI猜数字游戏程序
专业班级
学 号
姓 名 童 林
指导教师
2012 年 6 月
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
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(随机数与输入数字的数值相同但位置不同)的个数。 4.2总体设计 4.2.1 包的描述 由于本程序就采用了AWT来实现游戏界面,仅仅就引用了Frame类,所以程序简单。程序只需要引用java.awt.*和java.awt.event.*,一个作为各控件的引用包,一个是监听事件的引用包。 4.2.2 类的描述 在设计类的时候,考虑到简单明了,就用了三个类,一个主类MyFrame和两个事件监听类NumberListener和OperatorListener作为程序的整体框架。其中,MyFrame类继承于Frame类,NumberListener和OperatorListener类继承于ActionListener接口,两个事件监听类还是两个内部类。 4.2.3类之间的关系 图1 4.3详细设计 4.3.1类图
图2
图3
图4 4.3.2页面设计 图形界面的设计,考虑到简单、实用、高效等特点,我选择了AWT来实现完成。 图5 4.4测试与分析 1)点击开局,程序产生随机数,游戏者点击输入四个不同数字,然后点击确定按钮,程序内部进行比较,最后在A、B对应位置给出结果。 图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 | |||||||||||||||
课程设计成绩评定 | |||||||||||||||
出勤 情况 | 缺勤次数: | ||||||||||||||
课程 设计 评估 | |||||||||||||||
设计成绩 | 教师签字 | ||||||||||||||