1. 程式人生 > 其它 >C語言編寫猜數字小遊戲

C語言編寫猜數字小遊戲

技術標籤:遊戲c語言程式語言

C語言編寫猜數字小遊戲

經過對C語言的初步學習,為提高程式設計能力,可以敲一些稍費腦筋的程式碼,猜數字就是一個很好的選擇。要想實現該遊戲,那麼首先我們應該知道製作的大體思路。

  1. 電腦應隨機產生一個數字(為便於玩家猜的同時,增加難度和趣味性,所以選擇1~100)
  2. 玩家輸入所猜數字,電腦給予反饋。
  3. 玩家得知反饋後進行進一步操作。
    (如:所猜數字過大,所猜數字過小,所猜數字正確(是否重玩一局))

知道大體思路後我們就可以著手寫程式碼了

首先玩遊戲肯定要有進入介面,讓別人知道這是什麼遊戲。

#include<stdio.h>//標頭檔案萬萬不能忘
void menu
()//無需返回值 { printf("*********猜數字********\n"); printf("********1.PLAY********\n"); printf("********0.EXIT********\n"); }

接著可以將主函式大體寫出來

int main()
{
    srand((unsigned int)time(NULL));//產生隨機數
	int input = 0;
	do//選用do—while是因為它可以先執行後判斷,符合當前需求
	{
		menu();
		printf("請選擇(1/0)\n"
); scanf("%d", &input); switch (input)//在此如果使用if語句有些繁瑣 { case 1: game();//遊戲主體,下面會寫到 break; case 0: printf("退出遊戲\n"); break; default: printf("輸錯啦,請重新輸入\n");//應對輸錯情況 break; } } while(input);//0為假,非0為真,所以借input判斷迴圈是否執行 return 0; }

然後就是重頭戲——遊戲主體
根據思路首先要產生隨機數

rand
Generates a pseudorandom number.
int rand( void );
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

MSDN上對rand部分解釋如上,我們可以知道rand的返回值在0到RAND_MAX(0x7fff,十進位制為32767)之間,那麼它是否可以起到產生隨機數的作用呢?
經測試其確實可以產生隨機數,但再次編譯時不難發現,兩次的數字是相同的,這就使遊戲的趣味性下降了。
第一次
第二次
srand
Sets a random starting point.
void srand( unsigned int seed );

所以需要srand為其提供生成起點,但srand又需要一個變化的隨機數種子來幫助rand生成隨機數,所以我們引入一個時間戳的概念(時間戳:當前時間和計算機的起始時間的差值,單位是秒;計算機起始時間:1970年1月1日上午8:00:00)time()函式返回的即是時間戳,時間肯定是一直在改變的,即時間戳也是如此。因每次只需取一次隨機種子,所以將該語句放在主函式中。

void game()
{
     int ret = rand() % 100+1;//因為rand取值範圍為0~32767,所以%100並+1使其<=100
	int num;
	while (1)//只要沒猜出來就一直猜
	{
		printf("猜猜看:");
		scanf("%d", &num);
		if (num > ret)
		{
			printf("猜大了\n");
		}
		else if (num < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜對了\n");
			break;//猜對後跳出迴圈
		}
	}
}

最後再寫一下主程式

#include<stdio.h>
#include<stdlib.h>//為使用time()函式
void menu()
{
	printf("********猜數字********\n");
	printf("********1.PLAY********\n");
	printf("********0.EXIT********\n");
}
void game()
{
	int ret = rand() % 100+1;//因為rand取值範圍為0~32767,所以%100並+1使其<=100
	int num;
	while (1)//只要沒猜出來就一直猜
	{
		printf("猜猜看:");
		scanf("%d", &num);
		if (num > ret)
		{
			printf("猜大了\n");
		}
		else if (num < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你猜對了\n");
			break;
		}
	}
}
int main()
{
	int input = 0;
    srand((unsigned int)time(NULL));
	do//選用do—while是因為它可以先執行後判斷,符合當前需求
	{
		menu();
		printf("請選擇(1/0)\n");
		scanf("%d", &input);
		switch (input)//在此如果使用if語句有些繁瑣
		{
		case 1:
			game();//遊戲主體,下面會寫到
			break;
		case 0:
			printf("退出遊戲\n");
			break;
		default:
			printf("輸錯啦,請重新輸入\n");//應對輸錯情況
			break;
		}
	} while(input);//0為假,非0為真,所以借input判斷迴圈是否執行
	return 0;
}

ps:第一次寫技術類部落格,還有很多地方需要改正完善,望各位大佬可以指出我的不足。