//猜數字遊戲 ? A ? B
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#define MAX 4
int main()
{
char gn[MAX],rn[MAX];
int i,j,chk,temp,a,b,t=0,g=0;
int score=0;
do
{
system("cls");
t++; //計算局數
g=0; //g 為計算猜了幾次,在此歸零
printf("猜數字遊戲 (按Esc鍵放棄該局) 第 %d 局 總積分: %d\n",t,score);
srand((unsigned)time(NULL));
for(i=0;i<MAX;i++)
{
do
{
chk=0;
//temp 以亂數方式產生 ASCII 碼(1~9)的對應數值
temp=rand()%9+49;
//檢查亂數產生的字元是否重複
for(j=0;j<i;j++)
if(rn[j]==temp) chk=1;
} while(chk==1);
rn[i]=temp;
}
/* printf("答案 : "); // 答案顯示
for(i=0;i<MAX;i++) printf("%c",rn[i]);
printf("\n"); */
//輸入及判斷資料區塊
do
{
a=0;b=0;
g++; //變數 g 為累計此局共猜了幾次
for(i=0;i<MAX;i++)
{
do
{
chk=0;
temp=getch();
//按 Esc 放棄猜,顯示答案
if(temp==27) { chk=2; break; }
//檢查輸入的字元是否介於 1~9
if(temp<49 || temp>57) chk=1;
//檢查輸入的字元是否重複
for(j=0;j<i;j++)
if(temp==gn[j]) chk=1;
} while(chk==1);
if(chk==2) break;
gn[i]=temp;
printf("%c",gn[i]);
}
if(chk==2) break;
//比對並計算 ?A?B
for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
{
if(i==j && gn[i]==rn[j])
a++;
else
if(gn[i]==rn[j])
b++;
}
//下面的程式片段會以各別分離的方式來顯示 ?A?B
if(a==MAX)
{
printf(" 猜對了! 共猜了 %d 次\n",g);
break;
}
if(a==0 && b==0)
printf(" 沒猜中半個數字!\n");
else
{
if(a==0 || b==0)
{
if(a==0) printf(" %dB\n",b);
if(b==0) printf(" %dA\n",a);
}
else
printf(" %dA%dB\n",a,b);
}
} while(a!=MAX);
//顯示答案 (chk 為 2 則表示按了 Esc 鍵)
if(chk==2)
{
score=score-50; //放棄則倒扣 50 分
printf("\n");
printf("答案 : ");
for(i=0;i<MAX;i++) printf("%c",rn[i]);
printf("\n");
printf("此局放棄 : %d\n",-50);
}
else //計算得分
{
score=score+(120-g*5);
printf("此局得分 : %d\n",120-g*5);
}
printf("繼續玩(y / n) ?");
temp=getche();
} while(temp=='y' || temp=='Y');
printf("\n");
system("pause");
return 0;
}
花了幾個小時把這個猜數字的小遊戲寫了出來 ~ 在此與大家分享一下 !
在知識 + 的程式設計 C/C++ 分類中 , 會問這一題的人為數不少 , 於此程式中 , 我強化了一些輸入資料時的判斷能力 (無法輸入重複的數字 例如: 2566 或 8888 , 以免玩家刻意以相同數字來判斷答案中的數字之有無 , 輸入非數字資料時也不會發生錯誤 , 會予以排除) , 並加入計分功能 , 而顯示幾A幾B的方式也稍作改變 (玩者能一目了然 , 方便判斷思考) , 如果心血來潮會繼續增加存檔功能 (儲存得分紀錄) , 甚至讓電腦與玩家互猜 !
想直接 COPY 拿去交作業的同學們 ~ 達仔並不反對 , 但希望您們在參考之餘能從中理解並增進設計功力 , 才是達仔所樂見的 , 也非常歡迎各位行家的指教喔 ~
不懂程式設計的人也可以玩玩看 !
沒有編譯器 (用來將程式原始碼轉成可執行檔) 而有興趣想玩看看的人 , 請傳您們的 E-mail 給達仔 , 以便將可執行檔寄給您們 !
- Aug 08 Wed 2007 12:58
猜數字遊戲
全站熱搜
留言列表