網站首頁 編程語言 正文
前言:本文主要講解以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;}#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://blog.csdn.net/m0_63807219/article/details/122525515
相關推薦
- 2023-02-23 Android中URLEncoder空格被轉碼為"+"號的處理辦法_Android
- 2022-05-06 Python學習之模塊化程序設計示例詳解_python
- 2022-06-06 詳解如何自定義Dubbo Filter(含dubbo2.7.X及以上版本和2.6.X及以下版本兩種寫
- 2023-01-09 Android自定義ViewGroup實現九宮格布局_Android
- 2022-06-01 C語言超詳細解析函數棧幀_C 語言
- 2022-07-19 react props深入使用:children屬性、props校驗、props的默認值
- 2022-11-19 ElasticSearch事件查詢語言EQL操作_服務器其它
- 2024-03-20 版本沖突error in ./src/styles/element-variables.scss:N
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支