软件学院课程设计报告书课程名称面向对象程序设计设计题目GUI猜数字游戏程序专业班级学号姓名童林指导教师2012年6月1目录1设计时间……………………………………………………………………12设计目的……………………………………………………………………13设计任务……………………………………………………………………14设计内容……………………………………………………………………14.1需求分析…………………………………………………………………14.1.1问题描述………………………………………………………………14.1.2基本要求………………………………………………………………14.2总体设计…………………………………………………………………24.2.1包的描述………………………………………………………………24.2.2类的描述………………………………………………………………24.2.3类之间的关系…………………………………………………………24.3详细设计…………………………………………………………………24.3.1类图……………………………………………………………………34.3.2页面设计………………………………………………………………44.4测试与分析………………………………………………………………44.5程序代码…………………………………………………………………55总结与展望…………………………………………………………………11参考文献………………………………………………………………………1221设计时间2012年6月11日-2012年6月15日2设计目的《面向对象程序设计》是一门实践性很强的计算机专业基础课程,课程设计是学习完该课程后进行的一次较全面的综合练习。其目的在于通过实践加深学生对面向对象程序设计的理论、方法和基础知识的理解,掌握使用Java语言进行面向对象设计的基本方法,提高运用面向对象知识分析实际问题、解决实际问题的能力,提高学生的应用能力。3设计任务设计一个GUI猜数字游戏程序,该游戏可以由程序随机产生四个0到9之间的整数,且不重复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。A表示位置正确且数字正确,B表示数字正确而位置不正确。假设随机数据为3792时,分析如下数据:3792输入:12340A2B输入:56780A1B输入:08670A1B输入:97861A1B输入:17942A0B输入:27932A2B输入:37924A0B4设计内容4.1需求分析4.1.1问题描述利用GUI编程实现一个猜数字的游戏,该游戏可以由程序随机产生四个0到9之间的整数,且不重复。玩游戏者通过由用户输入四个数字来匹配上面所产生的数字。然后,根据用户所输入的的四个数字和程序随机产生的四个数字进行比较(包括数值与位置的比较)。最后,把比较的结果在游戏界面上显示出来,让游戏者得知。4.1.2基本要求GUI猜数字游戏,主要解决问题包括编写GUI界面,实现猜数字的功能。猜数字游戏中要实现的主要功能有产生四个不重复的随机数,将随机数与游戏者输入的数字比较得出A(随机数与输入数字的数值相同且位置相同)和B(随机数与输入数字的数值相同但位置3不同)的个数。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类之间的关系图14.3详细设计接口ActionListenerFrameNumberListenerMyFrameOperatorListener继承实现实现44.3.1类图Frameinti//标识,控制点击数字显示在相应TextFieldintf//标识,控制程序产生四个不同随机数intf1//标识,控制A、B结果的显示intA//计数,随机数与输入数数值和位置都相同的数字个数intB//计数,随机数与输入数数值相同但位置都不同的数字个数intEnter[]//存储游戏者输入的四个数字intArr[]//存储程序产生的四个随机数TextFieldtf1,tf2,tf3,tf4//显示输入的数字TextFieldtf5,tf6//显示A、B结果Panelp1,p2,p3,p4//容器Buttonb0,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,11,b12//按钮Labell1,l2//显示A、BpublicMyFrame()//实现游戏界面publicvoidNumStore(ActionEvente2)//游戏者输入四个数字,显示并存储publicvoidEventClick(ActionEvente3)//对相应事件作相应处理publicstaticvoidmain(String[]args)//实例化对象图2NumberListenerActionEvente2//产生触发事件的对象publicvoidactionPerformed(ActionEvente2)//对触发事件的对象进行事件处理图3OperatorListenerActionEvente3//产生触发事件的对象publicvoidactionPerformed(ActionEvente3)//对触发事件的对象进行事件处理图454.3.2页面设计图形界面的设计,考虑到简单、实用、高效等特点,我选择了AWT来实现完成。图54.4测试与分析1)点击开局,程序产生随机数,游戏者点击输入四个不同数字,然后点击确定按钮,程序内部进行比较,最后在A、B对应位置给出结果。图62)若不是全部正确,游戏者可以点击本局重猜,清除显示部分,重新猜数字。图763)当全部猜对后,游戏者可以点击开局,程序产生新的随机数,同时程序内部全部初始化,然后就可以进行新一轮的游戏。图84)点击退出,则结束并退出游戏。4.5程序代码importjava.awt.*;importjava.awt.event.*;publicclassMyFrameextendsFrame{TextFieldtf1=newTextField();TextFieldtf2=newTextField();TextFieldtf3=newTextField();TextFieldtf4=newTextField();TextFieldtf5=newTextField();TextFieldtf6=newTextField();inti=1;intEnter[]=newint[4];intArr[]=newint[4];intA;intB;intf=0;intf1=1;publicMyFrame()//实现游戏界面{super(TonyGuessGame);setLocation(200,200);setSize(200,200);setVisible(true);Panelp1=newPanel(newGridLayout(1,4,10,5));7Panelp2=newPanel(newGridLayout(3,3,6,6));Panelp3=newPanel(newGridLayout(4,1));Panelp4=newPanel(newGridLayout(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);NumberListenernl=newNumberListener();OperatorListenerol=newOperatorListener();Buttonb0=newButton(0);b0.addActionListener(nl);Buttonb1=newButton(1);b1.addActionListener(nl);Buttonb2=newButton(2);b2.addActionListener(nl);Buttonb3=newButton(3);b3.addActionListener(nl);Buttonb4=newButton(4);b4.addActionListener(nl);Buttonb5=newButton(5);b5.addActionListener(nl);Buttonb6=newButton(6);b6.addActionListener(nl);Buttonb7=newButton(7);b7.addActionListener(nl);Buttonb8=newButton(8);b8.addActionListener(nl);Buttonb9=newButton(9);b9.addActionListener(nl);Buttonb10=newButton(本局重猜);b10.addActionListener(ol);Buttonb11=newButton(确定);b11.addActionListener(ol);Buttonb12=newButton(开局);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);8b9.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);Labell1=newLabel(A,Label.CENTER);Labell2=newLabel(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,BorderL