c語言猜數字遊戲
阿新 • • 發佈:2018-12-18
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<windows.h> /* 2 游標定位函式 由於在VC++6.0中沒有<dos.h>標頭檔案,所以需要編寫gotoxy()函式以實現游標定位功能。 */ void gotoxy(int x,int y) { CONSOLE_SCREEN_BUFFER_INFO csbiInfo; HANDLE hConsoleOut; hConsoleOut=GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfo(hConsoleOut,&csbiInfo); csbiInfo.dwCursorPosition.X=x; csbiInfo.dwCursorPosition.Y=y; SetConsoleCursorPosition(hConsoleOut,csbiInfo.dwCursorPosition); } /* 3 猜數字 本函式主要實現數字遊戲的功能,系統採用隨機函式隨機生成數字,為避免生成數字重複,採用系統時鐘設定種子,隨機數字生成以後,由使用者輸入所猜數字,並以一變數記錄猜測次數,從而進行成績評定。 */ void guess(int n) { int acount,bcount,ccount,i,j,k=0,flag,a[10],b[10]; char ch; do { flag=0; srand((unsigned)time(NULL));//利用系統時鐘設定種子 for(i=0;i<n;i++) a[i]=rand()%10;//每次產生0-9範圍內任意的一個隨機數並存到陣列a中 for(i=0;i<n-1;i++) { for(j=i+1;j<n;j++) if(a[i]==a[j])//判斷陣列a中是否有相同數字 { flag=1;//若有上述情況則標誌位置1 break; } } } while(flag==1);//若標誌位為1則重新分配資料 do { k++;//記錄猜數字的次數 acount=0;//每次猜的過程中位置與數字均正確的個數 bcount=0;//每次猜的過程中位置不正確但數字正確的個數 ccount=0;//前兩者均不是 printf("猜數字:"); for(i=0;i<n;i++) scanf("%d",&b[i]);//輸入猜測的資料到陣列b中 for(i=0;i<n;i++) for(j=0;j<n;j++) { if(a[i]==b[i])//檢測輸入的資料與計算機分配的資料相同且位置相同的個數 { acount++; break; } if(a[i]==b[j]&&i!=j)//檢測輸入的資料與計算機分配的資料相同但位置不同的個數 { bcount++; break; } if(a[i]!=b[j]&&i!=j) { ccount++; break; } } printf("本次系統產生的數字序列為:"); for (i=0;i<n;i++) { printf("%d ",a[i]); } printf("\n\n本次成績為:A:%d B:%d C:%d \n\n",acount,bcount,ccount); if(acount==n)//判斷acount是否與數字的個數相同 { if(k==2) { printf(" 聰明絕頂啊!! \n\n"); } else if(k>1&&k<=5) { printf("天才啊!!\n\n"); } else if(k>5&&k<=10) { printf("聰明啊!!\n\n"); } else { printf("需要繼續努力!!\n\n"); } } getchar(); printf("是否繼續?(y/n)\n"); scanf("%c",&ch); if(ch=='n') { break; } } while(1); } //4 主函式 //主函式主要實現對整個程式的執行控制,是整個程式的入口,在其中對相關函式進行呼叫完成程式功能。 int main() { int i,n; while(1) { system("cls"); gotoxy(15,6);//將游標定位 printf("1.開始遊戲?(y/n)"); gotoxy(15,8); printf("2.遊戲規則"); gotoxy(15,10); printf("3.退出\n"); gotoxy(25,15); printf("請輸入你的選擇:"); scanf("%d",&i); switch(i) { case 1: system("cls"); printf("請輸入數字個數:\n"); scanf("%d",&n); guess(n);//呼叫guess函式 Sleep(5);//程式停止5秒鐘 break; case 2://輸出遊戲規則 system("cls"); printf("\t\t遊戲規則為\n"); printf(" 第一步: 輸入數字個數\n"); printf(" 第二步: 輸入數字,中間用空格分開\n"); printf(" 第三步: 成績中的'A'代表完全正確\n"); printf(" 成績中的'B'代表數字正確而位置不正確\n"); printf(" 成績中的'C'代表數字與位置均不正確\n"); getch(); break; case 3: exit(0);//退出遊戲 default:break; } } }