版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计(论文)题 目 名 称 猜数游戏 课 程 名 称 Java 程序设计课程设计 学 生 姓 名 学 号 系 、专 业 信息工程系、07网络工程专业 指 导 教 师 2010年 1 月 3 日摘 要 本程序是一个游戏程序,程序让计算机自动生成一个随机数,让玩家猜,猜的数比随机数大那么提示“大了,比随机数小那么提示“小了,再让玩家重新猜,直到猜对为止,猜对了以后会表扬玩家,并算出玩家共猜了多少次。关键词: 游戏、随机数、猜数目 录1 问题描述.12 需求分析.13 概要设计.1 自定义类说明.1 程序流程分析 . 14 详细设计.4 game类的实现.45 测试分析.66 课程设计总结.8参
2、考文献9附录局部源程序清单101 问题描述计算机产生随机数,猜中即胜,猜不中,提示是大了还是小了,继续猜,直至猜到,给出所用次数和评语。2 需求分析 需要创立一个game类,该类实现产生随机数、提示出错信息、计算猜错次数、给出玩家游戏信息等功能。其中包括一个循环函数,玩家猜的不对就提示“大了或“小了要求玩家再次输入,不断循环,直到玩家猜对。还包括提示出错程序,即玩家输入不是数字或不输入时会提示出错。还有计数函数,计算玩家共猜了多少次。最后是猜对表扬函数,即玩家猜对后表扬玩家,同时给出玩家共猜了多少次的信息。3 概要设计31自定义类说明类名: game类1作用: 主类,用来2继承的父类: 没有3
3、实现的接口: 没有 4成员变量说明: 整型变量rnd:计算机产生的随机数 整型变量counter:存放猜数次数的变量 字符串变量str:存放输入字符串5成员方法说明: ():随机产生一个数 :产生一个输入消息对话框 :产生一个输出消息对话框 :强制类型转换32 程序流程分析开始显示“小了i<rnd不能为空,错误输入错误输入!inti=Integer.parseInt(str);str.equals("")不是数字c+intc=0true计算机产生随机数请输入数据,并赋值给stri>rndcounter>5显示“大了成功,你只猜了counter次,你真是太棒
4、了 恭喜你猜对了,你猜了counter次import java.awt.event.*;import javax.swing.*;import java.io.*;import java.security.*;import javax.crypto.*;import javax.crypto.spec.*;public class FileEncrypterT extends JFrame Package key;final JButton jbE=new JButton("加密");final JButton jbD=new JButton("解密")
5、;FileEncrypterT()super("文件加密器(TriDES)");setBounds(100,100,600,380);this.setResizable(false);Container c=getContentPane();c.setLayout(new FlowLayout();final FilePanel fp = new FilePanel("文件选择");c.add(fp);final KeyPanel pp=new KeyPanel("输入Key");c.add(pp);jbE.addActionList
6、ener(new ActionListener()public void actionPerformed(ActionEvent event)File file = new File(fp.getFileName();if (file.exists()encrypt(file.getAbsoluteFile(),pp.getKey();elseJOptionPane.showMessageDialog( null,"请选择文件!","提示",JOptionPane.OK_OPTION););jbD.addActionListener(new Action
7、Listener()public void actionPerformed(ActionEvent event)File file = new File(fp.getFileName();if (file.exists()decrypt(file.getAbsoluteFile(),pp.getKey();elseJOptionPane.showMessageDialog(null,"请选择文件!","提示",JOptionPane.OK_OPTION););getContentPane().add(jbE);getContentPane().add(j
8、bD);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 bytK1 = getKeyByStr(sKey.substring(0,16); byte bytK2 = getKeyByStr(sKey.substring(16,32); byte bytK3 = getKeyByStr(sKey.substring(32,
9、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 bytOut = encryptByDES(encryptByDES( encryptByDES(bytIn,bytK1),bytK2),bytK3); String fileOut = fileIn.getPath() + ".tdes"
10、 FileOutputStream fos = new FileOutputStream(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
11、); catch(Exception e)e.printStackTrace();private void decrypt(File fileIn,String sKey)try if(sKey.length() = 48) String strPath = fileIn.getPath();if(strPath.substring(strPath.length()-5).toLowerCase().equals(".tdes") strPath = strPath.substring(0,strPath.length()-5);else JOptionPane.showM
12、essageDialog(this,"不是合法的加密文件!","提示",JOptionPane.OK_OPTION);return;JFileChooser chooser = new JFileChooser();chooser.setCurrentDirectory(new File(".");chooser.setSelectedFile(new File(strPath);int ret = chooser.showSaveDialog(this);if(ret=JFileChooser.APPROVE_OPTION)byte
13、 bytK1 = 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 byt
14、Out = decryptByDES(decryptByDES(decryptByDES(bytIn,bytK3),bytK2),bytK1); File fileOut = chooser.getSelectedFile();fileOut.createNewFile();FileOutputStream fos = new FileOutputStream(fileOut);for(int i = 0;i<bytOut.length;i+)fos.write(int)bytOuti);fos.close();JOptionPane.showMessageDialog(this,&qu
15、ot;解密成功!","提示",JOptionPane.OK_OPTION);elseJOptionPane.showMessageDialog(this,"密码长度必须等于48!","错误信息 ",JOptionPane.ERROR_MESSAGE);catch(Exception e)JOptionPane.showMessageDialog(this,"解密失败,请核对密码!","提示",JOptionPane.OK_OPTION);private byte encryptByDE
16、S(byte bytP,byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey); SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); SecretKey sk = skf.generateSecret(desKS); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.ENCRYPT_MODE,sk); return cip.doFinal(
17、bytP);private byte decryptByDES(byte bytE,byte bytKey) throws Exception DESKeySpec desKS = new DESKeySpec(bytKey); SecretKeyFactory skf = SecretKeyFactory.getInstance("DES"); SecretKey sk = skf.generateSecret(desKS); Cipher cip = Cipher.getInstance("DES"); cip.init(Cipher.DECRYPT
18、_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(16*getChrInt(str.charAt(2*i)getChrInt(str.charAt(2*i+1);bReti = itg.byteValue();return bRet;private int getChrInt(char chr)int iRet=0;
19、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="4".charAt(0) iRet = 4;if(chr="5".charAt(0) iRet = 5;if(chr="6".charAt(0) iRet = 6;if(chr="7"
20、.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".charAt(0) iRet = 11;if(chr="C".charAt(0) iRet = 12;if(chr="D".charAt(0) iRet = 13;if(chr="E".charAt(0) iRet
21、= 14;if(chr="F".charAt(0) iRet = 15;return iRet; System.exit(0);counter+;结束 图3.1 主程序流程图程序运行时计算机产生一个随机数,并把这个随机数赋值给rnd,再进入while循环,程序要求玩家输入一个数字,不为数字或输入为空时,弹出对话框,提示输入为空和错误输入。当输入的数比随机数小时弹出对话框提示“小了,当输入的数比随机数大时弹出对话框提示“大了,要求玩家再次输入数字直到输入的数和随机数一样时退出循环,并弹出成功对话框,给出评语“恭喜你猜对了,你猜了counter 次或“你只猜了 counter
22、次,你真是太棒了!。4 详细设计41game类的实现/创立game类public class Game public static void main(String args) /rnd是计算机产生的随机数 int rnd=(int)(Math.random()*100)+1; /counter用来统计玩家猜数次数 int counter=1; while(true) /输入对话框,用showInputDialog方法 String str=javax.swing.JOptionPane.showInputDialog("请输入数据:"); /定义一个字符数组,将str转换
23、后的值赋给它 char sarray =str.toCharArray(); for(int c=0;c<sarray.length;c+) /判断是否为数字,假设不是那么提示错误 if(!Character.isDigit(sarrayc) javax.swing.JOptionPane.showMessageDialog(null,"错误输入!"); System.exit(0); /判断是否空if (str.equals("") /单纯显示信息,用showMessageDialog方法 JOptionPane.showMessageDialo
24、g(null, "不能为空!","错误", JOptionPane.ERROR_MESSAGE); /把str的值强制转换为整型并赋给i int i=Integer.parseInt(str); /判断玩家输入值与随机数大小,小了那么给出对话框提示“小了,大了那么提示“大了 if(i<rnd) javax.swing.JOptionPane.showMessageDialog(null,"小了"); else if(i>rnd) javax.swing.JOptionPane.showMessageDialog(null,
25、"大了"); else /猜对后,根据猜想次数给出相应的评价 if(counter>5) javax.swing.JOptionPane.showMessageDialog(null,"恭喜你猜对了!n你猜了 "+ counter + " 次!"); else JOptionPane.showMessageDialog(null,"成功!n你只猜了 "+ counter + " 次!n你真是太棒了!"); System.exit(0); counter+; 5 测试分析程序运行界面如下:(
26、1)输入对话框:当程序运行时自动弹出的对话框,要求输入一个数字2输入不是数字时:当输入的不是数字是会弹出错误输入的对话框3输入为空时:没有输入按了确定时,弹出不能为空的对话框4输入的数比随机数大或小时:当输入的数比计算机产生的随机数大了时弹出对话框,提示“大了或“小了,按确定后再重新输入直到猜对5输入正确时:当输入数字跟计算机产生的随机数相同时,给出对话框,提示成功,并给出评语6 课程设计总结这次课程设计的成功来之不易,一路艰辛坎坷,由最初接到课题时的茫然不知如何动手,到后来和帮我的同学钻研探讨后一步步接近成功,有喜有犹,有了新的思路时兴奋得拍手,发现思路行不通或发现编写程序出的一个个错误时愁
27、眉苦脸,真让我痛并快乐着这种努力钻研剔除一个个错误后一步步接近成功的经验,是我最大的收获,让我有了屡败屡战的优秀品质。通过这次课程设计我的Jave编程熟练了很多,我想感谢我的指导老师许老师,感谢老师的细心认真的辅导,他的帮助让我从开始的一片茫然到后来的豁然开朗。这次课程设计能够顺利的完成,除了我个人的努力,还有同学的帮助,同时也离不开指导老师的答疑解惑。参考文献1 李尊朝,苏军Java语言程序设计第二版北京:中国铁道出版社,20072 印昊Java与面向对象程序设计教程北京:高等教育出版社,19993 耿祥义,张跃平Java2 实用教程第二版北京:清华大学出版社,20064 黄同成,黄俊民,董建寅数据结构M北京:中国电力出版社,2021附录局部源程序清单import java.awt.*;import javax.swing.*;public class Ga
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海事内部安全制度
- 海运公司内部管理制度
- 云南文化艺术职业学院《内科护理学(二)》2024-2025学年第二学期期末试卷
- 煤矿内部监管制度
- 煤矿通防科内部管理制度
- 烟台科技学院《电子商务物流管理》2024-2025学年第二学期期末试卷
- 甲方内部管理制度
- 监理内部质量考核制度
- 磷矿矿山内部管理制度
- 科室内部报账制度及流程
- 垃圾填埋场封场与复绿方案
- 八年级地理(下册星球版)复习提纲
- 广西版五年级下册美术全册教案【完整版】
- 新人教版一年级数学下册全册教案(表格式)
- 交通事故车辆定损表
- 班组管理方面技能培训方案
- 锂产业发展现状及趋势课件
- 家谱树形图模板
- 校园文化建设情况自查报告
- 【基于7P理论的汉庭酒店服务营销策略14000字(论文)】
- 总经理财务知识培训
评论
0/150
提交评论