栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++控制台实现显示字符图片

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++控制台实现显示字符图片

这个控制台字符图片编译器叫2D player pro 2.0完全支持鼠标化操作

本代码遵循Mozilla开源协议.

#include
#include
#include
#include
#include
#include
#include
#define fk_n 200
#define make_n 100 
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
CONSOLE_FONT_INFO consoleCurrentFont;
using namespace std;
string vesion="2D_player-2.0";
string word[15]={" ","▲","△","▼","▽","○","●","◆","◇","■","□","★","☆","♀","♂"};
struct
{ 
	void color(int all){SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),all);}
	void wait(int all){Sleep(all);}
	void cls(){system("cls");}
	void b(short hz,double time){Beep(hz,time);}
	void gt(int x,int y) 
	{
		COORD coord;
		coord.X=y;//Here, the order is reversed, otherwise, the output pointer is moved to Y row and X column
		coord.Y=x;
		HANDLE a=GetStdHandle(STD_OUTPUT_HANDLE);
		SetConsoleCursorPosition(a,coord);
	}
}basic; 
struct
{
	LONG x=-1,y=-1,lest_x=-1,lest_y=-1;
	double real_x,real_y;
	POINT pt= {0,0};
	CONSOLE_FONT_INFO l_z;
	HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
	CONSOLE_FONT_INFO x_z;
	int do_=1;
    void check_mouse() 
    {
		pt.y=pt.y/real_y,pt.x=(pt.x/real_x);
		if(pt.y<0)pt.y=0;
		if(pt.x<0)pt.x=0;
	}
	void mouse()
	{
		GetCurrentConsoleFont(hOutput, FALSE, &x_z);
		if(do_==1)do_=0;
		else if((do_==0)&&(l_z.dwFontSize.X!=x_z.dwFontSize.X||l_z.dwFontSize.Y!=x_z.dwFontSize.Y))
		{
			do_=1;
			basic.color(15) ;
			basic.cls();
			printf("检测到您在修改字体!n请您修改完字体后按任意键进行强制鼠标校正");getch();
			basic.cls(); 
			get_real_mouse();
		}
		l_z.dwFontSize.X=x_z.dwFontSize.X,l_z.dwFontSize.Y=x_z.dwFontSize.Y;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),15);
		GetCursorPos(&pt);    //获取鼠标当前位置 
		ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt); 
		check_mouse();
		x=pt.x,y=pt.y;
		SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);
	} 
	void get_real_mouse()
    {
    	basic.cls();printf("鼠标校正,请用鼠标点击右下角的"Hi"");
		int x=20,y=20;
		basic.gt(x,y);printf("Hi");
		while(1)
		{
			GetCursorPos(&pt);    //获取鼠标当前位置
			ScreenToClient(FindWindow("ConsoleWindowClass", NULL), &pt); 
			if(KEY_DOWN(VK_LBUTTON)&&MessageBox(0,"您确定您点击了"Hi"吗?n如果您没有点击此点可能会导致程序错乱.","鼠标校正",4)==IDYES)
			{
				real_x=pt.x/y,real_y=pt.y/x;
				break;
			}
		}
		basic.wait(500); basic.cls();
	}
	string whats[10]={},title="",about_things="null";
	int ai_choose(void) 
	{
		CONSOLE_CURSOR_INFO cursor_info={1,0};
		SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
		short how_long=0,wait_=1;
		for(int i=1;i<=9;i++)
		{
			if(whats[i]!="")how_long++;
			else break;
		}
		int choose; 
		while(1) 
		{
			choose=-1; 
			basic.gt(1,0);
			mouse();
			if(y==1)choose=1;
			printf("%s",title.c_str()); 
			if(choose==1){basic.color(16+7);printf("(?)n");} 
			else {basic.color(7);printf("     n");} 
			short x=1;
			for(int i=1;i<=how_long;i++)
			{
				x++;
				if(y==x)choose=x;
				if(choose==i+1)basic.color(16*15);
				else basic.color(7);
				printf("%sn",whats[i].c_str()); 
			}
			basic.color(0) ;printf("nheveral"); basic.color(7);
			if(wait_==1){wait_=0;Sleep(600);}
			else if(KEY_DOWN(VK_LBUTTON)&&choose>1)break;
			else if(KEY_DOWN(VK_LBUTTON)&&choose==1)
			{
				if(about_things!=""&&about_things!="null")
				{
					basic.cls(); 
					string about="关于"+title;
					basic.color(7);
					printf("%sn",about.c_str());
					basic.color(15);
					printf("%s",about_things.c_str());
					basic.color(8);
					printf("n按任意继续...");
					getch();
					basic.cls(); 
				}
			
			} 
		}
		for(int i=1;i<=9;i++)whats[i]="";
		title="",about_things="null";
		basic.cls();
		return choose-1; 
	}
}m;
int player(string name)
{
	basic.cls() ;
	ifstream fin(name+".photo_Pro");
	string a,V,n;int zx,zy,change;
	fin>>a>>V;
	if(V!=vesion)
	{
		V="无法打开""+name+".photo_Pro"!";
		MessageBox(0,"Error",V.c_str() ,MB_OK);
	}
	fin>>a>>n; 
	string title="title 2D player pro 2.0-"+name+"(原始名:"+n+")";
	system(title.c_str());
	fin>>a>>change;
	fin>>a>>zx>>a>>zy;
	short o_[zx+1][zy+1]={};
	string P_[zx+1][zy+1]={};
	bool c_[zx+1][zy+1]={};
	fin.close();
	if(change>=1)
	{
		//MessageBox(0,"Hello","Caption",MB_OK);

		ifstream in(name+".photo_Pro");
		in>>a>>a;
		in>>a>>a;
		in>>a>>a;
		in>>a>>a;
		in>>a>>a; 
		in>>a;
		for(int x=0;x<=zx;x++)
		{
			for(int y=0;y<=zy;y++)
			{
				in>>o_[x][y]>>P_[x][y]; 
			}
		}
		in.close();
	}
	else
	{
		for(int x=0;x<=zx;x++)
		{
			for(int y=0;y<=zy;y++)
			{
				P_[x][y]=" "; 
			}
		}
	 } 
	int qian=0,bei=0,hc=0; 
	string ziti=" ";
	bool save=false,other_save=false,exit=false,cpp=false;/
	while(1)
	{
		CONSOLE_CURSOR_INFO cursor_info={1,0};
		SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
		basic.gt(0,0) ;
		for(int i=0;i<=15;i++)
		{
			basic.color(i*16+i) ;
			printf(" ");
		}
		basic.color(7);
		printf("  背景颜色,选择色块:"); 
		basic.color(bei*16+bei);
		printf(" ");
		basic.color(7);
		printf("n"); 
		for(int i=0;i<=15;i++)
		{
			basic.color(i*16+i);
			printf(" ");
		}
		basic.color(7);
		printf("  字体颜色,选择色块:"); 
		basic.color(qian*16+qian);
		printf(" ");
		basic.color(7);
		printf("n"); 
		basic.color(bei*16+qian);
		printf(" ▲△▼▽○●◆◇■□★☆♀♂");
		basic.color(7);
		printf("+  推荐字体,选择字体:"); 
		basic.color(bei*16+qian);
		printf("%s",ziti.c_str());
		basic.color(7);
		printf("n[保存并退出] [另存为并退出] [打开文件位置] [导出cpp可编译文件] [退出] [保存] [另存为]"); 
		m.mouse();
		for(int x=0,cx=4;x<=zx;x++,cx++)
		{
			for(int y=0,cy=0;y<=zy;y++,cy=cy+2)
			{
				if(!c_[x][y])
				{
					basic.gt(cx,cy);
					basic.color(o_[x][y]);
					printf("%s",P_[x][y].c_str());
					c_[x][y]=true;
				}
			}
			printf("n");
		}
		if(KEY_DOWN(VK_LBUTTON)) 
		{
			if(m.y<=2)
			{
				hc=1;
				if(m.x<=30&&m.y==0)bei=m.x/2;
				else if(m.x<=30&&m.y==1)qian=m.x/2;
				else if(m.x<=28&&m.y==2)ziti=word[m.x/2];
				else if((m.x==29||m.x==30)&&m.y==2)
				{
					string as;
					basic.cls();
					printf("添加字体:");
					cin>>as;
					ziti=as; 
					for(int x=0;x<=zx;x++)
					{
						for(int y=0;y<=zy;y++)
						{
							c_[x][y]=false;
						}
					}
				}
			} 
			else if(m.y==3&&hc==0) //操作 
			{
				if(m.x<=12)save=true,exit=true; //保存并退出
				else if(m.x>=13&&m.x<=27) save=true,other_save=true,exit=true; //另存为并退出
				else if(m.x>=28&&m.x<=42) //打开文件位置
				{
					string start="start "+name+".photo_Pro";
					system(start.c_str());
				} 
				else if(m.x>=43&&m.x<=60) cpp=true;//生成可编译文件 
				else if(m.x>=61&&m.x<=67) exit=true;//退出 
				else if(m.x>=68&&m.x<=74) save=true;//保存 
				else if(m.x>=75&&m.x<=83) save=true,other_save=true;
				/
				string n=name;
				if(other_save)
				{
					basic.cls();
					printf("另存为名称:");
					cin>>n;
					basic.cls(); 
					for(int x=0;x<=zx;x++)
					{
						for(int y=0;y<=zy;y++)
						{
							c_[x][y]=false;
						}
					}
				}
				if(save)
				{
					change++;
					ofstream fout(n+".photo_Pro");
					fout<<"[system] "+vesion+"n[name] "<n#includen#includen#includen#includenusing namespace std;nint main()n{n"; 
					fout<<"system("title "<=4&&m.x/2<=zy)
			{ 
				P_[m.y-4][m.x/2]=ziti;
				o_[m.y-4][m.x/2]=bei*16+qian;
				c_[m.y-4][m.x/2]=false;
				hc=3;
			}
			else hc=0;
		}
		
	}
	system("title 2D player pro 2.0"); 
}
int main()
{
	system("title 2D player pro 2.0"); 
	HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);  
    DWORD mode;  
    GetConsoleMode(hStdin, &mode);  
	mode &= ~ENABLE_QUICK_EDIT_MODE;  //移除快速编辑模式
	mode &= ~ENABLE_INSERT_MODE;      //移除插入模式
    mode &= ~ENABLE_MOUSE_INPUT;
    SetConsoleMode(hStdin, mode);  
	CONSOLE_CURSOR_INFO cursor_info={1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
	printf("2D player pro 2.0nMade by heveral");Sleep(100);m.get_real_mouse();
	while(1)
	{
		m.title="",m.about_things="",m.whats[1]="新建  ___.photo_Pro",m.whats[2]="修改  ___.photo_Pro";
		short a=m.ai_choose(); 
		basic.cls();
		if(a==1)
		{
			printf("新建名称(自动补齐尾缀名:___.photo_Pro)n"); 
			string name;
			int x,y; 
			cin>>name;
			ifstream fin(name+".photo_Pro");
			if(fin)
			{
				basic.cls();
				m.title="命名重复",m.about_things="当前命名文件夹中存在同名文件",m.whats[1]="撤销",m.whats[2]="覆盖";
				int u=m.ai_choose() ;
				if(u==1) 
				{
					basic.cls();
					continue;
				}
			}
			fin.close();
			printf("nx 长度n") ;
			cin>>x; 
			printf("ny 长度n") ;
			cin>>y; 
			ofstream fout(name+".photo_Pro");
			fout<<"[system] "+vesion+"n[name] "<>name; 
			ifstream fin(name+".photo_Pro");
			if(fin)
			{
				player(name);
			}
			else
			{
				basic.cls();
				MessageBox(0,"您要打开的文件不存在!","Error",MB_OK);
			}
			fin.close();
		}
	}
	
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/722745.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号