C#程序设计开发总结(猜猜看游戏开发)

原创 2015年07月08日 10:49:48

C#程序设计》开发总结

李 杰

信息学院;物联1121201211672114

一、课程设计的任务

    设计一个猜数字游戏程序,该游戏可以由程序产生随机数字,玩家通过输入数字来匹配程序生成的随机数字。当玩家输入的数字与计算机产生的随机数相符时,计算机将提醒用户游戏成功。当不相符时,则提醒偏大了或是偏小了。

(本课程任务采用Java编写)

二、设计思路

1总体设计

游戏随机给出一个1100 (包括1100) 之间的数字,然后让你猜是什么数字。你可以随便猜一个数字,游戏会提示偏大还是偏小,从而缩小范围。经过几次猜测,最终得出正确答案。

游戏界面:采用图形界面显示。页面有如下功能:开始,结束,重来。

游戏开始后,由计算机产生一个1-100的随机数,不显示在图形界面,但显示字符界面。用户只需输入所猜想的数字,打印在输入框内,按“确定”按钮表示确定,游戏返回提示语句,按照提示语句操作,直至游戏结束。同时,计算机开始对游戏进行计时和计数功能。

游戏过程中,如果不想继续玩了,可以直接退出,想重新开局,按“重新开始”按钮即可。想控制界面大小只需拖拽图形界面边框即可。

游戏结束后,可以选择“关闭”游戏,或者是“重新开始”。

 

2功能模块详细设计

2.1、随机数的获取

功能描述:玩家输入一个数字,数字的范围在1-100之间,系统获取随机数。


2.2 、输入输出模块

功能描述:对玩家输入的数字进行判断和提示。如果玩家输入的不是系统要求的数字,系统将提示输入的不是数字请重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数小,系统提示数字偏小请重新输入。如果玩家输入的数字与随机生成数相比较,比随机生成数大,系统提数字偏大,请重新输入。


2.3 、判断模块

功能描述:算出所用时间在玩家猜中时给出其所用时间,系统给出对其水平的判断和是否继续的提示;对玩家要求判断执行。


2.4、 自动计数模块

功能描述:系统根据您猜数字的次数,自动计数


2.5、 结果输出模块

功能描述:直到用户猜到数字为止,提示信息是否重新猜数字,如果重新开始将进入下一次游戏,如果关闭将退出游戏系统。


3、详细设计

3.1关键算法与技术实现

3.1.1源程序

<span style="font-size:14px;">/* 程序运行时自动产生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("<html>欢迎进入有趣的猜数字游戏;<br><br><br>"+
      "  1到100之间的整数,你猜是什么?<br><br><br>"+
            "请输入你想猜的数:</html>");
    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();
    getContentPane().add(jButton1);
    jButton1.setText("确定");
    jButton1.setBounds(182, 168, 77, 28);//确定按钮
    jButton1.addActionListener(new ActionListener(){//按钮添加监听
     public void actionPerformed(ActionEvent evt) {
      jButton1ActionPerformed(evt);//按钮被点击时 执行该方法
     }
    });
   }
   {
    jButton2 = new JButton();
    getContentPane().add(jButton2);
    jButton2.setText("重新开始");
    jButton2.setBounds(280, 168, 91, 28);//设置重新开始按钮
    jButton2.addActionListener(new ActionListener() {
     public void actionPerformed(ActionEvent evt) {
      jButton2ActionPerformed(evt);
     }
    });
   }
   pack();
   this.setSize(450, 280);//设置窗口大小
   setLocationRelativeTo(null);//设置窗口在显示器居中显示
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
/**
  *“确定”按钮事件监听
  * @param evt
  */
 private void jButton1ActionPerformed(ActionEvent evt) {
  int guess=0; //记录玩家所猜测的数字
  counter++; //计数器增加一

	// try,catch的异常管理
  try {

  //获取玩家的输入
   guess=Integer.parseInt(jTextField1.getText());
  } catch (Exception e) {

  //如果玩家不是输入一个合法的整数,则让他重新输入
   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();//文本框按回车键 执行“确定”按钮的事件
  }
 }
}</span>

3.1.2关键算法

1)记录猜测次数模块

记录玩家猜测的次数
counter = 0;

计数器增加一

counter++;

 

首先定义了一个counter变量来记录玩家猜测的次数,并直接初始化为0。在打印一行游戏提示以后,便开始一个do-while语句。

在do-while语句中,首先用异常处理语句获取玩家的输入,如果玩家输入不合法,提示以后用continue语句从头重新执行循环语句,等待玩家的输入。从而,guess变量一定包含一个合法的整数。之后要对玩家的输入进行判断。

如果玩家的猜测太大或者太小,都做出提示。接着把计数器增加1,表示玩家做过一次猜测。

最后便是do-while语句的判断:当玩家猜测的数字和随机产生的答案不同,则再次进入循环,否则便结束循环,执行下面的代码。 (用EclipseAlt/快捷键帮助编写do-while语句。)

 

2)输入输出模块

<span style="font-size:14px;">//获取玩家的输入
   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();</span>

3)判定成绩模块

<span style="font-size:14px;">//判断成绩
  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();
 }</span>

switch语句是基于整型表达式的条件判断语句,猜数字用它来进行成绩判断。可以看出,switch语句是和若干case语句和一个default语句搭配使用的。代码中的switch语句用counter变量的值进行判断。

counter的值为1时,便执行case 1里面的语句,即打印“好厉害,真棒!!”的字样,随后的break语句表示整个switch语句执行到这里结束了。

counter的值为2时,便执行case 2里面的语句。可以发现case 2case 6都没有break语句,这表示依次执行下面的语句,从而counter的值为27时,都打印“这么快就猜对了,好厉害哦!”字样。

counter的值不是17时,便执行default语句,打印“猜了半天才猜出来,要加油了!”的字样。

 

4)计时模块

计时模块的代码分别写在游戏的开始和游戏的结束,取得时间差,以毫秒为单位。

<span style="font-size:14px;">long startTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();</span>

3.1.3类与数据结构实现

首先搭建Java程序框架。打开Eclipse,新建名为GuessNumGame的项目,然后新建名为GuessNumJava类。GuessNum加上合适的javadoc

1)随机数的产生

我们可以借助Java API提供的Random类来产生一个随机数

首先在main函数中加入以下三行代码:

// 新建一个随机数产生器,然后生成一个1100之间的整数。

Random random = new Random();

<span style="font-size:14px;">int num = random.nextInt(100);</span>
第一句定义了一个类型是Random类的变量random(Java语言区分大小写,所以Randomrandom是不同意思),并且用new操作符生成一个Random类的实例赋给random变量。random变量实际上是一个参照,指向内存中用new操作符新建的Random类的实大多数情况下可以把random直接看做是一个Random类的实例,可以通过“random”加上“.操作符”来调用Random类的方法,用random.nextInt(100)来获取一个1100之间的随机数。

第二句语句定义一个整型变量number来保存随机产生的整数,并且用直接初始化的方法把random产生的随机数赋给number变量。

2)输入输出界面

标准输入输出(Standard I/O)是指可以被应用程序使用的信息流。比如,应用程序可以从标准输入(Standard input)读取数据,向标准输出(Standard output)写数据,把出错信息发送到标准错误(Standard error)。猜数字游戏主要用到标准输入,即控制台输入。用System.out.println进行控制台输出,用System.in进行控制台输入。它是一个纯粹的输入流,而猜数字游戏主要是通过控制台获取玩家的字符输入,则需要把它包装成一个BufferedReader实例来使用。

<span style="font-size:14px;">BufferedReader input = new BufferedReader(
new InputStreamReader(System.in));</span>

这时,input就是一个能处理来自控制台输入的、支持Unicode的、可以整行读取的一个BufferedReader实例,比如能通过input.readLine()方法获取玩家在控制台整整一行的输入。


4、运行调试与分析讨论

4.1系统测试方案

点击运行程序后,显示出图形界面。

系统自动获取到一个随机数。

玩家输入一个数,点击“确定”按钮。如果玩家输入的数比系统给出的随机数小,系统会提示“猜的有点小,再大一点吧!”。如果玩家输入的数比系统给出的随机数大,系统提示“猜的有点大,再小一点吧!”。

如果玩家猜对了数,但是所用时间大于七次,系统会提示“猜了半天才猜出来,要加油了!”,并且会计算出玩家所用的时间和所猜的次数。如果玩家猜对了数,而且所用时间小于七次,系统会提示“这么快就猜对了,好厉害哦!”,并且会计算出玩家所用的时间和所猜的次数。

如果玩家想重新再玩一次,点击“重新开始”按钮即可继续玩下一轮游戏。

 

4.2运行结果分析

开始运行程序时图形界面的显示



玩家输入一个数“25”后,点击“确定”,系统提示“猜的有点小,再大一点吧!”。



玩家再次输入一个数“70”后,点击“确定”,系统提示您“猜的有点大,再小一点吧!”。


玩家再次输入一个数“32”,点击“确定”,系统提示“猜了半天才猜出来,要加油了!”,单击确定显示“您总共猜了8次,您猜数字总共花了33秒”。




玩家再重新玩一次,获取随机数后,玩家输入一个随机数“90”,点击“确定”,系统提示“正确”!您总共猜了2次,您猜数字总共花了14秒”。



如果玩家输入数字不再1100以内数字系统提示错误!



5、设计体会与小结

    总的感受是,在做这个猜猜看的游戏的过程中,虽然遇到了许多的困难,但却得到了更多的收获。

    这个学期学习了Java语言,在学了一段时间后,觉得需要做一点东西来熟悉一下理论知识,同时也检验一下学习成果。可是在做这个小游戏的过程中发现自己并没有很好地掌握Java,很多地方不熟悉甚至完全不会,以至于要上网查找资料或询问精通Java开发的同学。

    Java是一种简单的,面向对象的,分布式的,安全的,可移植的,性能优异、多线程的动态语言。在编写之前,做整体规划和详细设计很重要。只有思路清晰,设计合理可行,编码才能有线索可依,才能更加高效地完成任务。在开发这个游戏的时候,我首先是翻看有关的书籍,在书中查找相关的知识,然后按着书上的内容进行编写。在写代码的过程中遇到困难,就上网百度。因为之前的学习并没有很好地掌握,在开发的过程中遇到的坎比想象中要多,也曾多次感到郁闷,想要放弃。但放松之后回头想想,如果连一个小游戏也完成不了,那还怎么学编程,学编程不就是这样要有耐心有毅力,要突破一个一个的瓶颈吗?于是一次次地硬着头皮去继续编写,经过许多挣扎之后终于完成了这个游戏的开发,也终于发现坚持和忍耐对一个程序员来说是多么的重要。

    在这次开发中,我印象最深刻的是程序的编写过程,从中我学到了许多以前没有学会和没有或学到的函数,还有控制台输入的概念和方法。除此之外,其他一些学习过的知识和方法也得到了巩固。以前总是模模糊糊的,现在十分清楚。平时的学习只注意到了书本上面的知识,对一些类及方法的运用显得抓襟见肘,这次的实践让我从理论过渡到实际掌握。

    当然,最后发现,以前所认知的多么高深复杂的编程,通过自己的学习和实践,变得不再无法触及,这让我收获了信心,学好Java的信心

    这次游戏开发,对我来说是一次挑战,因为在理论学习中没有好好的掌握,现在要独立完成一个较复杂的程序编写,确实有一点困难。但我必须要以积极的态度来面对,认真努力地去完成这这个任务。


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C#课程设计:《猜猜看》游戏开发总结

信管1121,201211671117,聂双燕 第一部分:开发要求(完整要求见课程考核说明编程组和游戏说明) 1. 随机显示 一个名字 与 3张相片,选择正确的相片; 2. 随机显示 一张相片 ...

猜猜看游戏开发总结

一、   设计目的 通过完成课程设计,熟悉和掌握JavaScript编程语言的编程规则和技巧,深化对已掌握的编程技术和方法的理解与应用。了解JavaScript、JSP和C#编程的优缺点,为今后更进...

《Java程序设计》第17周课程设计:《猜猜看》游戏 第四天

今天我为了实现按钮判断进行了少量的调整,利用输出的text进行判断是否其图片与标记的名字相对应; 可惜我还不能在上方对话框显示名字; 图片旁边的三个黑点其实获取的图片的名称,因为避免被看见我把他隐...

《Java程序设计》第17周课程设计:《猜猜看》游戏 第三天

今天的进度并不是很理想,原计划是从文本中获取学生信息的,可惜我根据网上参考做出根据文件名而显示其信息; 今天至少完成了两个方面图片的缩放和选择按钮; 图片的缩放: try { ...

《JAVA程序设计》第三次——《猜猜看》游戏

这次仔细地把一些注释打了上去。希望自己能更好地理解与修改。这个小游戏还有很多需要改进的地方,不知道我还能不能做到我想要的效果。加油 import javax.imageio.ImageIO; i...

《JAVA程序设计》第一次——《猜猜看》游戏

代码基本无错误,图片可显示,游戏功能基本可以运行。 import javax.imageio.ImageIO; import javax.swing.JFrame; import javax....

《JAVA程序设计》第二次——《猜猜看》游戏

删掉一些无谓的代码,游戏依然可以运行 import javax.imageio.ImageIO; import javax.swing.JFrame; import javax.swin...

C#程序设计-猜猜看

程序介绍: 该程序设计实现了随机显示三张学生照片一个名字学号猜其中哪张照片与名字对应的功能,开发平台是用jetbrains公司旗下一款JavaScript 开发工具WebStrom,开发语言用html...

《Java程序设计》第17周课程设计:《猜猜看》游戏 第二天

今天我完成了显示图片的部分,但并不是随机出现图片的,我是按一定公式来进行图片的显示。 // 再猜一次 按钮,点击则更新相应的三张图片 与 带猜测学生姓名 JButton btnG...

《Java程序设计》第17周课程设计:《猜猜看》游戏 第一天

这次完成的方面并不多,仅仅完成上面两个选择文本框可以选取并显示目录路径,但是选择班级txt文件哪里我不能从文件目录的文件夹直接读取,只能从默认目录再去寻找路径。在设计课程中我能学习到Text框的设置和...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)