首頁 > 軟體

C語言超詳細講解猜數位遊戲的實現

2022-07-14 14:04:03

rand函數

先看一下下面這張圖:

通過這張圖我們可以瞭解到rand函數的返回值是int型別,形參為空,它的標頭檔案<stdlib.h>以及它的返回值範圍是0到RAND_MAX. 而RAND_MAX在VS中是0x7fff,轉換成二進位制就是32767.所以rand返回的亂數的範圍就是0到32727。

其實我們用rand函數就可以生成亂數了,那為什麼我們還要用到srand函數呢?

因為只有第一次生成的亂數是隨機的,如果程式執行多次,那第二次之後生成的亂數就會和第一次生成的一樣。這是一種偽隨機。

因此只用到rand函數是不夠的,我們要用rand函數之前,先用strand函數。

srand函數

看一下strand函數,返回值為void,形參是int型別的資料,要用strand函數,首先要給strand傳一個int型別的資料,根據傳進去的值不同,生成的亂數也不同。但是這樣就矛盾了。生成一個亂數之前首先要傳進去一個亂數,為了解決這個問題,就要使用時間戳。

時間戳

我們無法給它一個亂數,但是我們可以用時間作為引數傳進去,時間是變的,這樣生成的亂數也就是變的。怎麼獲得時間戳呢?C語言也為我們提供了一個time函數可以幫助我們獲得時間戳。

time的標頭檔案是<time.h>,time的函數原型有點複雜,看不懂沒關係,會用就行。我們只是要把time的值作為引數傳給strand函數。strand的形參是unsigned int型別的,而time的返回值是time_t型別的,我們可以強制型別轉換。time的形參是指標型別的引數,我們用NULL就可以了。

srand((unsigned int)time(NULL));

解決完這個問題,我們還要解決rand生成亂數的範圍的問題,我們如果要獲得一個1~N之間的數的話,就要對生成的亂數對N進行取餘+1.為了方便猜數位,生成的亂數範圍就控制在1到100.猜數位不是一次就能才對的,猜不對就要一直猜,猜對了才退出。下面是完整程式碼。

完整程式碼與程式執行圖

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void menu()
{
	printf("|-------------------|n");
	printf("|-----1.玩遊戲------|n");
	printf("|-----0.退出--------|n");
	printf("|-------------------|n");
}
void game()
{
	int ret = rand()%100+1;
	int m = 0;
	while (1)
	{
		scanf("%d", &m);
		if (m > ret)
		{
			printf("猜大了!n");
		}
		else if (m < ret)
		{
			printf("猜小了!n");
		}
		else
		{
			printf("恭喜你,猜對了!n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	int n = 0;
	do
	{
		menu();
		printf("請選擇:");
		scanf("%d", &n);
		switch (n)
		{
		case 1:
			printf("開始猜數位n");
			game();
			break;
		case 0:
			printf("已退出n");
			break;
		default:
			printf("選擇錯誤,請重新選擇n");
			break;
		}
	} while(n);
	return 0;
}

程式執行圖如下:

到此這篇關於C語言超詳細講解猜數位遊戲的實現的文章就介紹到這了,更多相關C語言猜數位遊戲內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com