詳解C語言實現(xiàn)猜數(shù)字游戲
前言:本文主要講解以c語言編寫猜數(shù)字游戲,目的是介紹C語言中的循環(huán)和分支的具體用法。
一:猜數(shù)字游戲基本介紹&對程序預期
.猜數(shù)字游戲,顧名思義,就是系統(tǒng)隨機給出一個數(shù)字,玩家對這個數(shù)字進行猜測,如果玩家猜測的數(shù)字大于給出的數(shù)字,則系統(tǒng)會提示猜大了,如果玩家猜測的數(shù)字小于給出的數(shù)字,則系統(tǒng)會提示猜小了,這樣逐步縮小猜測范圍,直到玩家猜對為止。
2.程序預期:猜數(shù)字結束后,玩家如果猜對了的話可以繼續(xù)游戲,也可以退出游戲
二:程序設計思路
1.總體思路:
首先,實現(xiàn)游戲功能必須要有一個菜單來提示玩家如何進行操作。其次,為了代碼具有可讀性,可以將游戲部分函數(shù)和菜單部分函數(shù)作為兩個子函數(shù),然后在主函數(shù)調(diào)用他們。然后我們?yōu)榱藢崿F(xiàn)玩家可以多次游戲可以使用循環(huán)。
綜上所述,我們應該設計兩個子函數(shù):菜單函數(shù)和游戲函數(shù)。一個主函數(shù)
2.菜單部分函數(shù):
菜單部分函數(shù)
void menu() { printf("***********************************************\n"); printf("*************************1play*****************\n"); printf("*************************0exit*****************\n"); printf("***********************************************\n"); }
菜單函數(shù)設計相對簡單,只是為了提示玩家如何操作
3.游戲部分函數(shù)
void game() { srand((unsigned int)time(NULL)); int ret = rand() % 100 + 1; while (1) { printf("猜數(shù)字\n"); int guess = 0; scanf("%d", &guess); if (guess > ret) { printf("猜大了\n"); } else if (guess < ret) { printf("猜小了\n"); } else { printf("猜對了\n"); break; } } }
①在游戲函數(shù)部分,首先要生成隨機數(shù),生成隨機數(shù)的方法如下:
C語言中提供了生成隨機數(shù)的函數(shù)rand函數(shù)
rand函數(shù)會返回一個0到RAND-MAX的隨機整數(shù),使用這個函數(shù)需要包含頭文件<stdlib.h>
但是rand函數(shù)每次生成的隨機數(shù)相同,所以只用rand函數(shù)不夠,所以要使用srand()函數(shù)增加隨機性
后一句中說明在使用rand函數(shù)前要定義一個srand()函數(shù)
如畫線句所示,srand函數(shù)的作用就是一個隨機數(shù)的生成的種子。
而且需要一個無符號整型,在srand函數(shù)中括號輸入一個隨機數(shù)字即可生成隨機數(shù),時間正是一個一直在變化的數(shù)字。
在這里提出一個時間戳的概念:時間戳是指格林威治時間1970年01月01日00時00分00秒 (北京時間1970年01月01日08時00分00秒)起至現(xiàn)在的總秒數(shù)。
因為srand需要的參數(shù)是無符號類型,所以對time進行強制類型轉換。time后不需要參數(shù),所以給他一個空指針。
使用srand((unsigned int)time(NULL))
輸入time返回一個時間戳
需要一個頭文件<time.h
>
因為給出的隨機數(shù)范圍太大,所以需要限定隨機數(shù)范圍
如下:int ret = rand()%100+1,將隨機數(shù)限定在0-100區(qū)間,便于猜測
②:猜數(shù)字環(huán)節(jié)
利用while循環(huán)來逐步縮小猜測范圍,當猜測的數(shù)字等于隨機數(shù)時提示”猜對了“。
4.主函數(shù)部分
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; }
主函數(shù)中使用了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("猜數(shù)字\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;}#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("猜數(shù)字\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; }
三:總結
此程序主要為了熟悉循環(huán)和分支的具體用法,并且學會利用時間戳和rand函數(shù)生成隨機數(shù)。
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內(nèi)容!
相關文章
C語言實現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點
這篇文章主要介紹了C語言實現(xiàn)輸出鏈表中倒數(shù)第k個節(jié)點,主要涉及鏈表的遍歷操作,是數(shù)據(jù)結構中鏈表的常見操作。需要的朋友可以參考下2014-09-09