1. 程式人生 > >c語言猜數字遊戲

c語言猜數字遊戲

#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;
		}
	}
}