我也是在學亂數寫的猜數字遊戲^^~
有範圍限制,不過不知道有沒有缺漏就是...哈哈~
這是用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;
}