C语言美化控制台命令

最近,把扫雷写完了。主要的功能其实早就实现了,美化控制台页面花费了我好多时间。感觉就跟网页前端一样,我现在已经完全是前端工程师的形状了。

=============================================================================
这里把美化控制台的相关命令列举一下。下面的这些函数要使用,必须包含在windows.h这个头文件中

system("pause");

实现按任意键继续的效果,这个功能我感觉挺适合控制台游戏的开发的

system("cls");

清空当前控制台的屏幕

void gotoxy(int x,int y){
    
    
    COORD c;
    c.X=x;
    c.Y=y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),c);
}

gotoxy()这个函数可以指定printf的输出位置。y代表的是第多少行,x代表的是第多少列 (控制台的行的宽度是一个回车,列的宽度是一个空格)

int color(int c){
    
    
	//SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);        //更改文字颜色
	return 0;
}

color()这个函数可以改变控制台的的字体颜色,也可以改变控制台的背景颜色

void output_board(int i,int j,int chang,int kuan){
    
    
	//(i,j)表示边框的左上角
	//i代表第几行,j代表第几列 
	int last_line=i+kuan-1;
	int last_col=j+chang-1;
	int first_j=j;
	int first_i=i; 
	for( ;i<=last_line;i++){
    
    
		//先遍历行 
		j=first_j;
		for(;j<=last_col;j++){
    
    
			//再遍历列 
			gotoxy(j,i);
			if(i==first_i||i==last_line){
    
    
				printf("-");
			}else if(j==first_j||j==last_col){
    
    
				printf("|");
			} 
		}
	}
	
	gotoxy(0,0);//控制台输出位置归零
}
//输出效果为
                      -----------
                      |         |
                      |         |
                      |         |
                      ----------- 

output_board()这个函数是我自己写的。写扫雷的时候,输出了大量的边框。所以,我就想把他直接封装起来。i代表第几行,j代表第几列,是边框的左上角(这个和上面的gotoxy参数的顺序不一样,是相反的).,可以自己定义边框的长宽

void output_squareboard(int i,int j,int chang,int kuan){
    
    
	//(i,j)表示边框的左上角
	//i代表第几行,j代表第几列
	//这个函数有bug,j和chang的奇偶性,有可能会导致最右边的边框输出不出来
	//但是,我懒得再排错了。出现右边框打印不出来的话,就自己换换j或者chang
	int last_line=i+kuan-1;
	int last_col=j+chang-1;
	int first_j=j;
	int first_i=i; 
	for( ;i<=last_line;i++){
    
    
		//先遍历行 
		j=first_j;
		for(;j<=last_col;j=j+2){
    
    
			//字符"■"占有两个空格的位置 
			//再遍历列 
			gotoxy(j,i);
			if(i==first_i||i==last_line){
    
    
				printf("■");
			}else if(j==first_j||j==last_col){
    
    
				printf("■");
			} 
		}
	}
	gotoxy(0,0);//控制台的输出位置归零 
}
//输出效果为
         ■■■■■■■■■■
         ■        ■
         ■        ■
         ■■■■■■■■■■

output_squareboard()函数是输出以 "■"围成的方框,"■"行和行之间的距离其实没有那么大,是紧靠在一起的,可以自己在控制台上试一下。
值得注意的是,"■"这个字符,在控制台上是占有两个字符的,所以在遍历列的时候,每次都要+2。这个函数实际上有一个bug,就是j和chang的奇偶性,有可能会导致最右边的边框输出不出来。但是我懒得排错了,如果出现了这种情况的话,你可以换一换j和chang的值

void SetSize(unsigned uCol,unsigned uLine){
    
    
//指定控制台窗口的大小 ,代表了控制台的长度是ucol个空格,宽度是uline个回车 
 char cmd[64];
 sprintf(cmd,"mode con cols=%d lines=%d",uCol,uLine);
 system(cmd);
}

SetSize()函数可以指定控制台显示的大小:控制台的长度是ucol个空格,宽度是uline个回车

还有一个模板,这个模板是模仿网上一个C语言贪吃蛇博客上面的。
在这里插入图片描述

void menu(){
    
    
	//显示菜单
	 
	int i,j;
	color(2);
	//绿色,输出"扫雷" 
	printf("                                                                                                       \n");
	printf("                                                                                                       \n"); 
	printf("                                                                                                       \n");
	printf("              _____    ______           ________                                    _________          \n");
	printf("              |    |  /        \\       /        \\          |     _________        ______|_______     \n");
	printf("              |    | /   ____    \\   /   ____    \\        _|__            |      |   \\  |   \\  |   \n");
	printf("              |    |/   /    \\    \\ /   /   \\    \\         |      ________|      |   \\  |   \\  | \n");
	printf("              |        /      |        /      \\    \\     __|__            |      ______________      \n");
	printf("              |      /        |      /         |    |      |      ________|      |______|______|       \n");
	printf("              |    |          |    |          |    |    ____    ___  ____        |______|______|       \n");
	printf("              |    |          |    |          |    |    |___|  |   |/ __  \\      / _____  \\          \n");
	printf("              |    |          |    |          |    |    ____   |     /   \\  \\   /  /____\\__\\       \n");
	printf("              |    |          |    |          |    |    |   |  |    |    |  |   |  \\_______           \n");
	printf("              |____|          |____|          |____|    |___|  |___ |    |__|    \\________/           \n");
	printf("                                                                                                       \n");
	printf("                                                                                                       \n");
	
	gotoxy(43,18);
	//淡蓝色,居中输出"C语言扫雷" 
	color(11);
	printf("C 语 言 扫 雷");
	
	color(14);
	//白色,输出边框
	output_board(20,27,47,6);

	color(10);
	//绿色,输出游戏选项 
	gotoxy(35, 22);
	printf("1.开始游戏");
	gotoxy(55, 22);
	printf("0.退出游戏");
	
	gotoxy(29,27);
	//蓝色,输出游戏选项 
	color(3);
	printf("请选择[1 0]:[ ]");    
	
	//作者署名
	color(7); 
	gotoxy(90,27);
	printf("by  cookie_plus");
	gotoxy(92,28);
	printf("未来科技有限公司");
	
	color(7);       // 恢复控制台的颜色
	gotoxy(0,0);    // 恢复控制台输出的位置 
}

这个模板可以一直保留着,以后再写类似的程序的时候,可以直接把printf的内容换一下

====================================================================
参考博客:C语言贪吃蛇游戏的实现(一)

猜你喜欢

转载自blog.csdn.net/cookie_plus/article/details/105105834
今日推荐