鼠標交互初體驗:點擊屏幕生成彩色氣泡(EGE 庫基礎)

在圖形編程領域,實現與用戶的交互是讓程序變得生動有趣的關鍵環節。對于初學者來說,使用合適的圖形庫能大幅降低開發難度,快速實現創意想法。EGE 庫作為一款簡單易用且功能強大的 C/C++ 圖形庫,特別適合新手入門圖形交互編程。本文將通過 “點擊屏幕生成彩色氣泡” 這一趣味項目,帶你快速掌握 EGE 庫的基礎使用方法,開啟鼠標交互編程的奇妙之旅。

一、EGE 庫簡介與環境搭建

1.1 EGE 庫概述

EGE(Easy Graphics Engine)是一個用于 C/C++ 語言的圖形庫,語法與 Turbo C 的圖形庫類似,同時借鑒了部分 OpenGL 的特性,方便 C/C++ 開發者快速上手圖形編程。它支持在 Windows、Linux、macOS 等多個平臺上運行,提供了豐富的繪圖函數,如繪制直線、圓形、矩形,以及設置顏色、字體等功能,還能處理鼠標、鍵盤等用戶輸入事件,非常適合開發簡單的圖形界面程序、小游戲等。

1.2 環境搭建

  • Windows 平臺
    1. 下載 EGE 庫安裝包,可從 EGE 官方網站(http://www.ege.edu.cn/)獲取。
    2. 解壓安裝包,將include文件夾下的頭文件復制到編譯器的頭文件目錄(例如,對于 MinGW 編譯器,通常是C:\MinGW\include);將lib文件夾下對應編譯器的庫文件(如libege.dll.a等)復制到編譯器的庫文件目錄(如C:\MinGW\lib) 。
    3. 在編譯時,需要鏈接 EGE 庫,例如使用gcc編譯代碼時,添加參數-lege
  • Linux 平臺
    1. 通過包管理器安裝 EGE 庫,如在 Debian/Ubuntu 系統中,可使用命令sudo apt-get install ege
    2. 安裝完成后,即可在代碼中包含 EGE 庫的頭文件進行編程,編譯時同樣需要鏈接庫文件,例如gcc your_code.c -o your_program -lege
  • macOS 平臺:相對復雜一些,需要先安裝 Xcode Command Line Tools,然后通過編譯源代碼的方式安裝 EGE 庫,具體步驟可參考官方文檔。

二、實現思路解析

本次項目要實現的 “點擊屏幕生成彩色氣泡” 功能,主要包含以下幾個步驟:

  1. 初始化圖形窗口:使用 EGE 庫創建一個圖形窗口,作為展示氣泡的區域。
  2. 處理鼠標點擊事件:監聽鼠標在窗口內的點擊操作,獲取點擊的坐標位置。
  3. 繪制彩色氣泡:在鼠標點擊的位置,使用隨機顏色繪制圓形氣泡。
  4. 持續顯示與更新:保持圖形窗口持續顯示,并不斷響應新的鼠標點擊事件,生成新的氣泡。

三、代碼實現詳解

3.1 引入頭文件與初始化窗口

#include <graphics.h>  // EGE圖形庫頭文件
#include <stdio.h>
#include <time.h>int main() {initgraph(800, 600);  // 創建一個800x600的圖形窗口setcaption("點擊屏幕生成彩色氣泡");  // 設置窗口標題srand(time(NULL));  // 設置隨機數種子return 0;
}

在上述代碼中:

  • #include <graphics.h>引入 EGE 圖形庫的頭文件,以便使用庫中的各種函數。
  • initgraph(800, 600)函數用于創建一個寬度為 800 像素、高度為 600 像素的圖形窗口。
  • setcaption("點擊屏幕生成彩色氣泡")設置圖形窗口的標題。
  • srand(time(NULL))利用當前系統時間設置隨機數種子,為后續生成隨機顏色做準備。

3.2 處理鼠標點擊事件與繪制氣泡

#include <graphics.h>
#include <stdio.h>
#include <time.h>int main() {initgraph(800, 600);setcaption("點擊屏幕生成彩色氣泡");srand(time(NULL));MOUSEMSG m;  // 定義鼠標消息結構體while (1) {if (MouseHit()) {  // 檢測是否有鼠標事件m = GetMouseMsg();  // 獲取鼠標消息if (m.uMsg == WM_LBUTTONDOWN) {  // 判斷是否為鼠標左鍵按下int r = rand() % 256;  // 隨機生成紅色分量int g = rand() % 256;  // 隨機生成綠色分量int b = rand() % 256;  // 隨機生成藍色分量setfillcolor(RGB(r, g, b));  // 設置填充顏色fillcircle(m.x, m.y, 30);  // 在點擊位置繪制半徑為30的圓形氣泡}}}closegraph();  // 關閉圖形窗口return 0;
}

這段代碼實現了核心功能:

  • MOUSEMSG m;定義了一個MOUSEMSG類型的變量m,用于存儲鼠標消息。
  • while (1)創建一個無限循環,持續檢測鼠標事件。
  • MouseHit()函數用于檢測是否有鼠標事件發生,如果有則返回非零值。
  • m = GetMouseMsg();獲取鼠標事件的詳細信息,并存儲在m中。
  • 通過if (m.uMsg == WM_LBUTTONDOWN)判斷鼠標消息類型是否為左鍵按下事件。
  • 當檢測到鼠標左鍵按下時,使用rand() % 256隨機生成紅色、綠色和藍色分量的值,范圍在 0 - 255 之間。
  • setfillcolor(RGB(r, g, b))設置圓形氣泡的填充顏色,RGB函數根據紅、綠、藍分量生成對應的顏色值。
  • fillcircle(m.x, m.y, 30)在鼠標點擊的坐標位置(m.x為橫坐標,m.y為縱坐標)繪制一個半徑為 30 的圓形氣泡,并進行填充。

3.3 完整代碼與注釋

#include <graphics.h>  // 引入EGE圖形庫頭文件
#include <stdio.h>
#include <time.h>int main() {initgraph(800, 600);  // 創建800x600的圖形窗口setcaption("點擊屏幕生成彩色氣泡");  // 設置窗口標題srand(time(NULL));  // 以當前時間為隨機數種子MOUSEMSG m;  // 用于存儲鼠標消息的結構體while (1) {if (MouseHit()) {  // 檢測是否有鼠標事件發生m = GetMouseMsg();  // 獲取鼠標事件的詳細信息if (m.uMsg == WM_LBUTTONDOWN) {  // 判斷是否為鼠標左鍵按下// 隨機生成紅、綠、藍顏色分量int r = rand() % 256; int g = rand() % 256; int b = rand() % 256; setfillcolor(RGB(r, g, b));  // 設置圓形氣泡的填充顏色fillcircle(m.x, m.y, 30);  // 在點擊位置繪制半徑為30的氣泡}}}closegraph();  // 關閉圖形窗口return 0;
}

四、運行與拓展

4.1 運行程序

將上述代碼保存為.c文件(例如bubble_click.c),使用對應編譯器進行編譯。如在 Windows 系統下使用 MinGW 編譯器,在命令行中進入代碼所在目錄,執行命令gcc bubble_click.c -o bubble_click -lege,編譯成功后會生成可執行文件bubble_click.exe,雙擊運行該文件,即可看到圖形窗口。在窗口中點擊鼠標左鍵,就能生成五彩斑斕的氣泡。

4.2 功能拓展

  • 改變氣泡大小:可以在繪制氣泡時,隨機生成氣泡的半徑,使氣泡大小不一,增加視覺效果。例如將fillcircle(m.x, m.y, 30);改為fillcircle(m.x, m.y, rand() % 20 + 10);,讓氣泡半徑在 10 - 29 之間隨機變化。
  • 添加氣泡移動效果:為每個氣泡添加速度變量,在循環中不斷更新氣泡的位置,模擬氣泡飄動的效果。這需要定義新的數據結構來存儲每個氣泡的狀態信息,并在循環中處理其移動邏輯。
  • 實現氣泡消失效果:可以設定氣泡存在的時間,當超過一定時間后,將其從屏幕上移除,使畫面更加動態和真實。

通過這個簡單的項目,相信你已經對 EGE 庫的基礎使用和鼠標交互編程有了初步了解。后續可以嘗試結合更多 EGE 庫的功能,開發出更復雜、有趣的圖形程序和小游戲。

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

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

相關文章

Office 三大組件Excel、Word、Access 里 VBA 區別對比

以下是Excel、Word和Access在VBA中的主要區別對比及詳細說明: 核心對象模型 Excel Workbook(工作簿)→ Worksheet(工作表)→ Range(單元格區域) 核心圍繞單元格數據處理,如 Cells(1,1).Value = "數據" Word Document(文檔)→ Range(文本范圍)→ Paragrap…

【上位機——MFC】對象和控件綁定

對象和控件綁定 將控件窗口和類對象綁定具有兩大作用 如果和數據類對象綁定&#xff0c;對象和控件可以進行數據交換。 如果和控件類對象綁定&#xff0c;對象就可以代表整個控件。 與數據類型對象綁定的使用 數據類型對象和控件可實現數據交互重寫父類成員虛函數DoDataExch…

Excel處理控件Aspose.Cells教程:壓縮Excel文件完整指南

Excel 電子表格是管理、分析和可視化數據的有效工具&#xff0c;但隨著文件復雜度的增加&#xff0c;它們很快就會變得臃腫。無論是由于數據集龐大、嵌入圖片、格式過多還是隱藏工作表&#xff0c;Excel 文件的大小都可能迅速膨脹&#xff0c;導致打開速度變慢、難以通過電子郵…

軟考【軟考高級QA】

軟考高級QA 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09;2.操作系統管理和調度進程時&#xff0c;會進行哪些狀態轉換&#xff1f; 1.操作系統管理和調度進程時&#xff0c;有哪些狀態&#xff1f;&#xff08;5種&#xff09; …

神經網絡基礎-從零開始搭建一個神經網絡

一、什么是神經網絡 人工神經網絡&#xff08;Articial Neural Network&#xff0c;簡寫為ANN&#xff09;也稱為神經網絡&#xff08;NN),是一種模仿生物神經網絡和功能的計算模型&#xff0c;人腦可以看做是一個生物神經網絡&#xff0c;由眾多的神經元連接而成&#xff0c;…

Golang 接口 vs Rust Trait:一場關于抽象的哲學對話

一、引言 在現代編程語言中&#xff0c;接口&#xff08;Interface&#xff09; 和 Trait 是實現多態和抽象行為的關鍵機制。它們允許我們定義行為契約&#xff0c;讓不同的類型共享相同的語義接口&#xff0c;從而提升代碼的復用性和擴展性。 Go 和 Rust 分別代表了兩種截然…

java實現一個操作日志模塊功能,怎么設計

為了設計一個高效、可靠且可擴展的操作日志模塊&#xff0c;可以結合 ?AOP&#xff08;面向切面編程&#xff09;?、異步處理?&#xff08;多線程或MQ&#xff09;以及合理的存儲策略&#xff0c;具體方案如下&#xff1a; ?1. 技術選型與架構設計? ??(1) AOP 實現非侵…

【論文閱讀】HunyuanVideo: A Systematic Framework For Large Video Generative Models

HunyuanVideo: A Systematic Framework For Large Video Generative Models 原文摘要 研究背景與問題 視頻生成的變革性影響&#xff1a;近期視頻生成技術的進步深刻改變了個人生活與行業應用。 閉源模型的壟斷&#xff1a;主流視頻生成模型&#xff08;如Runway Gen-3、Luma …

在ubuntu中brpc框架安裝

下載最新release版本&#xff0c; 穩定性好&#xff0c; 網址鏈接。 一、解壓源碼包 # 解壓到當前目錄 tar -xzvf brpc-1.12.1.tar.gz# 進入解壓后的目錄 cd brpc-1.12.1二、安裝編譯依賴&#xff08;Ubuntu/Debian&#xff09; sudo apt update sudo apt install -y g make…

《深入理解 Java 虛擬機》筆記

文章目錄 最近筆記內存管理執行子系統程序編譯、代碼優化 老版本 最近筆記 內存管理 執行子系統 程序編譯、代碼優化 老版本

【Linuc】深入理解 Linux 文件權限

文章目錄 一、權限基礎解析1. 權限三元組2. 權限類型與數字映射二、查看文件權限三、修改權限實戰1. chmod 命令符號模式數字模式(推薦)2. chown 修改歸屬四、特殊權限機制1. SetUID (Set User ID)2. SetGID (Set Group ID)3. Sticky Bit五、高級權限管理1. 默認權限控制2. A…

RabbitMq學習(第一天)

文章目錄 1、mq(消息隊列)概述2、RabbitMQ環境搭建3、java基于AMQP協議操作RabbitMQ4、基于Spring AMQP操作RabbitMQ5、代碼中創建隊列與交換機①、配置類創建②、基于RabbitListener注解創建 6、RabbitMQ詳解①、work模型②、交換機1、Fanout(廣播)交換機2、Direct(定向)交換機…

緩存置換:用c++實現最不經常使用(LFU)算法

在探討緩存置換算法時&#xff0c;我們曾詳細解讀過LRU&#xff08;Least Recently Used&#xff09;算法&#xff0c;它憑借 “最近最少使用” 的策略在緩存管理領域大放異彩。今天&#xff0c;讓我們將目光聚焦于另一種重要的緩存置換算法 ——LFU&#xff08;Least Frequent…

深度學習模型的部署實踐與Web框架選擇

引言 在深度學習項目的完整生命周期中&#xff0c;模型訓練只是第一步&#xff0c;將訓練好的模型部署到生產環境才能真正發揮其價值。本文將詳細介紹模型部署的核心概念、常見部署方式以及三種主流Python Web框架的對比分析&#xff0c;幫助開發者選擇最適合自己項目的技術方…

多功能氣體檢測報警系統,精準監測,守護安全

在化學品生產、石油化工、礦山、消防、環保、實驗室等領域&#xff0c;有毒有害氣體泄漏風險嚴重威脅工作人員和環境安全。化工企業生產中易產生大量可燃有毒氣體&#xff0c;泄漏達一定濃度易引發爆炸、中毒等重大事故&#xff1b;礦井下瓦斯、一氧化碳等有害氣體的濃度實時監…

lvgl多語言設置

搭建開發環境 安裝node.js 安裝node.js&#xff0c;點擊進入官網地址 安裝lv_i18n lv_i18n項目地址&#xff1a;Github&#xff1a;https://github.com/lvgl/lv_i18ngit運行命令安裝lv_i18n&#xff1a;npm i lv_i18n -g。測試命令&#xff1a;lv_i18n -h 搭建過程報錯 …

線程池技術

線程池基本概念 線程池就是在任務還沒有到來前&#xff0c;預先創建一定數量的線程放入空閑列表。這些線程都是處于阻塞狀態&#xff0c;不消耗CPU&#xff0c;但占用較小的內存空間。 當新任務到來時&#xff0c;緩沖池選擇一個空線程&#xff0c;把任務傳入此線程中運行&…

Go語言中的并發編程--詳細講解

文章目錄 Go語言并發編程**簡單介紹**goroutine channel 實現并發和并行for循環開啟多個協程Channel管道goroutine 結合 channel 管道**goroutine 結合 channel打印素數**單向管道Select多路復用Goroutine Recover解決協程中出現的PanicGo中的并發安全和互斥鎖 Go語言并發編程 …

C# NX二次開發:投影曲線和偏置曲線UFUN函數詳解

大家好&#xff0c;今天要講的是關于投影曲線和偏置曲線相關的函數。 &#xff08;1&#xff09;UF_CURVE_create_proj_curves1&#xff1a;這個函數的定義為創建投影曲線。 Defined in: uf_curve.h Overview Creates projection curves. Objects to project may be poi…

用R語言+隨機森林玩轉遙感空間預測-基于R語言機器學習遙感數據處理與模型空間預測技術及實際項目案例分析

遙感數據具有高維度、非線性及空間異質性等特點&#xff0c;傳統分析方法往往難以充分挖掘其信息價值。機器學習技術的引入為遙感數據處理與模型預測提供了新的解決方案&#xff0c;其中隨機森林&#xff08;Random Forest&#xff09;以其優異的性能和靈活性成為研究者的首選工…