用C語言來寫一些小游戲,比如猜字謎游戲,我們要模塊化來寫這個游戲,而不是把全部的功能堆在主函式(main)上,使代碼看起來雜亂,我們由電腦產生亂數但不列印來猜數字,
首先,我們需要列印一個游戲選單以及選擇操作,如選擇1則繼續,選擇0則退出,若選擇了其他的數字,提示錯誤,這個時候要用到do...while陳述句,它的特點是先實行一次陳述句,再判斷,當輸入的值為0(也就是假)的時候,退出回圈,然后,我們用switch陳述句來呼叫相應的函式,我們定義menu函式用來列印選單,如下,
void menu()
{
printf("********************\n");
printf("***** 1. play ******\n");
printf("***** 0. exit ******\n");
printf("********************\n");
}
switch部分的代碼如下:
//do...while回圈內的陳述句
menu();
printf("請選擇:>");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("error!\n");
break;
}
接下來就是游戲的主體部分:亂數的生成,亂數的產生需要用到rand函式,rand函式的用法簡單介紹如下:
頭檔案為: #include<stdlib.h>;
函式原型為: int rand(void);表示產生0~RAND_MAX之間的隨機整數(RAND_MAX = 32767)
如 int r = rand() % 100 + 1;他表示隨機產生1~100之間的亂數,若要產生其他范圍的亂數,則需要“模除+加法”的方法 ,公式如下:
產生[m,n]范圍內的亂數num:int num=rand()%(n-m+1)+m;
要注意的是rand產生的并不是隨機的值,而是偽隨機值,當你重復運行程式的時候,你可能會看見rand函式產生的值是一樣的,因此在呼叫rand()函式之前,可以使用srand()函式設定亂數種子,srand函式的用法簡單介紹如下:
頭檔案為:<stdlib.h>
函式原型:void srand (usigned int seed);用來設定rand()產生亂數時的亂數種子,引數seed是整數,通常可以利用time(0)或getpid(0)的回傳值作為seed,
感興趣的可以改變()中的值來查看rand函式產生隨機值的變化,
time()為時間戳,頭檔案為:#include<time.h> ,本文不做過多介紹,這部分代碼如下:
srand((unsigned int)time(NULL));
int r = rand() % 100 + 1;
不過要注意的是將srand函式放在主函式之中,沒必要每一次都重新隨機生成,
完整代碼如下,
//Guessing
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void game()
{
//程序
//生成亂數
int guess = 0;
int r = rand() % 100 + 1;
//printf(" %d\n", r);
//猜數字
while(1)
{
printf("猜數字:>");
scanf("%d", &guess);
if(guess < r)
{
printf("小了!\n");
}
else if(guess > r)
{
printf("大了!\n");
}
else
{
printf("你猜對了!\n");
break;
}
}
}
void menu()
{
printf("********************\n");
printf("***** 1. play ******\n");
printf("***** 0. exit ******\n");
printf("********************\n");
}
int main(void)
{
int input = 0;
srand((unsigned int)time(NULL));//設定游戲的生成器
do
{
//menu
menu();
printf("請選擇:>");
scanf("%d", &input);
switch(input)
{
case 1:
game();
break;
case 0:
printf("退出\n");
break;
default:
printf("error!\n");
break;
}
}while(input);
return 0;
}
結果如下圖

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/343106.html
標籤:其他
