最近,把扫雷写完了。主要的功能其实早就实现了,美化控制台页面花费了我好多时间。感觉就跟网页前端一样,我现在已经完全是前端工程师的形状了。
=============================================================================
这里把美化控制台的相关命令列举一下。下面的这些函数要使用,必须包含在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语言贪吃蛇游戏的实现(一)