美文网首页
像素绘图(用EasyX和C语言)

像素绘图(用EasyX和C语言)

作者: 想飞的舟 | 来源:发表于2020-01-17 11:51 被阅读0次

    在2017年的时侯通过C语言和EasyX图形库编写了一个简单的像素绘图画板,当时是因为看了一个制作小游戏的视频,然后不知道干啥看到了一种像素风的图片,脑袋一热就写了一个像素绘画板。

    这是EsayX的官方
    这是EsayX的百度百科

    话不多说,将代码分享出来:

    #include<graphics.h>
    #include<conio.h>
    #include<stdio.h>
    
    void gamebegin(void); //游戏开始界面
    void gameplay(void);  //玩游戏具体过程
    void close(void); //释放资源 
    
    COLORREF colorArr[27]={ RGB(0,0,0),RGB(124,0,0),RGB(255,0,0),
                            RGB(0,0,124),RGB(124,0,124),RGB(255,0,124),
                            RGB(0,0,255),RGB(124,0,255),RGB(255,0,255),
                            RGB(0,124,0),RGB(124,124,0),RGB(255,124,0),
                            RGB(0,124,124),RGB(0124,124,124),RGB(255,124,124),
                            RGB(0,124,255),RGB(124,124,255),RGB(255,124,255),
                            RGB(0,255,0),RGB(124,255,0),RGB(255,255,0),
                            RGB(0,225,124),RGB(124,225,124),RGB(255,225,124),
                            RGB(0,255,255),RGB(124,255,255),RGB(255,255,255)};
    void main()
    {
        gamebegin();
        gameplay();
        close();
        //printf("谢谢使用!\n按任意键结束······\n\n\n\n\n\t\t\t\t\n\n");  
    }
    void gamebegin()//游戏开始界面
    {
        initgraph(1500,800);//长宽1500*800
        setbkcolor(RGB(180,238,180));// 用背景色清空屏幕
        cleardevice();
        //绘制27色小球
        for(int y=80,i=0;y<780&&i<9;y+=80,i++)
        {
            for(int x=50,n=0;x<270&&n<3;x+=85,n++)
            {   
                COLORREF c1=colorArr[i*3+n];
                setfillcolor(c1);
                setlinestyle(BS_SOLID);
                setlinecolor(RGB(215,215,215));
                fillcircle(x,y,29);             
            }
        }
        for(y=75,i=0;y<775&&i<9;y+=80,i++)//对应26个数字
        {
            for(int x=45,n=0;x<265&&n<3;x+=85,n++)
            {
                char a[30];
                COLORREF c2=colorArr[i*3+n];
                setbkcolor(c2);
                settextcolor(RGB(50,50,80));
                settextstyle(20, 0, _T("黑体"));
                sprintf(a,"%d",i*3+n);
                outtextxy(x, y, a);
            }
        }
        //绘制清空按钮
        setlinecolor(RGB(0,200,200));
        setlinestyle(BS_SOLID,5);
        rectangle(265,80,305,720);
        rectangle(265,290,305,510);
        settextcolor(RGB(0,0,0));
        settextstyle(30, 0, _T("楷体"));
        setbkcolor(RGB(180,238,180));
        outtextxy(270,150,"保");
        outtextxy(270,190,"存");
    
        outtextxy(270,335,"点");
        outtextxy(270,370,"击");
        outtextxy(270,405,"清");
        outtextxy(270,440,"屏");
    
        //绘制网格
        setlinecolor(RGB(200,200,200));
        setlinestyle(BS_SOLID,10);
        rectangle(325,5,1495,795);
        setlinecolor(RGB(150,150,150));
        setlinestyle(BS_SOLID);
        for(int x=335;x<1490;x+=10)
            for(int y=15;y<790;y+=10)
                rectangle(x+5,y+5,x-5,y-5);
    }
    
    void close()//释放资源
    {
    
        getch();
        closegraph();
        return;
    }
    
    void gameplay()//玩游戏具体过程
    {
        COLORREF c3;
        while(true)//对网格上色操作
        {   
            while(MouseHit())
            {
                MOUSEMSG m=GetMouseMsg();//定义鼠标信息
                switch(m.uMsg)
                {
                case WM_MOUSEMOVE://鼠标移动
                    if(m.mkLButton)
                        {//27色圆的范围,选择颜色
                        for(int y=80,i=0;y<780&&i<9;y+=80,i++)
                        {
                            for(int x=50,n=0;x<270&&n<3;x+=85,n++)
                            {
                                if(m.x<=x+25&&m.y<=y+25&&m.x>=x-25&&m.y>=y-25)
                                    c3=colorArr[i*3+n];
                                    for(int x=335;x<1490;x+=10)//网格范围,涂颜色,点击左键移动涂色
                                        for(int y=15;y<790;y+=10)
                                            if(m.x<=x+4&&m.y<=y+4&&m.x>=x-4&&m.y>=y-4)
                                            {
                                                setfillcolor(c3);
                                                fillrectangle(x+5,y+5,x-5,y-5);
                                            }   
                                    
                            }
                        }
                    }
                    if(m.mkRButton)
                    {
                    for(int a=335;a<1490;a+=10)
                        for(int b=15;b<790;b+=10)
                            if(m.x<=a+4&&m.y<=b+4&&m.x>=a-4&&m.y>=b-4)
                            {
                                setfillcolor(RGB(180,238,180));
                                fillrectangle(a+5,b+5,a-5,b-5);
                            }
                    }
                    
                    break;
                case WM_LBUTTONDOWN://左键点击
                //  if(m.uMsg=WM_MOUSEMOVE||m.mkLButton)
                //  {
                    {//27色圆的范围,选择颜色
                        for(int y=80,i=0;y<780&&i<9;y+=80,i++)
                        {
                            for(int x=50,n=0;x<270&&n<3;x+=85,n++)
                            {
                                if(m.x<=x+25&&m.y<=y+25&&m.x>=x-25&&m.y>=y-25)
                                    c3=colorArr[i*3+n];
                                    for(int x=335;x<1490;x+=10)//网格范围,涂颜色,点击涂色
                                        for(int y=15;y<790;y+=10)
                                            if(m.x<=x+4&&m.y<=y+4&&m.x>=x-4&&m.y>=y-4)
                                            {
                                                //setlinecolor(c3);
                                                setfillcolor(c3);
                                                fillrectangle(x+5,y+5,x-5,y-5);
                                            }   
                            }
                        }
                    }
                //  }
                    if(m.x<=303&&m.x>=267&&m.y>=82&&m.y<=288)//保存操作
                    {
                        setlinecolor(RGB(0,150,200));
                        setlinestyle(BS_SOLID,5);
                        rectangle(265,80,305,290);
                        char str[200];
                        int wj=0;
                        for(wj=0;wj<100;)
                        {
                        sprintf(str,"C:\\Users\\念·墨白\\Desktop\\像素绘图\\保存\\%d.bmp",wj);
                        if(fopen(str,"r")!=NULL)
                            wj++;
                        else
                        {
                            saveimage(str);
                            break;
                        }
                        }
                        Sleep(100);
                        return ;                    
                    }
                    if(m.x<=303&&m.x>=267&&m.y>=292&&m.y<=508)//清空操作
                    {
                        closegraph();
                        gamebegin();
                    }
    
                    break;
                case WM_RBUTTONDOWN:
                    {
                    for(int a=335;a<1490;a+=10)
                        for(int b=15;b<790;b+=10)
                            if(m.x<=a+4&&m.y<=b+4&&m.x>=a-4&&m.y>=b-4)
                            {
                                setfillcolor(RGB(180,238,180));
                                fillrectangle(a+5,b+5,a-5,b-5);
                            }
                    }
                }   
            }
        }
    }
    

    效果图,如下:



    使用说明:

    鼠标左键 鼠标右键 保存 点击清屏
    则色和填涂 橡皮擦 路径要在代码中定义、low爆了 应该不会变白板233

    这是我画的:

    这是妹妹画的:

    说明:由于是2017年5月份左右,用时3天写完的,所以有许多不足的地方,性能方面,功能方面,界面美化方面等等,而且现在我也看不懂了,小纠结~~

    你可能不会好奇我为什么要在2020年1月17日写下这一篇文章,时隔emmmm~我掐指算一算


    巧了,我也没算出来。

    其实,我是因为刚看了markdown(一种轻量级的标记语言)来试试效果。
    这是一个建议:建议读到此处的朋友可以看看了解一下,也就10分钟左右就能用了,感觉用起来还是挺方便的。

    这是我看markdown教程的地方
    这是简书中如何使用markdown编辑文章的地方

    既然神奇搜索引擎安排你搜到这条信息,并且冥冥之中有一股神奇的魔力让你点开了这篇文章,读到了此处......
    那么感谢你一下,啦啦啦~

    相关文章

      网友评论

          本文标题:像素绘图(用EasyX和C语言)

          本文链接:https://www.haomeiwen.com/subject/bdrczctx.html