如何设计这个程序———猜数字?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设计这个程序———猜数字?相关的知识,希望对你有一定的参考价值。
猜数字可以算是一种益智类小游戏,一般两个人玩,也可以由一个人和电脑玩,可以在纸上、在网上都可以玩。这种游戏规则简单,但可以考验人的严谨和耐心。
这个游戏的规则比较简单,一般两个人玩,一方出数字,一方猜。出数字的人要想好一个没有重复数字的4位数,不能让猜得人知道。猜的人就可以开始猜。每猜一个数字,出数者就要根据这个数字给出几A几B,其中A前面的数字表示位置正确的数的个数,而B前的数字表示数字正确而位置不对的数的个数。
如正确答案为5234,而猜的人猜5346,则是1A2B,其中有一个5的位置对了,记为1A,而3和4这两个数字对了,而位置没对,因此记为2B,合起来就是1A2B。
接着,猜的人再根据出题者的几A几B继续猜,直到猜中为止。
如何用C语言编辑这个程序?
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 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 }
- 运行结果截图:
- 编译错误分析:
1) Type mismatch: cannot convert from String to int:
JOptionPane.showInputDialog(string)返回值类型为string,不可直接赋值给int型变量n
以上是关于如何设计这个程序———猜数字?的主要内容,如果未能解决你的问题,请参考以下文章