
EasyX簡(jiǎn)介

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

雙擊 setup.hta 文件

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

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

上面這幅圖就是用EasyX實(shí)現(xiàn)的。哈哈,貌似有點(diǎn)丑, 不過(guò)假如你能獨(dú)立寫出這個(gè)功能,說(shuō)明你已經(jīng)基本掌握了EasyX的用法。
提供一個(gè)代碼框架:
#include <iostream>
#include <graphics.h>
void main()
{
initgraph(800, 600);
// Add your code
closegraph();
}
這里請(qǐng)先自己思考一下,不要急往下看。
(... 15分鐘過(guò)去了 ...)
分析
這幅圖主要是由圓形、橢圓形、矩形和直線組成的,這幾個(gè)形狀的API我們都已經(jīng)介紹過(guò)了。我們只要按順序把它們畫在屏幕上就好了。
代碼實(shí)現(xiàn)
在C++工程的main.cpp文件中輸入下面代碼。
#include <iostream>
#include <graphics.h>
#include <conio.h>
void main()
{
initgraph(800, 600);
// 記錄當(dāng)前填充顏色
COLORREF save_color = getfillcolor();
// 繪制矩形框
rectangle(50, 50, 550, 550);
// 畫空心圓
circle(200, 150, 50);
circle(400, 150, 50);
// 畫空心橢圓
ellipse(100, 100, 500, 300);
// 填充橢圓內(nèi)的綠色部分
setfillcolor(GREEN);
floodfill(300, 200, getlinecolor());
// 填充一個(gè)白色的橢圓
setfillcolor(WHITE);
fillellipse(200, 210, 400, 290);
// 填充一個(gè)綠色的矩形
setfillcolor(GREEN);
fillrectangle(150, 300, 450, 500);
// 畫一條直線
line(300, 500, 300, 550);
// 按任意鍵繼續(xù)
getch();
// 恢復(fù)填充顏色
setfillcolor(save_color);
closegraph();
}
好了,按一下Ctrl + F5,是不是看到效果了?
對(duì)大多數(shù)人來(lái)說(shuō),橢圓內(nèi)部的不規(guī)則的綠色面積應(yīng)該是最難實(shí)現(xiàn)的,floodfill()這個(gè)函數(shù)就是幫助我們將一個(gè)點(diǎn)所在的封閉范圍內(nèi)全部用填充顏色涂掉。除了設(shè)置點(diǎn)坐標(biāo)之外還要輸入這個(gè)封閉區(qū)域邊框的顏色。
這里需要強(qiáng)調(diào)的是,在初始化畫布之后,我們獲取了當(dāng)前的填充顏色,在繪制完成后又把當(dāng)前填充顏色恢復(fù)到了我們程序執(zhí)行之前的狀態(tài)。
這個(gè)習(xí)慣非常重要,就是要讓我們的程序在運(yùn)行過(guò)之后,系統(tǒng)環(huán)境沒(méi)有任何變化。否則在未來(lái)負(fù)責(zé)的工程中,很可能因?yàn)槟硞€(gè)模塊亂改系統(tǒng)設(shè)置產(chǎn)生很多不必要的bug。
好了,現(xiàn)在是不是比較有成就感呢?
由于EasyX的使用會(huì)貫穿于我們這個(gè)系列的項(xiàng)目中,因此這里就不過(guò)多介紹了,后面用到了新內(nèi)容我們?cè)僦v。
如果,你對(duì)某個(gè)函數(shù)的用法還不是很了解,那么 “快去看文檔 ... 去看文檔 ... 看文檔 ... 文檔 ...”
我是天花板,讓我們一起在軟件開(kāi)發(fā)中自我迭代。
如有任何問(wèn)題,歡迎與我聯(lián)系。
上一篇:C++代碼訓(xùn)練營(yíng) | 鳥槍終于換炮了
下一篇:C++代碼訓(xùn)練營(yíng) | 繪制星空