網站首頁 編程語言 正文
前言:
本文主要講解以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://blog.csdn.net/m0_63807219/article/details/122525515
- 上一篇:C#算法之整數反轉_C#教程
- 下一篇:詳解Python的多任務進程_python
相關推薦
- 2022-07-08 python編寫WAF與Sqlmap結合實現指紋探測_python
- 2022-03-28 C++將音頻PCM數據封裝成wav文件的方法_C 語言
- 2022-06-16 Python實現視頻下載與合成的示例代碼_python
- 2022-10-16 python?os模塊使用方法介紹_python
- 2022-02-24 JDBC中在結果集中以列順序獲取值時注意類型匹配
- 2022-07-22 計算機網絡ARP,Nslookup,netsh,ftp命令
- 2022-08-21 caffe的python接口deploy生成caffemodel分類新的圖片_python
- 2022-09-10 Python實現自定義異常堆棧信息的示例代碼_python
- 最近更新
-
- 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同步修改后的遠程分支