用c++编的猜数游戏(文曲星里那种猜数游戏)

//猜数字游戏。 结果显示XAXB,XA表示X数字和位置都猜对了,XB表示数字猜对了但是位置不对。当4A0B时猜数正确
//分析:分成以下几块1.系统随机生成的四位数 2.用户输入的数。3.互相比较 4.输出结果

#include <iostream>
#include <stdlib.h>
#include <time.h>

using namespace std;

void Initia(int *a);
void Input(int *b);
int nCompare(int a[],int b[]);
void Output();

int main ()
{
 Output();
 return 0;
}

void Initia(int *a)//随机产生四位四位不同的数
{
 int nrand=0;
 int m,n,i,j;//个,十,百,千位
 srand( (unsigned)time( NULL ) );
 nrand=rand();
 //cout<<nrand<<endl;
 
 m = nrand%10;
 nrand = nrand/10;
 n = nrand%10;
 nrand = nrand/10;
 while (m==n)
 {
  m = rand()%10;
 }
 i = nrand%10;
 nrand = nrand/10;
 while ((m==i)||(n==i))
 {
  i = rand()%10;
 }
 j = nrand%10;
 while ((j==m)||(j==n)||(j==i))
 {
  j = rand()%10;
 }

 a[0] = m;
 a[1] = n;
 a[2] = i;
 a[3] = j;
 
}

void Input(int *b)//用户输入的四个数字字符
{
 int number=0;
 int mm,nn,ii,jj;//输入的数分成个、十、百、千位
 
 cout<<"please input a 4 bit number:"<<endl;
 for(;;)   //要求用户只能输入四位不同的四位数
 {
  cin>>number; 

  mm = number%10;
 
  number = number/10;
  nn = number%10;

  number = number/10;
  ii = number%10;

  number = number/10;
  jj = number%10;
  if((number>9999)||(mm==nn)||(mm==ii)||(mm==jj)||(nn==ii)||(nn==jj)||(ii==jj))
  {
   cout<<"your input error!! please input again :"<<endl;
   cin.clear();
   cin.ignore(1000,'/n');
  }
  else
  {
   break;
  }
 }
 //把个十百千位存在数组里
 b[0] = mm;
 b[1] = nn;
 b[2] = ii;
 b[3] = jj;

}
int nCompare(int a[],int b[])//比较 。(数组作参数)
{
 int count1 = 0,count2 = 0;//count1数相同的个数,count2数和位置都相同的个数
 for(int i=0;i<4;i++)
 {
  for(int j=0;j<4;j++)
  {
   if(a[i] == b[j])
   {
    count1++;
    if(i==j)
     count2++;
   }
  }
 }
 cout<<count2<<"A"<<(count1-count2)<<"B"<<endl;
 return count2;//返回位置和数都对的个数
}

void Output()//输出结果
{
 int a[4]={0};//存随机产生的四位不同的数
 int b[4]={0};//存用户输入的四位数


 Initia(a);

 for(int k=3;k>=0;k--)
 {
  cout<<a[k];
 }
 cout<<endl;
 
 for(int i=8;i>=0;i--)
  {
  Input(b);
  int r=nCompare(a,b);
  
  if(4==r)
  {
   cout<<"you correct!result = "<<b[3]<<b[2]<<b[1]<<b[0]<<endl;
   break;
  }
  else
  {
   cout<<"you have "<<i<<" chance"<<endl;
   if(0==i)
    cout<<"game over!!"<<endl;
  }
 }
 
}

 //本人认为的经典处:前次编的程序输入字母时不会报错,这个可以了。呵呵,高兴

请大家多多指点,让程序更加的完美

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值