如何设计这个程序———猜数字?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设计这个程序———猜数字?相关的知识,希望对你有一定的参考价值。

猜数字可以算是一种益智类小游戏,一般两个人玩,也可以由一个人和电脑玩,可以在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。
这个游戏的规则比较简单,一般两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜得人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。
接着,猜的人再根据出题者的几A几B继续猜,直到猜中为止。
如何用C语言编辑这个程序?

import java.awt.*;
import java.awt.event.*;
import java.text.MessageFormat;
import java.util.Random;
import javax.swing.*;

public class GuessNumbergame extends JFrame

private JTextField textField;

private JButton button;

private GuessNumber guessNumber;

public static void main(String args[])
GuessNumbergame game = new GuessNumbergame();
game.setVisible(true);


public GuessNumbergame()
this.setTitle("猜数游戏");// 设置窗口标题
this.setResizable(false);// 设置窗口不能改变大小
this.setLocation(400, 300);// 设置窗口在屏幕的位置
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);// 设置点击窗口关闭退出程序
this.getContentPane().setLayout(new FlowLayout());// 设置流式布局

this.guessNumber = new GuessNumber();// 创建猜数业务逻辑对象

this.textField = new JTextField("", 10);// 创建文本框, 宽度10列
this.textField
.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);// 文本框从右往左输入字符
this.getContentPane().add(textField);// 文本框加入窗口
this.textField.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent actionEvent)
action();

);// 设置文本框的事件监听器

this.button = new JButton();// 创建按钮
this.button.setText(MessageFormat.format("第0次猜数", this.guessNumber
.getGuessCount()));// 设置按钮上的文字
this.button.addActionListener(new ActionListener()
public void actionPerformed(ActionEvent actionEvent)
action();

);// 设置按钮的事件监听器
this.getContentPane().add(button);// 按钮加入到窗口

this.pack();// 调整窗口大小, 适应内部组件大小


/**
* 处理事件的动作
*
*/
private void action()

int guessNumber = 0;// 创建猜数变量

try
guessNumber = Integer.parseInt(this.textField.getText());// 转型输入字符串为整数
catch (NumberFormatException e)
JOptionPane.showMessageDialog(this, "输入的不是数字, 请重新输入.", "提示信息",
JOptionPane.ERROR_MESSAGE);// 显示错误消息窗口, 提示输入不是数字
this.textField.grabFocus();// 文本框获得焦点
return;


if (this.guessNumber.guess(guessNumber))

int confirm = JOptionPane.showConfirmDialog(this,
MessageFormat .format("祝贺你答对了, 正确答案是0", guessNumber, "提示信息"));
if (this.guessNumber.getGuessCount()<=5)
confirm = JOptionPane.showConfirmDialog(this,
MessageFormat .format("你仅仅猜了0次就猜对了,真聪明!", this.guessNumber.getGuessCount(), "提示信息",
JOptionPane.YES_NO_OPTION));
if (this.guessNumber.getGuessCount()>5&&this.guessNumber.getGuessCount()<=10)
confirm = JOptionPane.showConfirmDialog(this,
MessageFormat .format("你是猜了0次猜对的,也算可以啊!是否继续猜数?", this.guessNumber.getGuessCount(), "提示信息",
JOptionPane.YES_NO_OPTION));
if (this.guessNumber.getGuessCount()>10)
confirm = JOptionPane.showConfirmDialog(this,
MessageFormat .format("你猜了0次才猜对的,继续努力啊!是否继续猜数?", this.guessNumber.getGuessCount(), "提示信息",
JOptionPane.YES_NO_OPTION));

if (confirm == JOptionPane.NO_OPTION)
System.exit(0);// 用户选择否退出系统
else
this.guessNumber.retry();// 用户选择是, 继续


else
if (guessNumber < this.guessNumber.getAnswer()&&(this.guessNumber.getAnswer()-guessNumber<=5))
JOptionPane.showMessageDialog(this, "再大点,已经很近接了!!", "提示信息",
JOptionPane.INFORMATION_MESSAGE);

if (guessNumber < this.guessNumber.getAnswer()&&(this.guessNumber.getAnswer()-guessNumber>5))
JOptionPane.showMessageDialog(this, "再大点", "提示信息",
JOptionPane.INFORMATION_MESSAGE);// 显示消息窗口, 提示再大点

if (guessNumber> this.guessNumber.getAnswer()&&(guessNumber-this.guessNumber.getAnswer()<=5))
JOptionPane.showMessageDialog(this, "再小点,已经很近接了!!", "提示信息",
JOptionPane.INFORMATION_MESSAGE);// 显示消息窗口, 提示再大点

if (guessNumber>this.guessNumber.getAnswer()&&(guessNumber-this.guessNumber.getAnswer()>5))
JOptionPane.showMessageDialog(this, "再小点", "提示信息",
JOptionPane.INFORMATION_MESSAGE);// 显示消息窗口, 提示再大点



this.textField.setText("");// 设置文本框为空字符串
this.textField.grabFocus();// 文本框获得焦点

button.setText(MessageFormat.format("第0次猜数", this.guessNumber
.getGuessCount()));// 设置按钮上的文字
this.pack();// 调整窗口大小, 适应内部组件大小




class GuessNumber

private int guessCount;

private int answer;

public GuessNumber()
this.retry();


public void retry()
this.guessCount = 1;
this.answer = Math.abs(new Random().nextInt() % 100) + 1;


public boolean guess(int guessNumber)
this.guessCount++;
if (answer == guessNumber)
this.guessCount--;
return true;

else
return false;



public int getGuessCount()
return guessCount;


public int getAnswer()
return answer;


参考技术A 这个问题我回答过……

/* Game of Number
* Copyright (c) 2008 by Tung Cheng<tungcheng2008@gmail.com>. All rights reserved.
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main()

printf("2ÂêyóÎÏ·\n";
"Copyright (c) 2008 by Tung Cheng<tungcheng2008@gmail.com>. All rights reserved.\n");
/*3õê¼»ˉ£¬éú3éêy×Ö¡£*/
int n[10];
int a[4];
int t;
char in[4];
int iin[4];
int oa;
int ob;
for(int i = 0; i < 10; i++)

n[i] = false;

srand(time(NULL));
for(int i = 0; i < 4; i++)

while(1)

t = rand() % 10;
if(!n[t])

n[t] = true;
a[i] = t;
break;



/*////////////////////////////////////////////////////////////////////////////////
//¿aê¼óÎÏ·*/
int s;
for(s = 1; s <= 8; s++)

printf("Çëêäèë£o");
scanf(%s,&in);
oa = 0;
ob = 0;
iin[0] = (int)(in[0] - '0');
iin[1] = (int)(in[1] - '0');
iin[2] = (int)(in[2] - '0');
iin[3] = (int)(in[3] - '0');
if(iin[0] != iin[1] && iin[0] != iin[2] && iin[0] != iin[3]
&& iin[1] != iin[2] && iin[1] != iin[3] && iin[2] != iin[3])

for(int i = 0; i < 4; i++)

for(int j = 0; j < 4; j++)

if(iin[i] == a[j])

oa++;
break;



for(int i = 0; i < 4; i++)

if(iin[i] == a[i])

ob++;


if(ob == 4)

printf("1§Ï2Ä㣬2¶ÔáË£¡μ÷Ö£o%d", 8 - s);
break;

else

printf("%dA%dB", oa, ob);


else

printf("êäèëμÄêy×ÖóDÖظ′¡£\n");
s--;



if(s == 9)

printf("oüòÅo¶£¬ÄãòѾ-ûóD»ú»ááË£¬Õa¸öêyêÇ%d%d%d%d¡£\n", a[0], a[1], a[2],
a[3]);

system("PAUSE");
return 0;
参考技术B bu hao nong
你得找个师傅

猜数字游戏

    1. 程序设计思想:
      程序首先产生一个随机数,接着循环执行:
          显示输入框,用户输入数据,如果用户猜错,提示“猜大了”或“才”小了,直到用户猜对。
      提示“猜对了”。程序结束。
    2. 程序流程图:

    3. 源代码:
       1 import javax.swing.JOptionPane;
       2 public class Guess {
       3     public static void main(String[] args) {
       4         int rand = (int)(Math.random() * 100 + 1);
       5         int n;
       6         do{
       7             String s = JOptionPane.showInputDialog("输入你猜的数字");
       8             if(s == null || s.equals(""))        //如果点击取消或者没有输入数字,直接退出
       9                 return;
      10         n = Integer.parseInt(s);
      11         if(n > rand)
      12             JOptionPane.showMessageDialog(null, "猜大了");
      13         else if(n < rand)
      14             JOptionPane.showMessageDialog(null, "猜小了");
      15         }while(n != rand);
      16         JOptionPane.showMessageDialog(null, "猜对了");
      17     }
      18 }
    4. 运行结果截图:

       

    5. 编译错误分析:

        1) Type mismatch: cannot convert from String to int:

        JOptionPane.showInputDialog(string)返回值类型为string,不可直接赋值给int型变量n

以上是关于如何设计这个程序———猜数字?的主要内容,如果未能解决你的问题,请参考以下文章

python菜鸟问题,猜数字游戏出现报错

猜数字小程序的实现

实验任务五:猜数字游戏

c语言设计猜数字游戏

猜数字游戏设计

用Java编程这个猜数字游戏