🌟菜鳥主頁:@晨非辰的主頁
👀學習專欄:《C語言學習》
💪學習階段:C語言方向初學者
?名言欣賞:"編程的核心是實踐,而非空談"
目錄
?1. 游戲1--猜數字
1.1 rand函數
1.2 srand函數
1.3 time函數
1.4 設置隨機數范圍
?1.5 整合實現猜數字游戲
2. 游戲2--關機程序
?前言:學習掌握了前面的分支循環語句的知識,接下來進行綜合運用寫一個有趣的代碼。
?1. 游戲1--猜數字
--游戲要求:
? ? ? ? --電腦自動生成1~100的隨機數;????????
? ? ? ? --玩家猜數字的過程中,程序根據猜測數據的大小給出大了或小了的反饋,直到猜對,游戲結束;
-在進行編寫游時,根據要求先來補充一點知識——如何產生隨機數?
1.1 rand函數
--C語?提供了?個函數叫 rand,這函數用來做生成隨機數,原型如下:
int rand(void);
--當然,并不是完全的隨機數,稱之為"偽隨機數",數值范圍在0~RAND_MAX之間,這個RAND_MAX的大小是依賴編譯器上實現的,但是在大部分編譯器上是32767。
--rand函數包含頭文件-<stdlib.h>。
--在測試函數時,多運行幾次法發現生成的隨機數都是一樣的(偽),是因為rand函數是對一個叫“種子”(默認1)的基準值進行運算生成的隨機數,則像生成真正的隨機數就要改變"種子值"。
--如何解決,請繼續往下看!
1.2 srand函數
--C語言還提供了函數叫srand,用來初始化隨機數的生成器的,scrand的原型如下:
void srand(unsigned int seed);
--在調用rand函數前,先調用srand函數,通過參數seed設置rand生成隨機數的"種子值",改變了種子,"偽隨機數"也就真正隨機了。
--那也就意味著,要生成隨機的seed就有需要隨機數,這就很矛盾;為了解決矛盾,引入了time函數。
1.3 time函數
--在程序中一般使用程序運行時間作為種子,因為時間時刻變化。
--在c語言中函數叫time,就可以獲得這個時間,time函數原型如下:
1.time_t time(time_t* timer);
?--對于時間函數,會返回當前的日歷時間,返回類型time_t。
--如果 timer 是NULL,就只返回這個時間的差值。time函數返回的這個時間差也被叫做:時間戳。
--在使用函數時,包含頭文件<time.h>;返回時間戳這樣寫:
1.time(NULL);//調用time函數返回時間戳,這里沒有接收返回值
?--生成隨機數代碼(srand函數不要頻繁調用,一次運行的程序中調用一次;):
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{//使用time函數返回時設置種子//srand類型為unsigned,將time返回時強轉srand((unsigned int) time(NULL));printf("%d\n", rand());printf("%d\n", rand());printf("%d\n", rand());return 0;
}
?--這樣運行后生成的數值就是隨機的了。
1.4 設置隨機數范圍
--生成a~b間的隨機數;
a + rand() % (b-a+1);
?1.5 整合實現猜數字游戲
--最終整合-這里涉及到函數定義和調用,不懂的請移步作者另一篇博客.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//輸出菜單
void menu()
{printf("*****************\n");printf("*** 1->play ***\n");printf("*** 0->exit ***\n");printf("*****************\n");
}//設計游戲主題函數void game()
{//生成隨機數int r = rand() % 100 + 1;//輸入的數值int num = 0;//設置游戲次數int count = 5;printf("猜數字游戲正式開始\n");while (count)//count == 0后結束{printf("\n你還有%d次機會\n", count);printf("請輸入數字:");scanf("%d", &num);if (num < r){printf("猜小了\n");}else if (num > r){printf("猜大了\n");}else{printf("恭喜你,猜對了\n");break;}count--;//次數減一}if (count == 0){printf("你的機會用完了,正確答案是:%d\n", r);}
return 0;
}//整合
int main()
{int input = 0;srand((unsigned int)time(NULL));do{menu();printf("請選擇:>");scanf("%d", &input);switch (input){case 1:game();break;case 0:printf("你已退出游戲\n");break;default:printf("選擇錯誤,重新選擇\n");break;}} while (input);return 0;
}
2. 游戲2--關機程序
int main()
{char input[20] = { 0 };system("shutdown -s -t 60");//關機指令;-s設置,-t設計時間while (1){printf("你的電腦將在一分鐘后關機,輸入:我是豬,可以取消關機\n");scanf("%s", input);//數組名不用取地址,數組名本身就是地址;if (strcmp(input, "我是豬") == 0){system("shutdown -a");//取消關機指令printf("關機程序已關閉\n");break;}}return 0;
}
?--strcmp
?函數是用來比較兩個字符串是否相等的。strcmp
?函數的原型如下:
int strcmp(const char *s1, const char *s2);
--如果兩個字符串相等,就返回?0
;要是?s1
?按字典序小于?s2
,返回一個小于?0
?的值;若?s1
?按字典序大于?s2
,則返回一個大于?0
?的值。
結語:本篇文章旨在分享利用所學知識設計簡單的趣味游戲,喜歡的朋友,給個三連白~,歡迎評論關注,一起來學習吧!