多线程猜数字游戏实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

程序设计报告(2013学年第二学期)题目:多线程猜数字游戏(3人)专业市场营销组长学号姓名B13110601万青组员学号姓名B13110602马紫薇B131106周颖指导教师崔红燕指导单位计算机学院、软件学院日期2014年6月20日成员分工组长(万青)组员(马紫薇)组员(周颖)评分细则评分项优秀良好中等差遵守机房规章制度上机时的表现学习态度程序准备情况程序设计能力团队合作精神课题功能实现情况算法设计合理性用户界面设计报告书写认真程度内容详实程度文字表达熟练程度回答问题准确度简短评语教师签名:年月日评分等级备注评分等级共五种:优秀、良好、中等、及格、不及格多线程猜数字游戏(3人)实验报告一、课题内容和要求一、课题描述:利用Java多线程机制编写一个由三个线程玩猜数字的游戏。第一个线程负责随机给出1~100之间的一个整数,第二、三个线程负责猜出这个数。要求每当第二或第三个线程给出自己的猜测后,第一个线程都会提示“猜小了”、“猜大了”或“猜对了”。猜数之前,要求第二、第三个线程要等待第一个线程设置好要猜测的数。第一个线程设置好猜测数之后,第二、第三个线程要轮流猜数,其原则是:第二或第三个线程给出自己的猜测后,等待第一个线程给出提示;第一个线程给出提示后,等待第二或第三个线程给出猜测,如此进行,直到其中一个线程给出正确的猜测后,三个线程均进入死亡状态。二、课题要求基本要求:1.熟悉使用Thread创建线程对象,通常使用的构造方法是:Thread(Runnabletarget);该构造方法中的参数是一个Runnable类型的接口。2.熟悉线程同步的概念及方法,如wait(),notify(),notifyAll()等。3.利用Java多线程机制编写一个由三个线程玩猜数字的游戏,第一个线程负责随机给出1~100之间的一个整数,第二、三个线程负责猜出这个数。扩展要求:1.给程序增加GUI设计,使程序具有更好的交互界面。2.将游戏扩展为网络游戏,服务器端负责出数字,两个客户端负责猜数字。二、需求分析设计一个猜数字游戏程序,要求具体如下特性:(1)趣味性:要求游戏内容丰富多彩,语言风趣幽默。(2)大众性:要求游戏界面操作简单,游戏规则简单易懂。(3)合理性:游戏设计严谨,有条理,具体需求如下①输入任意一个数字。数字的要求是1—100的自然数即可。②系统对您输入的数字进行判断。如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。系统将提示您,数字太大请您重新输入。如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。③游戏开始时,系统自动记录您猜数字的时间,结束后显示游戏共花费的时间。④每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。⑤在游戏开始时,自动显示游戏规则。⑥在游戏结束时,可以选择关闭游戏,或者再来一局。(1)概要设计1、主要功能的流程图2、系统总体设计猜数字游戏—游戏随机给出一个1—100(包括1和100)之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。经过几次猜测与提示后,最终推出答案。游戏界面:采用图形界面显示。页面有如下功能:开始,结束,重来,帮助。游戏开始后,由计算机产生一个1-100的随机数,不显示在图形界面,但显示在字符界面。用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。同时,计算机开始对游戏进行计时和计数功能。游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即可。想控制界面大小只需拖拽图形界面边框即可。游戏结束后,可以选择“关闭”游戏,或者是“重新开始”。3、功能模块设计4、类的设计(1)类的定义类是把具有相同属性的事物划分为一类,从而得出抽象的概念。在面向对象程序设计中,类是一个独立的程序单位,是具有相同属性和方法的一组对象的集合,它为属于该类的全部对象提供了抽象描述。类的概念使我们能对属于该类的全部对象进行统一的描述。在定义对象之前应先定义类。描述一个类需要指明下述三个方面内容:类标识:类的一个有别于其他类的名字。属性说明:用来描述相同对象的静态特征。方法说明:用来描述相同对象的动态特征。(2)定义类的格式class类名数据成员成员方法类的结构是由类说明和类体两部分组成的。类的说明部分由关键字class与类名组成,类名的命名遵循Java标识符的定义规则。类体是类声明中花括号所包括的全部内容,它又是由数据成员(属性)和成员方法(方法)两部分组成。数据成员描述对象的属性;成员方法则刻画对象的行为或动作,每一个成员方法确定一个功能或操作。(3)类的分类从用户的角度看,Java源程序中的类分为两种:系统定义的类:即Java类库,它是系统定义好的类。Java语言由语法规则和类库两部分组成,语法规则确定Java程序的书写规范;类库则提供了Java程序与运行它的系统软件(Java虚拟机)之间的接口。用户自定义类:系统定义的类虽然实现了许多常见的功能,但是用户程序仍然需要针对特定问题的特定逻辑来定义自己的类。进行Java程序设计,实际上就是定义类的过程。一个Java源程序文件往往是由许多个类组成的。(4)类的搭建首先,搭建Java程序框架。打开Jcreator,新建名为GuessNumberGame的项目,然后新建名为GuessNumber的Java类。给GuessNumber加上合适的javadoc。(1)Random(随机数)Random(随机数)的功能就是借助JavaAPI提供的Random类来产生一个随机数。定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。Random类是在java.util这个包中。建立时可以手动在源程序顶部输入importjava.util.Random;语句来申明该程序将要使用java.util包中的Random类。也可以运用Eclipse,把光标移动到有红色波浪线的Random上,然后按下Ctrl+Shift+M,Eclipse会自动完成导入的工作。此时保存一下源代码,警告就会消失。四、源程序代码1、基础题程序代码importjava.util.Random;publicclassGuessNumber{publicstaticvoidmain(String[]args){ThreadOneone=newThreadOne();one.start();ThreadTwotwo=newThreadTwo(猜题线程1);two.start();ThreadTwothree=newThreadTwo(猜题线程2);try{Thread.sleep(2000);}catch(InterruptedExceptione){e.printStackTrace();}three.start();while(true){//如果有猜对的就停止所有线程if(two.getGuessResult().equals(猜对了)||three.getGuessResult().equals(猜对了)){one.stop();two.stop();three.stop();break;}}}}//出题线程classThreadOneextendsThread{privatestaticinttheNumber;//存放要猜的数字publicvoidrun(){Randomrandom=newRandom();theNumber=random.nextInt(100);System.out.println(出题线程出的题为:+theNumber);}//猜数字publicstaticStringguessNumber(intnumber){if(theNumbernumber){return小了;}elseif(theNumbernumber){return大了;}else{return猜对了;}}}//猜题线程classThreadTwoextendsThread{privateStringthreadName;privateintminNum=0;privateintmaxNum=100;StringguessResult=;publicThreadTwo(StringthreadName){this.threadName=threadName;}publicStringgetGuessResult(){returnguessResult;}publicvoidrun(){while(true){try{sleep(4000);}catch(InterruptedExceptione){e.printStackTrace();}intnowNum;Randomrandom=newRandom();//生成最小值和最大值之间的一个数nowNum=minNum+random.nextInt(maxNum-minNum);//把生成的数发到出题线程上,返回结果guessResult=ThreadOne.guessNumber(nowNum);if(guessResult.equals(大了)){maxNum=nowNum;System.out.println(threadName+猜:+nowNum++guessResult);}elseif(guessResult.equals(小了)){minNum=nowNum;System.out.println(threadName+猜:+nowNum++guessResult);}else{System.out.println(threadName+猜对了,结果是:+nowNum);}}}}2、拓展题程序代码importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.KeyAdapter;importjava.awt.event.KeyEvent;importjava.util.Random;importjavax.swing.JButton;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JTextField;importjavax.swing.WindowConstants;publicclassGuessNumberextendsjavax.swing.JFrame{{//SetLook&Feeltry{//设置窗口外观为windows外观javax.swing.UIManager.setLookAndFeel(com.sun.java.swing.plaf.windows.WindowsLookAndFeel);}catch(Exceptione){e.printStackTrace();}}privateJLabeljLabel1;privateJTextFieldjTextField1;privateJButtonjButton1;privateJButtonjButton2;privateintnumber=0;privateintcounter=0;longstartTime=System.currentTimeMillis();longendTime;/***Auto-generatedmainmethodtodisplaythisJFrame*/publicstaticvoidmain(String[]args){GuessNumberinst=newGuessNumber();inst.setVisible(true);//显示窗口}/***新建一个随机数产

1 / 16
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功