我也是在学乱数写的猜数字游戏^^~
有范围限制,不过不知道有没有缺漏就是...哈哈~
这是用Dev-C++ 4.9.9.2版写的
复制程式
#include <iostream>
#include <conio.h>
#include <ctime>
#define ttk cout << "※请痛击键盘继续^^…"; getch(); cout << "\n\n";
#define CLOCKS_PER_SEC 1
using namespace std;
void wait(int x)
{
clock_t ew;
ew = clock() + x * CLK_TCK;
while (clock() < ew) {}
}
int main()
{
short i,j,k;
int record[11][3];
int ans[4],temp[4];
bool end1=true,end2=true,end3=true,end4=true; //以上全域
int a1=0,a2=1; //end2部分
int t=0,f=0,kai=0; //end3部分
int b1=0; //end4部分
while (end1) //最外圈 ,整个游戏是否重新开始
{
cout << "NaCl:欢迎~欢迎~^^\n"; //开始游戏选单
do{cout << "NaCl:现在我们来玩猜数字\n<1>什么是猜数字?\n<2>开始游戏!\n请选择:"; k=getche();}while(k<49||k>50);
if (k==50)
{ cout << "\nNaCl:那…开始啰!\n";}
else {
cout << "\n────────────────猜数字的规则────────────────\n"
<< "你和电脑分别选定一个四位数,各位数字不要重复。游戏开始,由你先猜电脑所选定的\n"
<< "四位数,电脑将回答你猜测的数字与电脑的数字是否相同,如果不同,电脑也会以A、\n"
<< "B来提供你参考,例如:\n"
<< "答案的数字:1234\n"
<< "你猜的数字:5283,结果为AB\n\n"
<< "表示你猜对了两个数字,其中有一个字位置是对的,另一个数字位置不对,例中您猜对\n"
<< "了2及3但是3的位置错了,所以电脑给的提示为AB,其中,A表示猜对一个数字且\n"
<< "位置也对,B表示猜对一个字但是位置不对。\n\n"
<< "另例:\n"
<< "答案的数字:1234\n"
<< "你猜的数字:3261结果为1a2b\n"
<< "答案的数字:1234\n"
<< "你猜的数字:8765结果为0a0b\n"
<< "这样了解了吗?\n"
<< "──────────────────────────────────────\n"
<< "那么,开始游戏。\n";
ttk;
cout << endl;
}
while (end2) //产生谜底
{
cout << "产";wait(250);
cout << "生";wait(250);
cout << "谜";wait(250);
cout << "底";wait(250);
cout << "中";wait(250);
cout << ".";wait(250);
cout << ".";wait(250);
cout << ".";wait(250);
end2=false;
srand(int(time(0)));
rand();
for (i=0;i<4;i++) { ans[i]=int(double(10*rand())/RAND_MAX); }
for (i=0;i<4;i++) { for (j=i+1;j<4;j++) { if (ans[i]==ans[j]) {end2=true;} } }
cout << "\b\b\b\b\b\b\b\b\b\b\b\b \b\b\b\b\b\b\b\b\b\b\b\b\b";
}
cout << "\n产生完毕。\n";
cout << "┌ ┐\n 你共有十次机会!\n└ ┘\n\n";
while (end3) //第二圈,玩家猜数字回圈
{
end4=true;
if (kai!=0)
{
cout << "┌─┬──┬──┐\n";
for (i=1;i<=kai;i++)
{
cout << "│ " << i ;
if (record[i][0]<1000) { cout << "│0"; }
else {cout << "│";}
cout << record[i][0] << "│" << record[i][1] << "a" << record[i][2] << "b│\n";
if (i==kai) { cout << "└─┴──┴──┘\n"; }
else { cout << "├─┼──┼──┤\n";}
}
}
while (end4) //最内圈,使用者输入
{
while(1) {
cout << "请输入4个数(0123~9876)\n"; cin >> b1;
if (b1<0123||b1>9876) {cout << "NaCl:不在范围内!\n\n";} else {break;}
}
temp[0]=b1/1000;
temp[1]=(b1-temp[0]*1000)/100;
temp[2]=(b1-temp[0]*1000-temp[1]*100)/10;
temp[3]=(b1-temp[0]*1000-temp[1]*100-temp[2]*10);
end4=false;
for (int i=0;i<4;i++)
{ for (int j=i+1;j<4;j++)
{ if (temp[i]==temp[j]) {end4=true;} }}
if ( end4==true ) { cout << "NaCl:有重复的数字!\n\n";}
}
//判断 几A几B
t=0,f=0;
for (int i=0;i<4;i++)
{ for (int j=0;j<4;j++)
{ if (temp[i]==ans[j])
{ if (i==j) {t++;} else { f++;} }}}
if (b1<1000) {cout << "0";}
cout << b1 << ":" << t << "a" << f << "b\n";kai++;
//写入纪录
record[kai][0]=b1;record[kai][1]=t;record[kai][2]=f;
//判断是否结束
if (t==4 || kai>9) { end3=false;}
}
//结尾
if (kai>9) {cout << "\n\nNaCl:喔喔~你没猜中唷!\n";}
else { cout << "\n\nNaCl:水唷~你真强XD\n";}
do{ cout << "NaCl:你还要再玩一次吗?\n<1>好!\n<2>不玩了!\n" ; k=getch();} while (k<49||k>50);
if (k==50) {cout << "NaCl:辛苦了^^\n"; end1=false;}
else {cout << "NaCl:OK!再来一场!\n";end1=true,end2=true,end3=true,end4=true;a1=0,a2=0;t=0,f=0,kai=0;int b1=0;}
}
ttk;
return 0;
}