目錄:
一:對猜數字游戲的介紹及對程式的預期
二:程式設計思路:
1.總體思路
2.選單部分函式
3.游戲部分函式
4.主函式部分
5.代碼主體
三.總結
前言:本文主要講解以c語言撰寫猜數字游戲,目的是介紹C語言中的回圈和分支的具體用法,
<!--以下為正文部分-->
一:猜數字游戲基本介紹&對程式預期
.猜數字游戲,顧名思義,就是系統隨機給出一個數字,玩家對這個數字進行猜測,如果玩家猜測的數字大于給出的數字,則系統會提示猜大了,如果玩家猜測的數字小于給出的數字,則系統會提示猜小了,這樣逐步縮小猜測范圍,直到玩家猜對為止,
2.程式預期:猜數字結束后,玩家如果猜對了的話可以繼續游戲,也可以退出游戲
二:程式設計思路
1.總體思路:
首先,實作游戲功能必須要有一個選單來提示玩家如何進行操作,其次,為了代碼具有可讀性,可以將游戲部分函式和選單部分函式作為兩個子函式,然后在主函式呼叫他們,然后我們為了實作玩家可以多次游戲可以使用回圈,
綜上所述,我們應該設計兩個子函式:選單函式和游戲函式,一個主函式
2.選單部分函式:
選單部分函式
void menu()
{
printf("***********************************************\n");
printf("*************************1play*****************\n");
printf("*************************0exit*****************\n");
printf("***********************************************\n");
}
選單函式設計相對簡單,只是為了提示玩家如何操作
3.游戲部分函式
void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜數字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜對了\n");
break;
}
}
}
①在游戲函式部分,首先要生成亂數,生成亂數的方法如下:
C語言中提供了生成亂數的函式rand函式

rand函式會回傳一個0到RAND-MAX的隨機整數,使用這個函式需要包含頭檔案<stdlib.h>
但是rand函式每次生成的亂數相同,所以只用rand函式不夠,所以要使用srand()函式增加隨機性

后一句中說明在使用rand函式前要定義一個srand()函式

如畫線句所示,srand函式的作用就是一個亂數的生成的種子,
而且需要一個無符號整型,在srand函式中括號輸入一個亂數字即可生成亂數,時間正是一個一直在變化的數字,
在這里提出一個時間戳的概念:時間戳是指格林威治時間1970年01月01日00時00分00秒 (北京時間1970年01月01日08時00分00秒)起至現在的總秒數,

因為srand需要的引數是無符號型別,所以對time進行強制型別轉換,time后不需要引數,所以給他一個空指標,
使用srand((unsigned int)time(NULL))
輸入time回傳一個時間戳

需要一個頭檔案<time.h>
因為給出的亂數范圍太大,所以需要限定亂數范圍
如下:int ret = rand()%100+1,將亂數限定在0-100區間,便于猜測
②:猜數字環節
利用while回圈來逐步縮小猜測范圍,當猜測的數字等于亂數時提示”猜對了“,
4.主函式部分
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("輸入錯誤,請重新輸入");
}
} while (input);
return 0;
}
主函式中使用了switch陳述句,和do-while陳述句
主要目的是為了玩家選擇是否進入游戲
5.代碼主體
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
void menu()
{
printf("***********************************************\n");
printf("*************************1play*****************\n");
printf("*************************0exit*****************\n");
printf("***********************************************\n");
}
void game()
{
srand((unsigned int)time(NULL));
int ret = rand() % 100 + 1;
while (1)
{
printf("猜數字\n");
int guess = 0;
scanf("%d", &guess);
if (guess > ret)
{
printf("猜大了\n");
}
else if (guess < ret)
{
printf("猜小了\n");
}
else
{
printf("猜對了\n");
break;
}
}
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
break;
default:
printf("輸入錯誤,請重新輸入");
}
} while (input);
return 0;
}
三:總結
此程式主要為了熟悉回圈和分支的具體用法,并且學會利用時間戳和rand函式生成亂數,
希望大家多多關注,每周會持續輸出文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413642.html
標籤:其他
上一篇:猜數字游戲+懲罰
