Java程序设计课程设计猜数游戏_第1页
Java程序设计课程设计猜数游戏_第2页
Java程序设计课程设计猜数游戏_第3页
Java程序设计课程设计猜数游戏_第4页
Java程序设计课程设计猜数游戏_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程设计(论文)题 目 名 称 猜数游戏 课 程 名 称 java 程序设计课程设计 学 生 姓 名 学 号 系 、专 业 信息工程系、07网络工程专业 指 导 教 师 2010年 1 月 3 日摘 要 本程序是一个游戏程序,程序让计算机自动生成一个随机数,让玩家猜,猜的数比随机数大则提示“大了”,比随机数小则提示“小了”,再让玩家重新猜,直到猜对为止,猜对了以后会表扬玩家,并算出玩家共猜了多少次。关键词: 游戏、随机数、猜数目 录1 问题描述.12 需求分析.13 概要设计.13.1 自定义类说明.13.2 程序流程分析 . 14 详细设计.44.1 game类的实现.45 测试分析.66

2、课程设计总结.8参考文献9附录(部分源程序清单)101 问题描述计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用次数和评语。2 需求分析 需要创建一个game类,该类实现产生随机数、提示出错信息、计算猜错次数、给出玩家游戏信息等功能。其中包括一个循环函数,玩家猜的不对就提示“大了”或“小了”要求玩家再次输入,不断循环,直到玩家猜对。还包括提示出错程序,即玩家输入不是数字或不输入时会提示出错。还有计数函数,计算玩家共猜了多少次。最后是猜对表扬函数,即玩家猜对后表扬玩家,同时给出玩家共猜了多少次的信息。3 概要设计31自定义类说明3.1.1类名: game类(1)

3、作用: 主类,用来(2)继承的父类: 没有(3)实现的接口: 没有 (4)成员变量说明: 整型变量rnd:计算机产生的随机数 整型变量counter:存放猜数次数的变量 字符串变量str:存放输入字符串(5)成员方法说明: math.random():随机产生一个数 joptionpane.showinputdialog:产生一个输入消息对话框 joptionpane.showmessagedialog:产生一个输出消息对话框 integer.parseint:强制类型转换32 程序流程分析开始显示“小了”i<rnd不能为空,错误输入错误输入!inti=integer.parseint(

4、str);str.equals("")不是数字c+c<sarray.lengthintc=0true计算机产生随机数请输入数据,并赋值给stri>rndcounter>5显示“大了”成功,你只猜了counter次,你真是太棒了 恭喜你猜对了,你猜了counter次import java.awt.event.*;import javax.swing.*;import java.io.*;import java.security.*;import javax.crypto.*;import javax.crypto.spec.*;public class fi

5、leencryptert extends jframe package key;final jbutton jbe=new jbutton("加密");final jbutton jbd=new jbutton("解密");fileencryptert()super("文件加密器(trides)");setbounds(100,100,600,380);this.setresizable(false);container c=getcontentpane();c.setlayout(new flowlayout();final fil

6、epanel fp = new filepanel("文件选择");c.add(fp);final keypanel pp=new keypanel("输入key");c.add(pp);jbe.addactionlistener(new actionlistener()public void actionperformed(actionevent event)file file = new file(fp.getfilename();if (file.exists()encrypt(file.getabsolutefile(),pp.getkey();

7、elsejoptionpane.showmessagedialog( null,"请选择文件!","提示",joptionpane.ok_option););jbd.addactionlistener(new actionlistener()public void actionperformed(actionevent event)file file = new file(fp.getfilename();if (file.exists()decrypt(file.getabsolutefile(),pp.getkey();elsejoptionpane

8、.showmessagedialog(null,"请选择文件!","提示",joptionpane.ok_option););getcontentpane().add(jbe);getcontentpane().add(jbd);public static void main(string args) fileencryptert fe=new fileencryptert();fe.show();private void encrypt(file filein,string skey)try if(skey.length() = 48) byte by

9、tk1 = getkeybystr(skey.substring(0,16); byte bytk2 = getkeybystr(skey.substring(16,32); byte bytk3 = getkeybystr(skey.substring(32,48); fileinputstream fis = new fileinputstream(filein); byte bytin = new byte(int)filein.length(); for(int i = 0;i<filein.length();i+) bytini = (byte)fis.read(); byte

10、 bytout = encryptbydes(encryptbydes( encryptbydes(bytin,bytk1),bytk2),bytk3); string fileout = filein.getpath() + ".tdes" fileoutputstream fos = new fileoutputstream(fileout); for(int i = 0;i<bytout.length;i+) fos.write(int)bytouti);fos.close();joptionpane.showmessagedialog(this,"加

11、密成功!","提示",joptionpane.ok_option);elsejoptionpane.showmessagedialog(this,“密码长度必须等于48!”,“错误信息”joptionpane.error_message); catch(exception e)e.printstacktrace();private void decrypt(file filein,string skey)try if(skey.length() = 48) string strpath = filein.getpath();if(strpath.substring

12、(strpath.length()-5).tolowercase().equals(".tdes") strpath = strpath.substring(0,strpath.length()-5);else joptionpane.showmessagedialog(this,"不是合法的加密文件!","提示",joptionpane.ok_option);return;jfilechooser chooser = new jfilechooser();chooser.setcurrentdirectory(new file(&q

13、uot;.");chooser.setselectedfile(new file(strpath);int ret = chooser.showsavedialog(this);if(ret=jfilechooser.approve_option)byte bytk1 = getkeybystr(skey.substring(0,16);byte bytk2 = getkeybystr(skey.substring(16,32);byte bytk3 = getkeybystr(skey.substring(32,48);fileinputstream fis = new filei

14、nputstream(filein);byte bytin = new byte(int)filein.length();for(int i = 0;i<filein.length();i+)bytini = (byte)fis.read();byte bytout = decryptbydes(decryptbydes(decryptbydes(bytin,bytk3),bytk2),bytk1); file fileout = chooser.getselectedfile();fileout.createnewfile();fileoutputstream fos = new fi

15、leoutputstream(fileout);for(int i = 0;i<bytout.length;i+)fos.write(int)bytouti);fos.close();joptionpane.showmessagedialog(this,"解密成功!","提示",joptionpane.ok_option);elsejoptionpane.showmessagedialog(this,"密码长度必须等于48!","错误信息 ",joptionpane.error_message);catch(

16、exception e)joptionpane.showmessagedialog(this,"解密失败,请核对密码!","提示",joptionpane.ok_option);private byte encryptbydes(byte bytp,byte bytkey) throws exception deskeyspec desks = new deskeyspec(bytkey); secretkeyfactory skf = secretkeyfactory.getinstance("des"); secretkey sk

17、 = skf.generatesecret(desks); cipher cip = cipher.getinstance("des"); cip.init(cipher.encrypt_mode,sk); return cip.dofinal(bytp);private byte decryptbydes(byte byte,byte bytkey) throws exception deskeyspec desks = new deskeyspec(bytkey); secretkeyfactory skf = secretkeyfactory.getinstance(

18、"des"); secretkey sk = skf.generatesecret(desks); cipher cip = cipher.getinstance("des"); cip.init(cipher.decrypt_mode,sk); return cip.dofinal(byte);private byte getkeybystr(string str)byte bret = new bytestr.length()/2;for(int i=0;i<str.length()/2;i+)integer itg= newinteger(1

19、6*getchrint(str.charat(2*i)getchrint(str.charat(2*i+1);breti = itg.bytevalue();return bret;private int getchrint(char chr)int iret=0;if(chr="0".charat(0) iret = 0;if(chr="1".charat(0) iret = 1;if(chr="2".charat(0) iret = 2;if(chr="3".charat(0) iret = 3;if(chr=

20、"4".charat(0) iret = 4;if(chr="5".charat(0) iret = 5;if(chr="6".charat(0) iret = 6;if(chr="7".charat(0) iret = 7;if(chr="8".charat(0) iret = 8;if(chr="9".charat(0) iret = 9;if(chr="a".charat(0) iret = 10;if(chr="b".chara

21、t(0) iret = 11;if(chr="c".charat(0) iret = 12;if(chr="d".charat(0) iret = 13;if(chr="e".charat(0) iret = 14;if(chr="f".charat(0) iret = 15;return iret; system.exit(0);counter+;结束 图3.1 主程序流程图程序运行时计算机产生一个随机数,并把这个随机数赋值给rnd,再进入while循环,程序要求玩家输入一个数字,不为数字或输入为空时,弹出对话框

22、,提示输入为空和错误输入。当输入的数比随机数小时弹出对话框提示“小了”,当输入的数比随机数大时弹出对话框提示“大了”,要求玩家再次输入数字直到输入的数和随机数一样时退出循环,并弹出成功对话框,给出评语“恭喜你猜对了,你猜了counter 次”或“你只猜了 counter 次,你真是太棒了!”如图3.1所示。4 详细设计41game类的实现/创建game类public class game public static void main(string args) /rnd是计算机产生的随机数 int rnd=(int)(math.random()*100)+1; /counter用来统计玩家猜数

23、次数 int counter=1; while(true) /输入对话框,用showinputdialog方法 string str=javax.swing.joptionpane.showinputdialog("请输入数据:"); /定义一个字符数组,将str转换后的值赋给它 char sarray =str.tochararray(); for(int c=0;c<sarray.length;c+) /判断是否为数字,若不是则提示错误 if(!character.isdigit(sarrayc) javax.swing.joptionpane.showmessa

24、gedialog(null,"错误输入!"); system.exit(0); /判断是否空if (str.equals("") /单纯显示信息,用showmessagedialog方法 joptionpane.showmessagedialog(null, "不能为空!","错误", joptionpane.error_message); /把str的值强制转换为整型并赋给i int i=integer.parseint(str); /判断玩家输入值与随机数大小,小了则给出对话框提示“小了”,大了则提示“大了”

25、if(i<rnd) javax.swing.joptionpane.showmessagedialog(null,"小了"); else if(i>rnd) javax.swing.joptionpane.showmessagedialog(null,"大了"); else /猜对后,根据猜测次数给出相应的评价 if(counter>5) javax.swing.joptionpane.showmessagedialog(null,"恭喜你猜对了!n你猜了 "+ counter + " 次!");

26、 else joptionpane.showmessagedialog(null,"成功!n你只猜了 "+ counter + " 次!n你真是太棒了!"); system.exit(0); counter+; 5 测试分析程序运行界面如下:(1)输入对话框:当程序运行时自动弹出的对话框,要求输入一个数字(2)输入不是数字时:当输入的不是数字是会弹出错误输入的对话框(3)输入为空时:没有输入按了确定时,弹出不能为空的对话框(4)输入的数比随机数大或小时:当输入的数比计算机产生的随机数大了时弹出对话框,提示“大了”或“小了”,按确定后再重新输入直到猜对(5

27、)输入正确时:当输入数字跟计算机产生的随机数相同时,给出对话框,提示成功,并给出评语6 课程设计总结这次课程设计的成功来之不易,一路艰辛坎坷,由最初接到课题时的茫然不知如何动手,到后来和帮我的同学钻研探讨后一步步接近成功,有喜有犹,有了新的思路时兴奋得拍手,发现思路行不通或发现编写程序出的一个个错误时愁眉苦脸,真让我痛并快乐着这种努力钻研剔除一个个错误后一步步接近成功的经验,是我最大的收获,让我有了屡败屡战的优秀品质。通过这次课程设计我的jave编程熟练了很多,我想感谢我的指导老师许老师,感谢老师的细心认真的辅导,他的帮助让我从开始的一片茫然到后来的豁然开朗。这次课程设计能够顺利的完成,除了我个人的努力,还有同学的帮助,同时也离不开指导老师的答疑解惑。参考文献1 李尊朝,苏军java语言程序设计(第二版)北京:中国铁道出版社,20072 印昊java与面向对象程序设计教程北京:高等教育出版社,19993 耿祥义,张跃平java2 实用教程(第二版)北京:清华大学出版社,20064 黄同成,黄俊民,董建寅数据结构m北京:中国电力出版社,2008附录(部分源程序清单)import java.awt.*;import javax.swing.*;public class game public static void main

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论