zoukankan      html  css  js  c++  java
  • 你知道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
    }
    

    在帮助文档里,也有很多实例哦~
    相信各位大佬能做出更好的东西!


    完结 感谢观看

  • 相关阅读:
    编码导致 html和aspx 样式差异,变形
    Recommand of the Day:Names in English
    NSBundle常用方法及解释
    在K8S 中部署 Spring Boot 应用,爽!
    如果抛开 Spring,如何自己实现 AOP?面试必问。。。
    为什么阿里强制 boolean 类型变量不能使用 is 开头?
    CTO 说禁用 Lombok,看我怼死他。。
    面试官:什么是 YAML?和 Spring Boot 有什么关系?
    面试官:线程池多余的线程是如何回收的?
    JetBrains 发布下一代 IDE,无比轻量,几秒就能启动干活,IDEA 可以扔了。。
  • 原文地址:https://www.cnblogs.com/sdltf/p/12295362.html
Copyright © 2011-2022 走看看