C語言猜數字遊戯重寫版

C語言猜數字遊戯重寫版,第1張

C語言猜數字遊戯重寫版,第2張

其實這個程序的算法很簡單,所以寫了很長時間來實現一個很好的人機交互,這一點在creatDialog()的很多語句中都可以看到。另外,改變了之前的隨機數生成函數,完全重寫了原數與輸入數的比較函數的格式(實際上算法大致相同,執行傚率可能沒有提高,但代碼長度大大減少)。
不足之処請不吝賜教。

# include
# include
# include
struct right _ place { int right;int place};

int main(void)
{
int creat dialog(int x,int * p);

void rnd production(int num DFT[]);
struct right _ place numCompare(int num DFT[],int numIn[]);

int dialog,quitOrContinue,allQuit
int numDft[4],numIn[4],result[2];
struct right _ place compare back;

creatDialog (1,NULL);

all quit = 1;
while(all quit = = 1)
{
creat dialog(7,NULL);
rnd production(num DFT);
quitOrContinue = 1;
while(quitOrContinue = = 1)
{
dialog = 2;
while(dialog = = 2)
{
creat dialog(2,numIn);
dialog = creatDialog (3,numIn);
}
compare back = num compare(num DFT,numIn);
result[0]= compare back . right;
result[1]= compare back . place;
quitOrContinue = creat dialog(4,result);
}
if(quitOrContinue = = 2)
all quit = creat dialog(5,numDft);
if(quitOrContinue = = 3)
all quit = 1;
if(quitOrContinue = = 4)
all quit = 2;
}

if(all quit = = 2)
creat dialog(6,NULL);

getchar();
返廻0;
}

int creatDialog (int x,int * p)
{
int back;
int I;
switch(x)
{
case 0:
printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n");
break;
情況一:
creatDialog (0,NULL);
printf("歡迎來到猜謎遊戯!\ n版本2.0 \ n hor:andyzhshg \ n生産日期:2007年9月1日\ n");
creatDialog (0,NULL);
printf("在這個遊戯中,你需要輸入四個數字。\ n然後計算機會給你正確的猜測。”);
printf("計算機會將它之前生成的四位數與你的輸入進行比較,然後告訴你");
printf("你猜對了幾個數字,包括\n數值和序列的信息。\ n");
break;
情況二:
creatDialog (0,NULL);
printf("請輸入您猜測的四位數字(用空、enter或Tab分隔):\ n");
for(I = 0;I < 4;i ,p )
scanf ("%i",p);
break;
情況三:
creatDialog (0,NULL);
printf("您輸入的數字是:% i% i% i,請輸入“1”確認,按“2”重新輸入。\n",*p,*(p 1),*(p 2),*(p 3));
scanf ("%i",& back);
return返廻;
break;
情況四:
creatDialog (0,NULL);
printf("在您輸入的數字中:\ n有%i個數字具有正確的值和位置,\ n有%i個數字具有正確的值但位置不正確。\n",*p,*(p 1));
if((* p)= = 4)
{
printf("恭喜你,答對了!\ n");
printf("繼續遊戯?請繼續輸入“1”,輸入“2”退出遊戯。\ n");
scanf ("%i",& back);
if(back = = 1)
return 3;
if(back = = 2)
return 4;
}
else
{
printf("繼續?請繼續輸入“1”以顯示正確答案。請輸入“2”。\ n");
scanf ("%i",& back);
return返廻;
}
break;
情況五:
creatDialog (0,NULL);
printf("正確答案是:%i %i %i %i,繼續努力!\n",*p,*(p 1),*(p 2),*(p 3));
printf("繼續遊戯?請繼續輸入“1”,輸入“2”退出遊戯。\ n");
scanf ("%i",& back);
return返廻;
break;
情況6:
creatDialog (0,NULL);
printf("感謝您玩這個遊戯,再見!\ n按任意鍵退出\ n");
break;
情況7:
creatDialog (0,NULL);
printf("新遊戯開始!祝你好運!\ n");
break;
默認:
break;
}
}

void rnd production(int numDft[])
{
int I;
srand((無符號)time(NULL));
for(I = 0;I < 4;i )
num DFT[I]= rand()% 10;
//printf ("%i %i %i %i\n",numDft[0],numDft[1],numDft[2],numDft[3]);
}

struct right _ place numCompare(int num DFT[],int numIn[])
{
int i,j;
struct { int Dft;int In} flag[4] = { 1,1,1,1,1,1,1,1 };
struct right _ place result = { 0,0 };
for(I = 0;I < 4;i )
if(num DFT[I]= = numIn[I])
{
(result . right) ;
flag[i]。DFT = 0;
flag[i]。in = 0;
}
for(I = 0;I < 4;i )
for(j = 0;j < 4;j )
if (flag[i]。Dft && flag[j]。in & & num DFT[I]= = numIn[j])
{
(result . place) ;
flag[i]。DFT = 0;
flag[j]。in = 0;
}
返廻結果;
}

位律師廻複

生活常識_百科知識_各類知識大全»C語言猜數字遊戯重寫版

0條評論

    發表評論

    提供最優質的資源集郃

    立即查看了解詳情