你知道EasyX嗎


關於C++控制台上的圖形界面,你知道一個東西叫做EasyX嗎?
在這里插入圖片描述

作為一個退役的OI選手(WTF?\(3^2-3^1\)年級退役?),在退役之后總想找點事情做。

  • 開發個游戲?(我只會控制台)
  • 學下人工智能?(腦子不夠用)
  • 學一下Py?(愛我C++)

好吧,我選擇了開發個游戲。
但是每次看到自己的游戲都是控制台界面的,很不爽
圖形界面咋樣?

  • QT?(不會)
  • MFC?(算了吧)
  • EasyX?(這是個什么東西?)

馬上我們就要介紹我們今天的主角——EasyX圖形庫!


關於EasyX

EasyX 是針對 C++ 的圖形庫,可以幫助 C++語言初學者快速上手圖形和游戲編程。
安裝簡單(極其簡單),使用簡單(這個必須贊),唯一一點不好的,就是只能支持VS系列產品(VC6.0,VSxxx,不包括VSCode)


如何下載?

1.打開EasyX官網點我
應該是這樣子的:
在這里插入圖片描述

2.點擊“下載 EasyX”(在圖片的右邊,找不到算你眼瞎)

3.直接打開安裝包

在這里插入圖片描述

4.下一步,來到選擇界面


5.點擊安裝(EasyX文檔也可以安裝一下,但下面的必須點一個)

6.點擊關閉

結束

如果你想測試一下,你的EasyX有沒有成功安裝
打開你的VC/VS2008/VS2010……
新建一個“空項目”或者“控制台項目”(記住啦!!重點!!一定是控制台!!)
輸入:

#include <graphics.h>      // 引用圖形庫頭文件
#include <conio.h>
int main()
{
    initgraph(640, 480);   // 創建繪圖窗口,大小為 640x480 像素
    circle(200, 200, 100); // 畫圓,圓心(200, 200),半徑 100
    _getch();              // 按任意鍵繼續
    closegraph();          // 關閉繪圖窗口
}

f5一下,黑窗口上是不是出現了一個圓?
恭喜你,安裝成功!


如何食用?

EasyX主要靠函數來進行圖形化編程。如果你不知道用啥函數,可以根據幫助文檔EasyX_Help.chm來得到相應幫助

在這里舉一個例子,電視雪花

#include <graphics.h>      // 引用圖形庫頭文件
#include <conio.h>
#include <time.h>
#include <cstdlib>
int main()
{
	srand((unsigned)time(NULL));
    initgraph(640, 480);   // 創建繪圖窗口,大小為 640x480 像素
    while(1){
    	for(int i = 0;i <= 640;i ++){
    		for(int j = 0;j < 480;j ++){
    			putpixel(i,j,rand()%2==1?BLACK:WHITE);
    		}
    	}
	}	
}

來個彩色版本的?

#include <graphics.h>      // 引用圖形庫頭文件
#include <conio.h>
#include <time.h>
#include <cstdlib>
int main()
{
	srand((unsigned)time(NULL));
	initgraph(640, 480);   // 創建繪圖窗口,大小為 640x480 像素
	while (1) {
		for (int i = 0; i <= 640; i++) {
			for (int j = 0; j < 480; j++) {
				int color = rand() % 0x233233;
				putpixel(i, j, color);			
			}
		}
	}
}

模擬鍾表

#include <graphics.h>
#include <conio.h>
#include <math.h>
 
#define	PI	3.1415926536
 
void DrawHand(int hour, int minute, int second)
{
    double a_hour, a_min, a_sec;					// 時、分、秒針的弧度值
    int x_hour, y_hour, x_min, y_min, x_sec, y_sec;	// 時、分、秒針的末端位置
 
    // 計算時、分、秒針的弧度值
    a_sec = second * 2 * PI / 60;
    a_min = minute * 2 * PI / 60 + a_sec / 60;
    a_hour= hour * 2 * PI / 12 + a_min / 12;
 
    // 計算時、分、秒針的末端位置
    x_sec = int(120 * sin(a_sec));
    y_sec = int(120 * cos(a_sec));
    x_min = int(100 * sin(a_min));
    y_min = int(100 * cos(a_min));
    x_hour= int(70 * sin(a_hour));
    y_hour= int(70 * cos(a_hour));
 
    // 畫時針
    setlinestyle(PS_SOLID, 10);
    setcolor(WHITE);
    line(320 + x_hour, 240 - y_hour, 320 - x_hour / 7, 240 + y_hour / 7);
 
    // 畫分針
    setlinestyle(PS_SOLID, 6);
    setcolor(LIGHTGRAY);
    line(320 + x_min, 240 - y_min, 320 - x_min / 5, 240 + y_min / 5);
 
    // 畫秒針
    setlinestyle(PS_SOLID, 2);
    setcolor(RED);
    line(320 + x_sec, 240 - y_sec, 320 - x_sec / 3, 240 + y_sec / 3);
}
 
void DrawDial()
{
    // 繪制一個簡單的表盤
    circle(320, 240, 2);
    circle(320, 240, 60);
    circle(320, 240, 160);
    outtextxy(296, 310, "BestAns");
 
    // 繪制刻度
    int x, y;
    for (int i=0; i<60; i++)
    {
        x = 320 + int(145 * sin(PI * 2 * i / 60));
        y = 240 + int(145 * cos(PI * 2 * i / 60));
 
        if (i % 15 == 0)
            bar(x - 5, y - 5, x + 5, y + 5);
        else if (i % 5 == 0)
            circle(x, y, 3);
        else
            putpixel(x, y, WHITE);
    }
}
 
void main()
{
    initgraph(640, 480);		// 初始化 640 x 480 的繪圖窗口
 
    DrawDial();					// 繪制表盤
 
    setwritemode(R2_XORPEN);	// 設置 XOR 繪圖模式
 
    // 繪制表針
    SYSTEMTIME ti;				// 定義變量保存當前時間
    while(!kbhit())				// 按任意鍵退出鍾表程序
    {
        GetLocalTime(&ti);		// 獲取當前時間
        DrawHand(ti.wHour, ti.wMinute, ti.wSecond);	// 畫表針
        Sleep(1000);			// 延時 1 秒
        DrawHand(ti.wHour, ti.wMinute, ti.wSecond);	// 擦表針(擦表針和畫表針的過程是一樣的)
    }
    closegraph();				// 關閉繪圖窗口
}
 

啥?你要鼠標操作?

#include <graphics.h>
#include <conio.h>
 
int main()
{
	// 初始化圖形窗口
	initgraph(640, 480);
 
	MOUSEMSG m;		// 定義鼠標消息
 
	while(true)
	{
		// 獲取一條鼠標消息
		m = GetMouseMsg();
 
		switch(m.uMsg)
		{
			case WM_MOUSEMOVE:
				// 鼠標移動的時候畫紅色的小點
				putpixel(m.x, m.y, RED);
				break;
 
			case WM_LBUTTONDOWN:
				// 如果點左鍵的同時按下了 Ctrl 鍵
				if (m.mkCtrl)
					// 畫一個大方塊
					rectangle(m.x-10, m.y-10, m.x+10, m.y+10);
				else
					// 畫一個小方塊
					rectangle(m.x-5, m.y-5, m.x+5, m.y+5);
				break;
 
			case WM_RBUTTONUP:
				return 0;	// 按鼠標右鍵退出程序
		}
	}
 
	// 關閉圖形窗口
	closegraph();
	return 0
}

在幫助文檔里,也有很多實例哦~
相信各位大佬能做出更好的東西!


完結 感謝觀看


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM