猜数字小游戏JAVA程序报告docxWord格式文档下载.docx
《猜数字小游戏JAVA程序报告docxWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《猜数字小游戏JAVA程序报告docxWord格式文档下载.docx(14页珍藏版)》请在冰豆网上搜索。
若输入的字符不是合法字符,系统将提示,您输入的数字不合法,请从新输入,游戏开始时,系统自动记录您猜数字的时间和次数,结束后显示游戏共花费的次数和时间及对游戏结果的评价。
二、用户需求分析
设计一个猜数字游戏程序,要求具体如下特性:
a.输入任意一个数字。
数字的要求是1—100的自然数即可。
b.系统对您输入的数字进行判断。
如果玩家输入的数字与计算机随机生成数相比较,输入的数字比随机生成数小.系统将提示您,数字太小请您重新输入。
如果玩家输入的数字与计算机随机生成数相比较,如果输入的数字比随机生成数大。
系统将提示您,数字太大请您重新输入。
如果玩家输入的字符不是合法字符,系统将提示您,您输入的数字不合法,请从新输入。
c.游戏开始时,系统自动记录您猜数字的时间,结束后显示游戏共花费的时间。
d.每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。
e.在游戏结束时,可以选择关闭游戏,或者再来一局
f.游戏结束前可选择直接显示答案
三、问题描述
1.课程设计的任务:
根据所选题目,完成课程设计的分析、设计和编码,写出课程设计报告。
(1)掌握Java的语言规范,面向对象的核心概念和特性;
(2)掌握Java的编程技术,包括异常处理,图形界面设计,多线程,网络通信程序等;
(3)掌握Java应用软件的开发环境和开发过程;
(4)掌握面向对象的思想和程序设计方法。
2.课程设计的要求:
设计一个猜数字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数字来匹配上面所产生的数字。
用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息,当有偏差时,将会提醒偏差,如偏大或者是偏小。
四、模块设计
1.系统总体设计
2.功能模块设计
3.流程图
五、功能设计
我们可以借助JavaAPI提供的Random类来产生一个随机数。
首先在main函数中加入以下代码:
Randomrandom=newRandom();
number=random.nextInt(100);
//产生一个1-100间的随机数
2.输入判断模块
在游戏界面中输入不合法
try{
guess=Integer.parseInt(jTextField1.getText());
//玩家输入获取
}
catch(Exceptione){
JOptionPane.showMessageDialog(null,"
请输入一个1-100之间的整数"
);
//显示对话框,输入不合法
jTextField1.setText("
"
//清空文本框内容
jTextField1.requestFocus();
return;
}
//记录玩家猜测的次数
counter=0;
//计数器增加一
counter++;
4.计时模块
计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。
longstartTime=System.currentTimeMillis();
longendTime=System.currentTimeMillis();
5.输入输出模块
//对玩家的输入进行判断。
if(guess>
number){
JOptionPane.showMessageDialog(null,"
o(≧v≦)o猜大了"
jTextField1.setText("
jTextField1.requestFocus();
return;
}
if(guess<
o(≧v≦)o太小啦"
if(guess==number){
endTime=System.currentTimeMillis();
6.成绩判断模块
//判断成绩。
switch(counter){
case1:
O(∩_∩)O太给力了吧"
break;
case2:
case3:
JOptionPane.showMessageDialog(null,"
OHMYGOD!
!
好腻害"
case4:
case5:
case6:
O(∩_∩)O猜对,很不错哦!
case7:
case8:
case9:
case10:
(+﹏+)有点慢,还要多练习"
);
default:
(+﹏+)oh!
NO,太慢啦,"
六、异常处理
我们在运行程序时往往会出现许多错误,而Java语言提供了异常(Exception)处理机制帮助程序员发现并处理异常。
所谓异常,就是在程序执行过程中能干扰程序正常流程的事件。
导致异常的原因很多,比如文件找不到、数组越界、除以零等。
当异常出现时,一个异常对象将被自动生成并传递给Java“运行时环境”,如果“运行时环境”找不到异常句柄,Java程序便会自行中断。
try{statement(s);
}catch(exceptiontype1name){
statement(s);
}catch(exceptiontype2name){
}finally{
}
try语句括起来的语句可能抛出异常。
try语句至少要搭配一个catch语句或finally语句,不能单独使用,我设计的猜数字游戏需要从控制台获取玩家输入的数字,有多个异常处理
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
getContentPane().setLayout(null);
}catch(Exceptione){
e.printStackTrace();
}
//获取玩家的输入
guess=Integer.parseInt(jTextField1.getText());
}catch(Exceptione)
七、调试分析
八、不足之处
本小游戏还未建立游戏记录部分,无法记录玩家游戏成绩记录和建立游戏排行榜
在界面设计方面还较为简单,
游戏还有很多可修改和增加难度的地方
总结
经过这几天努力终于完成了这份课设,虽然在操作的过程中我都遇到了许多的困难,但是却使我得到了许多的意外收获。
Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中立的,可移植的,性能优异、多线程的动态语言。
在写代码的过程中我们也遇到了一些的困难,就是对一些有关Java语言的不理解,我便又到课本中去查找。
一个项目的成败关键不全在于技术。
要想在一个愉快的氛围里边以轻松的心情来完成紧张的工作,严谨的态度和工作的热情都是必不可少的。
以前上课时有许多的问题并没有真正的认识到,但通过这次试验的制作,使我掌握了许多更重要的知识点。
程序附页
packageJAVA;
publicclassLoginextendsJFrame{
ArrayList<
String>
names=newArrayList<
();
pwd=newArrayList<
privatestaticfinallongserialVersionUID=1L;
publicLogin(){
this.setLocation(100,100);
this.setSize(400,180);
this.setTitle("
欢迎进入有趣的猜数字小游戏"
loginWindow();
setLocationRelativeTo(null);
//窗口居中显示
this.setVisible(true);
publicvoidloginWindow(){
JLabelname=newJLabel("
请输入玩家姓名:
JLabelpassword=newJLabel("
请输入登陆密码:
finalJTextFieldtfName=newJTextField(20);
finalJPasswordFieldtfPassword=newJPasswordField(20);
JButtonok=newJButton("
注册"
JButtoncancel=newJButton("
登录"
JPanelpm=newJPanel();
JPanelp1=newJPanel();
JPanelp2=newJPanel();
JPanelp3=newJPanel();
p1.add(name);
p1.add(tfName);
p2.add(password);
p2.add(tfPassword);
ok.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventarg0){
names.add(tfName.getText());
pwd.add(tfPassword.getText());
注册成功"
tfName.setText("
tfPassword.setText("
});
cancel.addActionListener(newActionListener(){
//@SuppressWarnings("
deprecation"
)
//@Override
@SuppressWarnings("
//TODOAuto-generatedmethodstub
for(inti=0;
i<
names.size();
i++){
if(names.get(i).equals(tfName.getText())){
if(pwd.get(i).equals(tfPassword.getText())){
JOptionPane.showMessageDialog(null,"
登陆成功"
setVisible(false);
//隐藏原界面
newGuessNum();
//进入主界面
}
else{
用户名或密码有误"
}
}
p3.add(ok);
p3.add(cancel);
pm.add(p1);
pm.add(p2);
pm.add(p3);
this.add(pm);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
publicstaticvoidmain(String[]args){
newLogin();
privateJLabeljLabel1;
privateJTextFieldjTextField1;
privateJButtonjButton1;
privateJButtonjButton2;
privateJButtonjButton3;
privateintnumber=0;
privateintcounter=0;
longstartTime=System.currentTimeMillis();
longendTime;
//计算时间
publicGuessNum(){
super("
猜数字小游戏"
initChuangkou();
Randomrandom=newRandom();
number=random.nextInt(100);
//产生一个1——100的随机数
}
privatevoidinitChuangkou(){
try{
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
//窗口关闭时销毁窗口
//设置窗口布局为绝对布局
JFrameframe=newJFrame("
TestButtons"
frame.setLayout(newFlowLayout());
jLabel1=newJLabel();
getContentPane().add(jLabel1);
jLabel1.setText("
<
html>
★欢迎进入有趣的猜数字游戏★请输入1~100中的任意一个数:
/html>
jLabel1.setBounds(75,20,200,50);
jTextField1=newJTextField();
getContentPane().add(jTextField1);
jTextField1.setBounds(110,100,112,28);
jTextField1.addKeyListener(newKeyAdapter(){
publicvoidkeyPressed(KeyEventevt){
jTextField1KeyPressed(evt);
});
jButton1=newJButton();
getContentPane().add(jButton1);
jButton1.setText("
确定"
jButton1.setBounds(120,160,100,25);
jButton1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevt){
jButton1ActionPerformed(evt);
//按钮被点击时执行该方法
});
jButton2=newJButton();
getContentPane().add(jButton2);
jButton2.setText("
显示答案"
jButton2.setBounds(120,200,100,25);
jButton2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevt2){
jButton2ActionPerformed(evt2);
jButton3=newJButton();
getContentPane().add(jButton3);
jButton3.setText("
再来一次"
jButton3.setBounds(120,240,100,25);
jButton3.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEventevt3){
jButton3ActionPerformed(evt3);
pack();
this.setSize(340,400);
//窗口大小
setLocationRelativeTo(null);
//设置窗口在显示器居中显示
}
setVisible(true);
privatevoidjButton2ActionPerformed(ActionEventevt2){
JOptionPane.showMessageDialog(null,"
答案是"
+number);
//直接显示答案
setVisible(false);
//隐藏原界面
return;
privatevoidjButton3ActionPerformed(ActionEventevt3){
newGuessNum();
privatevoidjButton1ActionPerformed(ActionEventevt){
intguess=0;
counter++;
//计数器加一
请输入一个1-100之间的整数"
}
if(guess>
JOptionPane.showMessageDialog(null,"
您总共猜了"
+counter+"
次共花了"
+(endTime-startTime)/1000+"
秒的时间答对正确答案!
//成绩判断
switch(counter){
OHMYGOD