趣味編程:答案之書

概述:該篇博客主要介紹的是曾經一度風靡全網的答案之書小程序。

目錄

?1. 效果展示

2. 源碼展示?

3. 代碼邏輯詳解

3.1 頭文件與全局變量?

3.2? main函數

3.3 主循環

3.?4 繪制界面

4.?運行問題

5.小結


?1. 效果展示

? ? ? ? ? ? ?該小程序是動態的效果,?因此實際運行的效果相較于博客會更具有動態感一點。

2. 源碼展示?

#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <vector>
// 答案庫
std::vector<const char*> answers =
{"是", "否", "或許", "稍后再問","毫無疑問", "結果未明", "保持期待","別指望", "絕對肯定", "暫時觀望","機會渺茫", "積極行動", "改變策略","無法預測", "遵循直覺", "需要努力","時機未到", "放手去做", "謹慎為好"
};
// 窗口尺寸
const int WIDTH = 800;
const int HEIGHT = 600;int main()
{// 初始化圖形窗口initgraph(WIDTH, HEIGHT);srand(time(NULL)); // 隨機種子bool isPaused = false;int answerIndex = 0;// 主循環while (true){// 檢查窗口關閉if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.uMsg == WM_CLOSE) break;}// 按鍵檢測if (_kbhit()){int key = _getch();if (key == ' ') // 空格鍵切換暫停狀態{isPaused = !isPaused;}}// 非暫停時更新答案if (!isPaused){answerIndex = rand() % answers.size();}// 繪制界面BeginBatchDraw();cleardevice();// 繪制背景setfillcolor(RGB(30, 30, 30));solidrectangle(0, 0, WIDTH, HEIGHT);// 設置文字樣式settextstyle(100, 0, "楷體");setbkmode(TRANSPARENT);// 設置文字顏色settextcolor(RGB(200, 200, 100));RECT r = { 0, 0, WIDTH, HEIGHT };drawtext(answers[answerIndex], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);// 繪制提示文字settextcolor(WHITE);settextstyle(20, 0, _T("宋體"));outtextxy(20, HEIGHT - 50, "按空格鍵暫停/繼續");outtextxy(20, HEIGHT - 30, "點擊右上角關閉程序");EndBatchDraw();Sleep(50); // 控制刷新速度}closegraph();return 0;
}

3. 代碼邏輯詳解

3.1 頭文件與全局變量?
#include <graphics.h>
#include <conio.h>
#include <time.h>
#include <vector>
// 答案庫
std::vector<const char*> answers =
{"是", "否", "或許", "稍后再問","毫無疑問", "結果未明", "保持期待","別指望", "絕對肯定", "暫時觀望","機會渺茫", "積極行動", "改變策略","無法預測", "遵循直覺", "需要努力","時機未到", "放手去做", "謹慎為好"
};
// 窗口尺寸
const int WIDTH = 800;
const int HEIGHT = 600;
  • 引入了多個頭文件graphics.h?用于圖形界面的繪制,conio.h?用于控制臺輸入輸出,time.h?用于處理時間,vector?用于使用 C++ 的向量容器。
  • answers?是一個存儲各種答案的向量,這些答案將在程序中隨機顯示。
  • WIDTH?和?HEIGHT?定義了圖形窗口的寬度和高度。
3.2? main函數
int main()
{// 初始化圖形窗口initgraph(WIDTH, HEIGHT);srand(time(NULL)); // 隨機種子bool isPaused = false;int answerIndex = 0;
  • initgraph(WIDTH, HEIGHT)?初始化一個指定寬度和高度的圖形窗口。
  • srand(time(NULL))?設置隨機數種子,以確保每次運行程序時生成的隨機數不同。
  • isPaused?是一個布爾變量,用于表示程序是否處于暫停狀態,初始值為?false
  • answerIndex?用于記錄當前顯示的答案在?answers?向量中的索引,初始值為 0。
3.3 主循環
    // 主循環while (true){// 檢查窗口關閉if (MouseHit()){MOUSEMSG msg = GetMouseMsg();if (msg.uMsg == WM_CLOSE) break;}// 按鍵檢測if (_kbhit()){int key = _getch();if (key == ' ') // 空格鍵切換暫停狀態{isPaused = !isPaused;}}// 非暫停時更新答案if (!isPaused){answerIndex = rand() % answers.size();}
  • while (true)?是一個無限循環,程序將在這個循環中不斷運行,直到滿足特定條件退出。
  • MouseHit()?檢查是否有鼠標事件發生,如果有則通過?GetMouseMsg()?獲取鼠標消息。如果鼠標消息的類型是?WM_CLOSE(即用戶點擊了窗口的關閉按鈕),則使用?break?語句跳出循環,結束程序。
  • _kbhit()?檢查是否有按鍵被按下,如果有則通過?_getch()?獲取按鍵的 ASCII 碼。如果按下的是空格鍵(ASCII 碼為?' '),則切換?isPaused?的狀態。
  • 如果?isPaused?為?false,表示程序未暫停,使用?rand() % answers.size()?隨機生成一個?answers?向量的索引,更新?answerIndex
3.?4 繪制界面
        // 繪制界面BeginBatchDraw();cleardevice();// 繪制背景setfillcolor(RGB(30, 30, 30));solidrectangle(0, 0, WIDTH, HEIGHT);// 設置文字樣式settextstyle(100, 0, "楷體");setbkmode(TRANSPARENT);// 設置文字顏色settextcolor(RGB(200, 200, 100));RECT r = { 0, 0, WIDTH, HEIGHT };drawtext(answers[answerIndex], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE);// 繪制提示文字settextcolor(WHITE);settextstyle(20, 0, _T("宋體"));outtextxy(20, HEIGHT - 50, "按空格鍵暫停/繼續");outtextxy(20, HEIGHT - 30, "點擊右上角關閉程序");EndBatchDraw();Sleep(50); // 控制刷新速度}
  • BeginBatchDraw()?開始批量繪圖,避免屏幕閃爍。
  • cleardevice()?清除當前繪圖設備上的所有內容。
  • setfillcolor(RGB(30, 30, 30))?設置填充顏色為深灰色,solidrectangle(0, 0, WIDTH, HEIGHT)?繪制一個填充的矩形作為背景。
  • settextstyle(100, 0, "楷體")?設置文字樣式為 100 磅的楷體,setbkmode(TRANSPARENT)?設置文字背景為透明。
  • settextcolor(RGB(200, 200, 100))?設置文字顏色為淺黃色,drawtext(answers[answerIndex], &r, DT_CENTER | DT_VCENTER | DT_SINGLELINE)?在窗口中心繪制當前的答案。
  • settextcolor(WHITE)?設置提示文字顏色為白色,settextstyle(20, 0, _T("宋體"))?設置提示文字樣式為 20 磅的宋體,outtextxy(20, HEIGHT - 50, "按空格鍵暫停/繼續")?和?outtextxy(20, HEIGHT - 30, "點擊右上角關閉程序")?在窗口底部繪制提示文字。
  • EndBatchDraw()?結束批量繪圖,將繪制的內容一次性顯示在屏幕上。
  • Sleep(50)?暫停程序 50 毫秒,控制界面的刷新速度。

4.?運行問題

該程序運行問題的解決如上篇博客所講:趣味編程:愛心-CSDN博客

5.小結

以上就是本篇博客的所有內容了,如果大家能從中學到知識的話,還請給博主點點贊。

?

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

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

相關文章

多線程初階(2)

說到多線程編程&#xff0c;一定少不了線程安全這個話題。我們前面了解了線程的原理以及線程與進程的關系。線程之間共享資源&#xff0c;這就代表了在多線程編程中一定會產生沖突&#xff0c;所以我們需要在敲代碼時保證線程安全&#xff0c;避免這樣的問題發生。 我們先看一…

【Ubuntu】安裝向日葵遠程控制

前言 在Ubuntu 24.04.2下安裝向日葵遠程控制出錯&#xff0c;少了一些依賴&#xff0c;需要安裝一些依賴。 1.安裝gconf2-common wget http://mirrors.kernel.org/ubuntu/pool/universe/g/gconf/gconf2-common_3.2.6-6ubuntu1_all.deb sudo dpkg -i gconf2-common_3.2.6-6ub…

【Python開源】深度解析:一款高效音頻封面批量刪除工具的設計與實現

&#x1f3b5; 【Python開源】深度解析&#xff1a;一款高效音頻封面批量刪除工具的設計與實現 &#x1f308; 個人主頁&#xff1a;創客白澤 - CSDN博客 &#x1f525; 系列專欄&#xff1a;&#x1f40d;《Python開源項目實戰》 &#x1f4a1; 熱愛不止于代碼&#xff0c;熱情…

JAVA房屋租售管理系統房屋出租出售平臺房屋銷售房屋租賃房屋交易信息管理源碼

一、源碼描述 這是一套房屋租售管理源碼&#xff0c;基于SpringBootVue框架&#xff0c;后端采用JAVA開發&#xff0c;源碼功能完善&#xff0c;涵蓋了房屋租賃、房屋銷售、房屋交易等業務。 二、源碼截圖

一篇文章講清楚mysql的聚簇索引、非聚簇索引、輔助索引

聚簇索引與非聚簇索引最大的區別就是&#xff1a; 聚簇索引的索引和數據是存放在一起的&#xff0c;都是在葉子結點&#xff1b; 非聚簇索引的索引和數據是分開存儲的&#xff0c;葉子節點存放的是索引和指向數據文件的地址&#xff0c;通過葉子節點找到索引&#xff0c;再通…

使用ESPHome燒錄固件到ESP32-C3并接入HomeAssistant

文章目錄 一、安裝ESPHome二、配置ESP32-C3控制燈1.主配置文件esp32c3-luat.yaml2.基礎通用配置base.yaml3.密碼文件secret.yaml4.圍欄燈four_light.yaml5.彩燈rgb_light.yaml6.左右柱燈left_right_light.yaml 三、安裝固件四、HomeAssistant配置ESPHome1.直接訪問2.配置ESPHom…

什么是變量提升?

變量提升&#xff08;Hoisting&#xff09; 是 JavaScript 引擎在代碼執行前的一個特殊行為&#xff0c;它會將變量聲明和函數聲明自動移動到當前作用域的頂部。但需要注意的是&#xff0c;只有聲明會被提升&#xff0c;賦值操作不會提升。 ??核心概念?? 變量聲明提升&…

【萬字長文】深入淺出 LlamaIndex 和 LangChain:從RAG到智能體,輕松駕馭LLM應用開發

Langchain系列文章目錄 01-玩轉LangChain&#xff1a;從模型調用到Prompt模板與輸出解析的完整指南 02-玩轉 LangChain Memory 模塊&#xff1a;四種記憶類型詳解及應用場景全覆蓋 03-全面掌握 LangChain&#xff1a;從核心鏈條構建到動態任務分配的實戰指南 04-玩轉 LangChai…

2025 后端自學UNIAPP【項目實戰:旅游項目】3、API接口請求封裝,封裝后的簡單測試以及實際使用

一、創建請求封裝目錄 選中自己的項目&#xff0c;右鍵鼠標---->新建---->目錄---->名字自定義【我的是api】 二、創建兩個js封裝文件 選中封裝的目錄&#xff0c;右鍵鼠標---->新建---->js文件---->名字自定義【我的兩個js文件分別是my_http和my_api】 三…

autojs和冰狐智能輔助該怎么選擇?

最近打算做自動化腳本&#xff0c;在autojs和冰狐智能輔助中做選擇&#xff0c;不知道該怎么選。沒辦法只能花費大量時間仔細研究了autojs和冰狐智能輔助&#xff0c;綜合考慮功能需求、開發復雜度、編程經驗及項目規模等因素。以下是兩者的核心對比及選擇建議&#xff0c;僅供…

python24-匿名函數

課程&#xff1a;B站大學 記錄python學習&#xff0c;直到學會基本的爬蟲&#xff0c;使用python搭建接口自動化測試就算學會了&#xff0c;在進階webui自動化&#xff0c;app自動化 匿名函數 匿名函數實踐是檢驗真理的唯一標準 匿名函數 匿名函數是指沒有名字的函數&#xff…

Android 查看 Logcat (可純手機方式 無需電腦)

安裝 Logcat Reader Github Google Play 如果有電腦 使用其ADB方式可執行如下命令 后續無需安裝Termux # 使用 ADB 授予 android.permission.READ_LOGS 權限給 Logcat Reader adb shell "pm grant com.dp.logcatapp android.permission.READ_LOGS && am force-…

驅動開發硬核特訓 · Day 30(上篇):深入理解 I2C 總線驅動模型(以 at24 EEPROM 為例)

作者&#xff1a;嵌入式Jerry 視頻教程請關注 B 站&#xff1a;“嵌入式Jerry” 一、寫在前面 在上一階段我們已經深入理解了字符設備驅動與設備模型之間的結合方式、sysfs 的創建方式以及平臺驅動模型的實際運用。今天我們邁入總線驅動模型的世界&#xff0c;聚焦于 I2C 總線…

超詳細講解注意力機制、自注意力機制、多頭注意力機制、通道注意力機制、空間注意力機制

在如今的機器學習和深度學習領域&#xff0c;注意力機制絕對是一個熱度居高不下的話題。事實上&#xff0c;注意力機制并不是一個全新的概念&#xff0c;早在多年前就已經被提出并應用。比如在圖像分類任務中&#xff0c;SENet 和 ECA-Net 等模型中都運用了注意力機制&#xff…

Wireshark基本使用

本文會對Wireshark做簡單介紹&#xff0c;帶大家熟悉一下Wireshark的界面&#xff0c;以及如何使用過濾器。 接著會帶大家查看TCP五層模型下&#xff0c;帶大家回顧各層首部的格式。 最后會演示 Wireshark 如何抓取三次握手和四次揮手包的過程。 目錄 一.Wireshark簡介 二…

加速項目落地(Trae編輯器)

目錄 vscode安裝python支持 vscode常用插件 Trae編輯器 兩個界面合成 補充&#xff08;QT開發的繁瑣&#xff09; AI編程哪家強&#xff1f;Cursor、Trae深度對比&#xff0c;超詳細&#xff01; - 知乎 Trae兼容vscode的插件&#xff0c;我們可以先在vscode里面裝好再一…

stable diffusion的attention-map:提取和可視化跨注意力圖

項目&#xff1a; wooyeolbaek/attention-map-diffusers: &#x1f680; Cross attention map tools for huggingface/diffusers 參考&#xff1a;【可視化必備技能&#xff08;1&#xff09;】SD / Flux 文生圖模型的 Attention Map 可視化-CSDN博客

多環串級PID

文章目錄 為什么要多環程序主函數內環外環 雙環PID調參內環Kp調法Ki調法 外環Kp 以一定速度到達指定位置封裝 為什么要多環 單環只能單一控制速度或者位置&#xff0c;如果想要同時控制多個量如速度&#xff0c;位置&#xff0c;角度&#xff0c;就需要多個PID 速度環一般PI…

基于Kubernetes的Apache Pulsar云原生架構解析與集群部署指南(上)

#作者&#xff1a;閆乾苓 文章目錄 概念和架構概述主要特點消息傳遞核心概念Pulsar 的消息模型Pulsar 的消息存儲與分發Pulsar 的高級特性架構BrokerBookKeeperZooKeeper 概念和架構 概述 Pulsar 是一個多租戶、高性能的服務器到服務器消息傳遞解決方案。Pulsar 最初由雅虎開…

電子電氣架構 --- 如何有助于提安全性并減少事故

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…