[C語言]猜數字游戲

文章目錄

  • 一、游戲思路揭秘
  • 二、隨機數生成大法
    • 1、初探隨機數:rand函數的魔力
    • 2、隨機數種子:時間的魔法
    • 3、抓住時間的精髓:time函數
  • 三、完善程序
  • 四、游戲成果
    • 1、游戲效果
    • 2、源代碼

一、游戲思路揭秘

猜數字游戲,這個聽起來就讓人心跳加速的小游戲,它的核心奧秘在于隨機數。游戲的過程就像是一場尋寶探險:生成寶藏(隨機數),玩家根據提示一步步接近寶藏,直到最終發現它。如果猜對了,那就是一場勝利的歡呼;如果猜錯了,游戲會像個耐心的導師,告訴你 “猜大了” 或 “猜小了” ,然后鼓勵你繼續嘗試,直到你找到那個神秘的數字。


二、隨機數生成大法

1、初探隨機數:rand函數的魔力

在C語言的神秘寶庫中,有一個叫rand的函數。它的魔力就是:每次你呼喚它,它都會變出一個新的隨機數來。不信?那我們就來試試看:

#include <stdio.h>
#include <stdlib.h>int main()
{for(int i = 0; i < 10; i++)//重復試幾次{int random = rand();//這里生成隨機數printf("%d ",random);//先打印出來看看}return 0;
}

接下來運行幾次測試一下,會得到重復的運行結果:

41 18467 6334 26500 19169 15724 11478 29358 26962 24464

哎呀,怎么每次運行結果都一樣啊?還好我們測試了一下,這是一個好習慣,可以避免無法預料的結果。
那怎么解決呢?當然是查文檔啦:文檔地址。

請添加圖片描述

由以上文檔可知:rand函數的隨機值是由一個算法生成的,該算法在每次調用它時都會返回一個明顯不相關的數字序列。該算法使用種子來生成序列,該序列應使用srand方法初始化為某個唯一值。

2、隨機數種子:時間的魔法

那我們再看看srand方法:文檔地址。

請添加圖片描述

要得到真正的隨機數,我們需要給rand函數一個種子,這個種子每次都要不一樣。那用什么來做種子呢?時間!時間就像流水,永遠在變,用它來做種子,隨機數就會像魔法一樣變化無窮。

3、抓住時間的精髓:time函數

在C語言中,有一個time函數,它能獲取當前的時間戳。時間戳就像是一個時間的指紋,每個時刻都有它獨特的印記。

好,那我們就用時間來給rand函數設置種子,看看真正的隨機數是怎么誕生的:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>int main()
{srand(time(NULL));//用時間設置種子for(int i = 0; i < 10; i++){int a = rand();printf("%d ",a);}return 0;
}

運行幾次程序,得到以下輸出:

22820 1628 32269 9569 7902 21478 16516 18171 16466 6404

哈哈,看,這次隨機數真的變魔術一樣變出來了!每次運行結果都不一樣,太棒了!


三、完善程序

現在,我們已經掌握了隨機數的奧秘,那就來打造一個完美的猜數字游戲吧!這個游戲將是一個if、switch、while、for、do…while、goto語句的完美結合:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>//顯示游戲菜單
void menu()
{printf("**********************************\n");printf("***********  1.play  *************\n");printf("***********  0.exit  *************\n");printf("**********************************\n");
}//游戲主邏輯
void game()
{int random_num = rand() % 100 + 1;//生成1到100之間的隨機數int input = 0;//用戶輸入的猜測數字int num = 0;//記錄用戶猜測的次數while (1)//無限循環{printf("請輸入猜的數字(1-100):");scanf("%d", &input);//讀取用戶輸入//清空輸入緩存,防止輸入錯誤導致的問題for (int i = getchar(); i != '\n'; i = getchar());num++;//猜測次數加1if (input > random_num){if (num >= 10)//如果猜測次數超過10次goto byby;//跳轉到游戲結束標簽system("cls");printf("猜大了!\n");}else if (input < random_num){if (num >= 10)goto byby;system("cls");printf("猜小了!\n");}else{system("cls");printf("恭喜你,猜了%d次就猜對了!\n", num);getchar();//等待用戶按下回車鍵system("cls");return;//返回主函數}}
byby:system("cls");printf("很遺憾,你沒有在規定次數內猜到%d,游戲結束!\n", random_num);//游戲結束提示getchar();system("cls");
}int main()
{int input = 5;//用戶輸入的選擇srand((unsigned)time(NULL));//初始化隨機數種子do{menu();//顯示菜單printf("請選擇(1/0):");scanf("%d", &input);//清空輸入緩存,防止輸入錯誤導致的問題while (getchar() != '\n')input = 2;switch (input)//根據用戶選擇執行不同操作{case 1://選擇1system("cls");printf("開始游戲!\n");getchar();//等待用戶按下回車鍵system("cls");game();break;case 0://選擇0system("cls");printf("退出游戲!\n");break;default:system("cls");printf("選擇錯誤!\n");//輸入錯誤,提示用戶重新輸入getchar();system("cls");break;}} while (input);//當用戶選擇0時退出循環return 0;//程序正常結束
}

這個游戲就像是一個小小的編程世界,里面充滿了分支和循環的魔法。如果你還不太熟悉這些控制語句,那就快去查查資料,學學它們的魔法吧!學會了這些,你就能更好地掌握這個游戲,甚至還能打造出更多屬于你的編程小宇宙呢!


四、游戲成果

1、游戲效果

經過一系列的開發與調試,游戲的最終效果已經呈現。現在,你可以盡情享受猜數字的樂趣了:

請添加圖片描述

2、源代碼

為了方便大家學習和交流,游戲的源代碼已經在Gitee上開源。你可以通過以下鏈接訪問并下載源代碼:傳送門。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78883.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78883.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78883.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

LeetCode392_判斷子序列

LeetCode392_判斷子序列 標簽&#xff1a;#雙指針 #字符串 #動態規劃Ⅰ. 題目Ⅱ. 示例 0. 個人方法官方題解一&#xff1a;雙指針官方題解二&#xff1a;動態規劃 標簽&#xff1a;#雙指針 #字符串 #動態規劃 Ⅰ. 題目 給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序…

Python匿名函數與內置函數較難與較冷門知識點考前速記

5 lambda匿名函數與Python內置函數 lambda 函數通常用于編寫簡單的、單行的函數,通常在需要函數作為參數傳遞的情況下使用,例如在 map()、filter()、sorted()、list.sort() 等函數與方法中。 lambda語法格式: lambda arguments: expression lambda是 Python 的關鍵字,用…

DeepSeek談《鳳凰項目 一個IT運維的傳奇故事》

《鳳凰項目&#xff1a;一個IT運維的傳奇故事》&#xff08;The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win&#xff09;是Gene Kim、Kevin Behr和George Spafford合著的一部小說&#xff0c;通過虛構的故事生動展現了IT運維中的核心挑戰和Dev…

【上海大學數據庫原理實驗報告】MySQL基礎操作

實驗目的 熟悉MySQL基礎操作。 實驗內容 創建四張工程項目的關系表。 圖 1 四張工程項目關系表的結構 檢索供應零件編號為J1的工程的供應商編號SNO。檢索供應零件給工程J1&#xff0c;且零件編號為P1的供應商編號SNO。查詢沒有正余額的工程編號、名稱及城市&#xff0c;結果…

winget使用

Get-Command winget winget search qq winget install Tencent.QQ.NT

邏輯回歸在信用卡欺詐檢測中的實戰應用

在大數據和機器學習蓬勃發展的時代&#xff0c;信用卡欺詐檢測成為了保障金融安全的重要環節。邏輯回歸作為一種經典的機器學習算法&#xff0c;在這一領域發揮著關鍵作用。本文將通過一段完整的Python代碼&#xff0c;詳細解析邏輯回歸在信用卡欺詐檢測中的具體應用過程&#…

矯平機:金屬板材精密加工的“整形專家”

一、矯平機的定義與核心功能 矯平機&#xff08;Leveling Machine&#xff09;是金屬加工領域的關鍵設備&#xff0c;主要用于消除金屬板材或帶材在軋制、運輸過程中產生的內應力&#xff0c;矯正其彎曲、扭曲、波浪邊等形變缺陷&#xff0c;使材料達到毫米級甚至微米級的平整…

百度「心響」:通用超級智能體,重新定義AI任務執行新范式

在AI技術從“對話交互”邁向“任務執行”的轉折點&#xff0c;百度于2025年4月正式推出移動端超級智能體應用——心響。這款以“AI任務完成引擎”為核心的創新產品&#xff0c;被譽為“AI指揮官”&#xff0c;通過自然語言交互實現復雜任務的全流程托管&#xff0c;覆蓋知識解析…

游戲性能測試

1. 分階段&#xff0c;看目的&#xff0c;確定高中低三檔測試機&#xff0c;最低檔機的確定需要和客戶端主程和制作人等共同確定 確定三檔機的方式&#xff1a; 1. 要上線地區的top100&#xff0c;根據用戶占比&#xff0c;劃分出三檔 2. 根據用研部門提供的數據&#xff0c;確…

react-10樣式模塊化(./index.module.css, <div className={welcome.title}>Welcome</div>)

1.react樣式模塊化 避免各個組件類名相同 相關樣式沖突所以需要樣式模塊化。比如在組件Hello中的樣式引入&#xff0c;將樣式文件名更改為index.module.css如下圖。 2. 文件中引入模塊以及使用 文件中import引入模塊樣式 import welcome from "./index.module.css"…

4月30日星期三今日早報簡報微語報早讀

4月30日星期三&#xff0c;農歷四月初三&#xff0c;早報#微語早讀。 1、神舟十九號載人飛船因東風著陸場氣象原因推遲返回&#xff1b; 2、林毅夫&#xff1a;到2049年中國經濟體量有望達到美國的兩倍&#xff1b; 3、市場監管總局&#xff1a;2024年查辦商標、專利等領域違…

小剛說C語言刷題—1462小明的游泳時間

1.題目描述 倫敦奧運會要到了&#xff0c;小明在拼命練習游泳準備參加游泳比賽。 這一天&#xff0c;小明給自己的游泳時間做了精確的計時&#xff08;本題中的計時都按 24 小時制計算&#xff09;&#xff0c;它發現自己從 a 時 b 分一直游泳到當天的 c 時 d 分。 請你幫小…

SpringBoot+EasyExcel+Mybatis+H2實現導入

文章目錄 SpringBootEasyExcelMybatisH2實現導入1.準備工作1.1 依賴管理1.2 配置信息properties1.3 H2數據庫1.4 Spring Boot 基礎概念1.5 Mybatis核心概念 1.6 EasyExcel核心概念 2.生成Excel數據工具類-隨機字符串編寫生成Excel的java文件 3.導入功能并且存入數據庫3.1 返回結…

嵌入式開發高頻面試題全解析:從基礎編程到內存操作核心知識點實戰

一、數組操作&#xff1a;3x3 數組的對角和、偶數和、奇數和 題目 求 3x3 數組的對角元素和、偶數元素和、奇數元素和。 知識點 數組遍歷&#xff1a;通過雙重循環訪問數組的每個元素&#xff0c;外層循環控制行&#xff0c;內層循環控制列。對角元素判斷&#xff1a; 主對…

分布式優化與一致性算法python實現

目錄 摘要一、分布式優化問題描述二、一致性算法基礎2.1 平均一致性(Average Consensus)2.2 Gossip 協議三、分布式梯度下降(DGD)四、分布式 ADMM 與共識優化五、收斂性與參數選擇六、典型案例6.1 傳感器網絡參數估計6.1.1 問題描述6.1.2 算法設計6.1.3 實驗結果6.2 分布式…

突破SQL注入字符轉義的實戰指南:繞過技巧與防御策略

在滲透測試中&#xff0c;SQL注入始終是Web安全的重點攻擊手段。然而&#xff0c;當開發者對用戶輸入的特殊字符&#xff08;如單引號、反斜杠&#xff09;進行轉義時&#xff0c;傳統的注入方式往往會失效。本文將深入探討如何繞過字符轉義限制&#xff0c;并給出防御建議。 目…

算法導論第6章思考題

6.3-2 func(A) 1 A.heap-sizeA.len 2 \quad for i ? A . l e n 2 ? \lfloor {A.len\over2}\rfloor ?2A.len?? downto 1 3 \qquad MAX-HEAPIFY(A,i) 對于第2行的循環控制變量i來說&#xff0c;為啥要求它是從 ? A . l e n 2 ? \lfloor {A.len\over2}\rfloor ?2A.len??…

可商用,可離線運行,可API接口調用的開源AI數字人項目Heygem,喂飯級安裝教程

前言 Heygem 是一款開源項目&#xff0c;致力于發揮你電腦硬件的全部潛力&#xff0c;讓你無需依賴云端&#xff0c;也能在本地高效運行各類開源AI數字人模型。無論是 AI 語音對話、虛擬主播&#xff0c;還是數字人驅動引擎&#xff0c;Heygem 通過底層性能調度與資源管理優化&…

三個概念:DataBinding,Dependency Property 與DataTemplate

WPF 核心概念詳解&#xff1a;DataBinding、Dependency Property 和 DataTemplate 1. DataBinding (數據綁定) 基本概念 DataBinding 是 WPF 的核心機制&#xff0c;用于在 UI 元素和數據源之間建立自動同步關系。 關鍵特性 雙向綁定&#xff1a;數據變化自動反映到 UI&…

C語言教程(二十六):C 語言內存管理詳解

一、C 語言內存區域劃分 在 C 語言程序運行時,內存主要分為以下幾個區域: 1.1 棧區(Stack) 特點:由編譯器自動分配和釋放,主要存儲函數的局部變量、函數參數、返回地址等。棧區的內存分配和釋放是按照后進先出(LIFO)的原則進行的,速度快。示例: #include <stdio.…