EasyX簡介

在學習C語言時,很多同學抱怨說C只能寫最簡單的Demo程序,通過printf在屏幕上打印字符來驗證代碼。這樣的編程很枯燥,一點沒覺得自己在設計軟件。
EasyX是針對C++的第三方圖形庫,通過它我們能夠在屏幕上繪制出自己喜歡的各種顏色的圖形。有了它,自己編寫好玩的小游戲不是夢哦。
使用EasyX有下面幾點要求:
- 只能在Windows下使用
- 建議使用Visual Studio作為IDE
- 必須寫C++代碼(文件后綴名為cpp)
EasyX安裝
下載路徑
安裝
解壓下載目錄 EasyX_20151015(beta).zip 如下:

雙擊 setup.hta 文件

找到需要的VS版本點擊安裝即可。
PS:在解壓縮的文件中,有個EasyX_help.chm文件,它是EasyX的文檔,所有API的介紹都在里面。
作為一個軟件開發人員,閱讀文檔是最基本的技能,希望大家從現在開始培養自己這方面的能力。如果你通讀了這個文檔之后,相信你完全能夠自己完成在屏幕上畫出自己想要的圖案。
EasyX基本API
在EasyX的文檔中,有一節是“超簡單的使用預覽”,里面有這樣一段代碼。
#include <iostream> #include <graphics.h> #include <conio.h> void main() { initgraph(640, 480); // 創建圖形界面 circle(200, 200, 100); // 畫圓,圓心(200, 200),半徑 100 getch(); // 按任意鍵繼續 closegraph(); // 關閉圖形界面 }
這段代碼的執行結果如下:

這個Demo程序實現了在屏幕上畫一個圓形的功能。
1. 畫布的創建和銷毀
main函數中,第一行和最后一行代碼是創建和刪除圖形界面,這個圖形界面常常被叫做“畫布”。
- initgraph()
創建畫布時,需要輸入目標窗口的長寬值。
- closegraph()
和C語言中一樣,C++也強調代碼的對稱性,申請資源和釋放資源的代碼總是成對出現的。
2. 坐標系
在 EasyX 中,坐標分為:邏輯坐標和物理坐標。
我們這里只介紹邏輯坐標。
邏輯坐標是在程序中用於繪圖的坐標體系。
坐標默認的原點在屏幕的左上角,X 軸向右為正,Y 軸向下為正,度量單位是象素。
坐標的原點,方向和單位都可以通過特定函數修改。我們一般只采用默認設置。
3. 圓形繪制
circle這個函數用於畫圓。
void circle( int x, int y, int radius );
參數:
- x
圓的圓心 x 坐標。 - y
圓的圓心 y 坐標。 - radius
圓的半徑。
Demo程序中就是用這個函數繪制了一個圓心為(200, 200),半徑為100的圓形。
4. 直線繪制
這個函數用於畫線。還可以用 linerel 和 lineto 畫線。
void line( int x1, int y1, int x2, int y2 );
參數
-
x1
線的起始點的 x 坐標。 -
y1
線的起始點的 y 坐標。 -
x2
線的終止點的 x 坐標。 -
y2
線的終止點的 y 坐標。
5. 矩形繪制
這個函數用於畫空心矩形。
void rectangle( int left, int top, int right, int bottom );
參數
-
left
矩形左部 x 坐標。 -
top
矩形上部 y 坐標。 -
right
矩形右部 x 坐標。 -
bottom
矩形下部 y 坐標。
6. 橢圓繪制
這個函數用於畫橢圓。
void ellipse( int left, int top, int right, int bottom );
參數
-
left
橢圓外切矩形的左上角 x 坐標。 -
top
橢圓外切矩形的左上角 y 坐標。 -
righ橢圓外切矩形的右下角 x 坐標。
bottom
橢圓外切矩形的右下角 y 坐標。
上面是幾個基本圖形的繪制方法,它們有個特點是畫出的都是空心的圖形。與之對應的是一組繪制帶有填充顏色圖形的接口。
fillcircle(), fillellipse(), fillrectangle()
它們的參數和畫空心的接口完全一樣,只不過使用前需要調用下面這個接口設置填充顏色。
setfillcolor()
下面我們來看看這些函數究竟能做什么。
EasyX實戰

上面這幅圖就是用EasyX實現的。哈哈,貌似有點丑, 不過假如你能獨立寫出這個功能,說明你已經基本掌握了EasyX的用法。
提供一個代碼框架:
#include <iostream> #include <graphics.h> void main() { initgraph(800, 600); // Add your code closegraph(); }
這里請先自己思考一下,不要急往下看。
(... 15分鍾過去了 ...)
分析
這幅圖主要是由圓形、橢圓形、矩形和直線組成的,這幾個形狀的API我們都已經介紹過了。我們只要按順序把它們畫在屏幕上就好了。
代碼實現
在C++工程的main.cpp文件中輸入下面代碼。
#include <iostream>
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(800, 600); // 記錄當前填充顏色 COLORREF save_color = getfillcolor(); // 繪制矩形框 rectangle(50, 50, 550, 550); // 畫空心圓 circle(200, 150, 50); circle(400, 150, 50); // 畫空心橢圓 ellipse(100, 100, 500, 300); // 填充橢圓內的綠色部分 setfillcolor(GREEN); floodfill(300, 200, getlinecolor()); // 填充一個白色的橢圓 setfillcolor(WHITE); fillellipse(200, 210, 400, 290); // 填充一個綠色的矩形 setfillcolor(GREEN); fillrectangle(150, 300, 450, 500); // 畫一條直線 line(300, 500, 300, 550); // 按任意鍵繼續 getch(); // 恢復填充顏色 setfillcolor(save_color); closegraph(); }
好了,按一下Ctrl + F5,是不是看到效果了?
對大多數人來說,橢圓內部的不規則的綠色面積應該是最難實現的,floodfill()這個函數就是幫助我們將一個點所在的封閉范圍內全部用填充顏色塗掉。除了設置點坐標之外還要輸入這個封閉區域邊框的顏色。
這里需要強調的是,在初始化畫布之后,我們獲取了當前的填充顏色,在繪制完成后又把當前填充顏色恢復到了我們程序執行之前的狀態。
這個習慣非常重要,就是要讓我們的程序在運行過之后,系統環境沒有任何變化。否則在未來負責的工程中,很可能因為某個模塊亂改系統設置產生很多不必要的bug。
好了,現在是不是比較有成就感呢?
由於EasyX的使用會貫穿於我們這個系列的項目中,因此這里就不過多介紹了,后面用到了新內容我們再講。
學習過程中遇到什么問題或者想獲取學習資源的話,歡迎加入學習交流群
639368839,我們一起學C/C++!