java课设.docx
《java课设.docx》由会员分享,可在线阅读,更多相关《java课设.docx(15页珍藏版)》请在冰豆网上搜索。
java课设
猜数游戏
1.课程设计的目的
通过课程设计把课堂上讲的内容融会贯通,学会设计程序、开发应用软件等工作。
经过实习掌握语言的语法结构,理解类和对象的概念,准确的使用各种数据类型,对面向对象中的继承和多态的概念会使用,在程序中提高代码的重用性,使设计的程序结构清晰、易于维护。
本设计将一个猜数字游戏作为研究对象。
设计出一个由系统随机选出一个1-100的数字不显示出来,由玩家猜这个数字,直到猜中为止,并显示出玩家猜中数字所用时间和次数对玩家做出评判,并对所涉及的相关技术进行初步的探讨。
2.设计方案论证
2.1设计思路
设计一个猜数字游戏程序,该游戏可以由程序随机产生整数,玩游戏者通过由用户输入数字来匹配上面所产生的数字。
用户随机输入数字,当与计算机产生的随机数相符合时,计算机将提醒用户,游戏成功的信息,当有偏差时,将会提醒偏差,如偏大或者是偏小。
设计一个猜数字游戏程序,其具有如下特性:
(1)趣味性
要求游戏内容丰富多彩,语言风趣幽默。
(2)大众性
要求游戏界面操作简单,游戏规则简单易懂。
(3)合理性
游戏设计严谨,有条理,具体需求如下:
① 游戏开始时,自动显示游戏规则,系统自动记录并显示您猜数字的时间。
② 每猜测一次,系统会记录下来,游戏结束后,显示共猜测多少次。
③ 在游戏结束时,可以选择关闭游戏,或者再来一局。
2.2设计方法
2.2.1系统总体设计
猜数字游戏—游戏随机给出一个1—100 (包括1和100) 之间的数字,然后让你猜是什么数字。
你可以随便猜一个数字,游戏会提示太大还是太小,从而缩小结果范围。
经过几次猜测与提示后,最终推出答案。
(如图1)
图1系统设计结构图
2.2.2游戏界面
采用图形界面显示。
页面有如下功能:
开始,结束,重来。
游戏开始后,由计算机产生一个1-100的随机数,不显示在图形界面,但显示在字符界
面。
用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。
同时,计算机开始对游戏进行计时和计数功能。
游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即
可。
想控制界面大小只需拖拽图形界面边框即可。
游戏结束后,可以选择“关闭”游戏,或者是“重新开始”。
功能模块设计(如图2)
图2 功能模块图
2.2.3随机数的获取
功能描述:
玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。
2.2.4输入输出模块
功能描述:
对玩家输入的数字进行判断和提示。
如果玩家输入的不是系统要求的数字,系统将提示您,您输入的不是数字请重新输入.。
如果玩家输入的数字与随机生成数相比较,比随机生成数小.系统提示您,数字太小请您重新输入。
如果玩家输入的数字与随机生成数相比较,比随机生成数大.系统提示您,数字太大请您重新输入。
(如图3)
图3 输入输出模块图
2.2.5判断模块
功能描述:
算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。
(如图4)
图4 判断模块图
2.2.6自动计数模块
功能描述:
系统根据您猜数字的次数,自动计数. (如图5)
图5 自动计数模块图
2.2.7结果输出模块
功能描述:
直到用户猜到数字为止,提示信息是否重新猜数字,如果重新开始将进入下一次游戏,如果关闭将退出游戏系统。
3.设计结果与分析
(1)开始运行程序时图形界面的显示(如图7)
图7 图形显示界面
(2)玩家输入一个数“25”后,点击“确定”,系统提示“猜的有点小了,再大一点!
”。
(如图8)
图8系统提示
(3)玩家再次输入一个数“70”后,点击“确定”,系统提示您“猜的有点大了,再小一点!
”。
(如图9)
图9系统提示
(4)玩家再次输入一个数“32”,点击“确定”,系统提示“猜了半天才猜出来,小同志,尚须努力”,单击确定显示“您总共猜了8次,您猜数字总共花了33秒”。
(如图10 11)
图10 图形界面结果输出图a
图11 图形界面结果输出图b
(5)玩家再重新玩一次,获取随机数后,玩家输入一个随机数“90”,点击“确定”,系统提示“正确”!
您总共猜了2次,您猜数字总共花了14秒”。
(如图12)
图12图形界面结果输出图c
(6)如果玩家输入数字不再1到100以内数字系统提示错误!
(如图13)
图13图形界面提示输入错误
4.设计体会
通过这次课程设计,使我对JAVA这门课又做了一次系统的复习,对各个知识点也都有了更深刻的理解,让我掌握的更扎实,同时也增强了实际操作能力,另一方面也对编程语言有了新的认识,为以后的学习打下了基础。
在本次试验中,给我印象最为深刻的是程序的编译过程中,从中我学到了许多以前学有学会和没有学到的函数。
这次的学习让我从纸上谈兵逐渐的过渡到实践出真知。
自己动手,自己发现和解决问题。
发现了自己的许多不足。
平时没有掌握好的知识在这次实验中彻底暴露出来,经过不断思考,不断查阅资料和上机运行,解决其中大部分问题,还有的现在不能解决,我相信在以后的学习中能够解决好它们。
5.参考文献
[1]丁振凡.《Java语言实用教程》[M].北京:
北京邮电大学出版社2005
[2]耿祥义.《Java2实用教程》[M].北京:
清华大学出版社2006
[3]赵付青.《Java面向对象程序设计》[M].北京:
国防工业出版社2005
[4]耿祥义.《Java课程设计》[M].北京:
清华大学出版社2005
附录
(1)/* 程序运行时自动产生1-100的随机数 * 接受用户键盘输入数据并给出指示信息 * 直至猜对,游戏者猜对后,显示猜对次数 * 并且供计时功能
*/
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Random;
import javax.swing.*;
public class GuessNum extends javax.swing.JFrame { {
//Set Look & Feel
try { //设置窗口外观为windows外观
javax.swing.UIManager.setLookAndFeel ("com.sun.java.swing.plaf.windows.WindowsLookAndFeel"); }
catch(Exception e) { e.printStackTrace();
}
}
private JLabel jLabel1;
private JTextField jTextField1;
private JButton jButton1;
private JButton jButton2;
private int number=0;
private int counter=0;
long startTime = System.currentTimeMillis();
long endTime; / * Auto-generated main method to display this JFrame */
public static void main(String[] args) {
GuessNum inst = new GuessNum();
inst.setVisible(true); //显示窗口
} / *新建一个随机数产生器,然后生成一个1到100之间的整数 */
public GuessNum() {
super();
initGUI();
Random random = new Random();
number = random.nextInt(100); //产生一个1-100间的随机数
} / *初始化窗口组件 */
private void initGUI() {
try {
setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);//窗口关闭时销毁窗口
getContentPane().setLayout(null);//设置窗口布局为绝对布局 {
jLabel1 = new JLabel();
getContentPane().add(jLabel1);
jLabel1.setText("欢迎进入有趣的猜数字游戏;
"+
" 1到100之间的整数,你猜是什么?
快来猜猜看(^.^)
"+
"请输入你想猜的数:
");
jLabel1.setBounds(45, 0, 420, 150);//设置标签位置
}
{
jTextField1 = new JTextField();
getContentPane().add(jTextField1);
jTextField1.setBounds(42, 168, 112, 28);//输入窗口大小
jTextField1.addKeyListener(new KeyAdapter(){//文本框添加键盘按键监听-监听回车键
public void keyPressed(KeyEvent evt) {
jTextField1KeyPressed(evt); } });
}
{
jButton1 = new JButton();
// 如果玩家不是输入一个合法的整数,则让他重新输入。
JOptionPane.showMessageDialog(null, "数字不合法,请输入一个1-100之间的整数!
"); //显示一 个对话框
jTextField1.setText("");//清空文本框内容
jTextField1.requestFocus();//文本框获取输入焦点
return
}
// 对玩家的输入进行判断。
if (guess > number){
JOptionPane.showMessageDialog(null, "猜的有点大了⊙﹏⊙!
,再小一点吧!
");
jTextField1.setText("");
jTextField1.requestFocus();
return
}
if (guess < number){
JOptionPane.showMessageDialog(null, "猜的一有点小了⊙﹏⊙!
,再大一点吧!
");
jTextField1.setText("");
jTextField1.requestFocus();
return
}
if (guess == number) {
endTime=System.currentTimeMillis();
// 判断成绩。
switch (counter) {
case 1:
JOptionPane.showMessageDialog(null,"好厉害,真棒!
!
?
(′▽`)"); break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
JOptionPane.showMessageDialog(null,"这么快就猜对了,好厉害哦!
↖(^ω^)↗"); break;
default:
JOptionPane.showMessageDialog(null,"猜了半天才猜出来,小同志,尚须努力啊!
╮(╯_╰)╭"); break; }
JOptionPane.showMessageDialog(null,"您总共猜了"+counter+"次 共花了
"+(endTime- startTime)/1000+"秒的时间答对正确答案!
"); }
jTextField1.setText(""); jTextField1.requestFocus(); }
private void jButton2ActionPerformed(ActionEvent evt) {
// 重新开始 Random random = new Random(); // 重新生成随机数
number = random.nextInt(100); // 产生一个1-100间的随机数
counter=0; // 记录玩家猜测的次数
jTextField1.setText("");
startTime = System.currentTimeMillis();
}
private void jTextField1KeyPressed(KeyEvent evt) {
// 监听文本框回车
if (evt.getKeyCode()==KeyEvent.VK_ENTER) {
jButton1.doClick();// 文本框按回车键 执行“确定”按钮的事件
}
}
}
(2)记录猜测次数模块 记录玩家猜测的次数
counter = 0;
//计数器增加一
counter++;
(3)输入输出模块
// 获取玩家的输入
guess=Integer.parseInt(jTextField1.getText());
// 如果玩家不是输入一个合法的整数,则让他重新输入
JOptionPane.showMessageDialog(null, "数字不合法,请输入一个1-100之间的整数!
");
jTextField1.setText("");
jTextField1.requestFocus();
Return
}
// 对玩家的输入进行判断。
if (guess > number){
JOptionPane.showMessageDialog(null, "猜的有点大了⊙﹏⊙!
,再小一点吧!
");
jTextField1.setText("");
jTextField1.requestFocus();
return
}
if (guess < number){
JOptionPane.showMessageDialog(null, "猜的一有点小了⊙﹏⊙!
,再大一点吧!
");
jTextField1.setText("");
jTextField1.requestFocus(); return }
if (guess == number) {
endTime=System.currentTimeMillis();
(4)判定成绩模块
// 判断成绩。
switch (counter) {
case 1:
JOptionPane.showMessageDialog(null,"好厉害,真棒!
!
(′▽`)"); break;
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
JOptionPane.showMessageDialog(null,"这么快就猜对了,好厉害哦!
↖(^ω^)↗"); break;
default:
JOptionPane.showMessageDialog(null,"猜了半天才猜出来,小同志,尚须努力啊!
╮(╯_╰)╭"); break;
}
JOptionPane.showMessageDialog(null,"您总共猜了"+counter+"次共花了"+(endTime- startTime)/1000+"秒的时间答对正确答案!
");
}
jTextField1.setText(""); jTextField1.requestFocus();
}
(5)计时模块
//计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。
long startTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();
(6)异常处理
//一个典型的异常处理如下:
try { statement(s);
} catch (exceptiontype1 name) {
statement(s);
}
catch (exceptiontype2 name) {
statement(s);
}
finally {
statement(s);
}
// 编写如下代码:
{
//Set Look & Feel try {
javax.swing.UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
}
catch(Exception e) {
e.printStackTrace();
}
} // try,catch的异常管理。
try {
guess=Integer.parseInt(jTextField1.getText());
}
// 新建一个随机数产生器,然后生成一个1到100之间的整数。
Random random = new Random(); int num = random.nextInt(100);