簡單c語言猜數字遊戲

分析

猜數字遊戲,顧名思義。就是一個人心裏默想一個數字,然後我們來猜。當然這個被猜想的數字一定是有範圍的。而且一旦被猜者想好後就不能更改。然後我們猜數的一方,根據自己報出的數字,結合被猜者判斷後反饋給我們的信息,我們再重新確定範圍後再一次猜數。依次循環,知道被猜者反饋給我們猜對了的信息後。猜數遊戲才結束。
如果交由計算機來做的話。我們需要先實現規定好猜數範圍。利用計算機自己生成的隨機數來當做被猜者心中的數值。然後用戶輸入自己所猜想的數字,計算機通過屏幕反饋信息。直到猜對了,單次的猜數遊戲纔算結束。

步驟總結

  1. 確定數值範圍,再讓計算機生成隨機數。
  2. 用戶輸入自己所猜想的數。和已經生成的隨機數比較,從而影響接下來的過程。.
  3. 若猜測錯誤,則通過屏幕反饋信息,並再次要求用戶輸入數據;
    若猜測正確,則結束這次遊戲。
    以上則是大體思路。具體分佈實現過程見下文。

分步實現

第一步

再遊戲開始之前,需要通過屏幕提供用戶一定的信息。用戶可以在這裏決定要不要玩這個遊戲。
如果玩這個遊戲,則開始猜數遊戲,如果不玩,則可以關閉改程序。
如果提供這些信息,用戶可能一臉懵逼,畢竟程序是爲了讓使用者更好的使用,而不是身爲牀罩這的我們單純的能自己自娛自樂
所以我們需要給該程序提供一個主菜單

主菜單MENU1()函數

void MENU1()
{
	printf("\t\t\t\t歡迎來到猜數字遊戲\n\t\t系統將給出一個100以內的隨機數作爲答案,供你猜想\n");
	printf("\t\t    ########################################\n");
	printf("\t\t    ######        *1:開始遊戲         ######\n");
	printf("\t\t    ######        *2:退出遊戲         ######\n");
	printf("\t\t    ########################################\n");
}

第二步

用戶在看到主菜單之後,會根據以獲取的信息進行功能選擇,由塊代碼剋制,我們至少需要實現兩個功能。暨1.實現猜數遊戲的運轉。2.退出這個遊戲。所以我們需要分支語句來進行條件匹配的選擇。最好是用的就是switch語句,簡單粗暴。

int main()
{
	srand((unsigned long)time(NULL));//隨機數種子
	MENU1();
	int a = 0;
	while (1)
	{
		scanf("%d", &a);
		switch (a)
		{
		case 1:PLAY(); goto loop;//break;//goto
		case 2:
			printf("遊戲結束");
			return 0;//提前結束主函數,使得遊戲退出
		default:printf("請輸入正確編號\n");

		}
	loop:break;
	}return 0;



	system("pause");
}

其中,由於用戶看到的功能選項是1和2所以用戶一般都會從鍵盤輸入相應的數字,來試圖實現對應的功能。所以我們聲明一個變量a。使用戶的選擇賦值到a中,最後通過switch(a)和case搭配來實現相對應的功能的跳轉。但是如果用戶非要輸入除了這1和2以外的數呢,我們就需要提示用戶,輸入的功能號錯誤。同時爲了避免多次重複輸入錯誤額,我們將其放入到一個死循環中,通過功能1和2的return 和goto來結束main(),非1和2的輸入值將永遠循環提示用戶輸入錯誤,知道功能號對應正確。
第三步

猜數遊戲主體
已知數據範圍是0-100,所以用戶通過不斷的試驗,在結合程序的結果(用戶猜大了,還是猜小了)幫助用戶不斷調賬所猜測數字的區間,最終逼近被猜數字,直到猜測正確。

void PLAY()
{
	int n = 0;
	
	do
	{
	    n = rand() % 100 + 1;//膜100+1使得n的範圍爲【0-100】
		int x = 0;
		printf("請輸入你猜想的數字\n");
		scanf("%d", &x);
		if (n > x)
		{
			printf("你所猜的數字%d小了", x);
		}
		else if (n < x)
		{
			printf("你所猜的數字%d大了", x);
		}
		else
		{
			printf("你所猜的數字%d是正確的\n", x);
			MENU2();
			int z = 0;
			scanf("%d", &z);
			if (z == 2){
				printf("byebye\n");
				break;
			}
		}
	} while (1);
}

在用戶才正確後,如果用戶想繼續玩或者想退出的話,就有需要實現這兩項功能。所以我們需要再列出一個小菜單

void MENU2()
{
	printf("\t\t    ########################################\n");
	printf("\t\t    ######        *1:再來一局        ######\n");
	printf("\t\t    ######        *2:退出遊戲         ######\n");
	printf("\t\t    ########################################\n");
}

先關的實現關係在上圖play()函數中最後一個else處。因爲已經猜數正確,所以這時用戶如果輸入1的話就不會進入if(z==2)的判定,從而使的break無法執行,從而在play函數中繼續循環。

n = rand() % 100 + 1;//膜100+1使得n的範圍爲【0-100】

這一句是在整個do while循環裏面的,所以導致了,循環沒做一遍,這條語句都要執行一次。這條語句結合一下這條代碼。通過下面這條代碼種下一個隨機數種子。再使上面那條代碼中的rand()生成一個隨機數。ok這下隨機數已經有了,但是如何確定範圍呢。仔細看在rand()後面還有%100+1
這一整句話就是一個隨機數膜100+1;從而確定了範圍邊界是【1,100】(任何int數%100的範圍是0-99)

srand((unsigned long)time(NULL));//隨機數種子

總結

在這裏插入圖片描述
play函數中的退出時利用goto語句跳轉處main()函數中的循環從而結束程序的

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章