簡單的像素畫板(C語言編寫)


在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);
						}
				}
			}	
		}
	}
}

效果圖,如下:
image.png
使用說明:

鼠標左鍵 鼠標右鍵 保存 點擊清屏
則色和填塗 橡皮擦 路徑要在代碼中定義、low爆了 應該不會變白板233

這是我畫的:

這是妹妹畫的:

說明:由於是2017年5月份左右,用時3天寫完的,所以有許多不足的地方,性能方面,功能方面,界面美化方面等等,而且現在我也看不懂了,小糾結~~

你可能不會好奇我為什么要在2020年1月20日寫下這一篇文章,時隔emmmm~我掐指算一算
巧了,我也沒算出來。

其實,我是因為剛注冊了來試試看這個后台怎么樣,然后就復制粘貼了一篇我在另一個平台寫的文章來試試效果。

既然神奇搜索引擎安排你搜到這條信息,並且冥冥之中有一股神奇的魔力讓你點開了這篇文章,讀到了此處......
那么感謝你一下,啦啦啦~


免責聲明!

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



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