游戏欢迎界面设计
1.游戏欢迎界面概述
这里不仅实现了游戏的开始运行,键盘按键的说明,游戏的规则的说明,退出游戏。还对游戏界面进行了适当的美化:
数字键1:开始游戏;
数字键2:功能按键说明;
数字键3: 查看游戏规则;
数字键4:退出游戏;
2.设置文字颜色
沃尔玛你可以看到上图文字和图案是彩色的,而系统默认的应该是白色,我们需要用函数来实现相应的功能
/**
* 文字颜色函数 此函数的局限性:1、只能Windows系统下使用 2、不能改变背景颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
return 0;
}
在C语言中,SetConsoleTextAttribute函数用于设置控制台窗口字体颜色和背景色,函数原型:
3.设置文字显示位置
注意:文字的显示位置可以通过设置坐标来控制,定义了gotoxy函数
/**
* 获取屏幕光标位置
*/
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //横坐标
pos.Y = y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
在C语言中用SetConsoleCursorPosition函数来定位坐标的位置
4.设置标题位置
欢迎界面由三部分组成:
第一部分: 标题部分;包括游戏名称和5种俄罗斯方块的图形
第二部分: 右侧的字符画装饰;
第三部分: 菜单选项;
5.标题的绘制
使用color函数设置文字颜色,gotoxy函数获得光标位置
/**
-
欢迎界面上方的标题
*/void title()
{
color(15); //亮白色
gotoxy(28,3); //光标移动到这个位置
printf(“趣 味 俄 罗 斯 方 块\n”); //输出标题
color(11); //亮蓝色
gotoxy(18,5); //光标移动到这个位置
printf(“■”); //■
gotoxy(18,6);
printf(“■■”); //■■
gotoxy(18,7);
printf(“■”);//■color(14); //黄色 gotoxy(26,6); printf("■■"); //■■ gotoxy(28,7); // ■■ printf("■■");
//正好要错一位
color(10); //绿色
gotoxy(36,6); //■■
printf(“■■”); //■■
gotoxy(36,7);
printf(“■■”);color(13); //粉色 gotoxy(45,5); printf("■"); //■ gotoxy(45,6); //■ printf("■"); //■ gotoxy(45,7); //■ printf("■"); gotoxy(45,8); printf("■"); color(12); //亮红色 gotoxy(56,6); printf("■"); // ■ gotoxy(52,7); //■■■ printf("■■■");
}
输入主函数main做一个简单的测试:
从头至尾输入如下代码:
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
/*******定 义 全 局 变 量 *******/
int i,j,Temp,Temp1,Temp2; //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
/*******函 数 声 明 *******/
int color(int c); //设置文字颜色
void gotoxy(int x, int y); //光标移到指定位置
void title(); //欢迎界面上方的标题
void close(); //关闭游戏
/**
* 文字颜色函数 此函数的局限性:1、只能Windows系统下使用 2、不能改变背景颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
return 0;
}
/**
* 获取屏幕光标位置
*/
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //横坐标
pos.Y = y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
/**
* 欢迎界面上方的标题
*/
void title()
{
color(15); //亮白色
gotoxy(28,3);
printf("趣 味 俄 罗 斯 方 块\n"); //输出标题
color(11); //亮蓝色
gotoxy(18,5);
printf("■"); //■
gotoxy(18,6); //■■
printf("■■"); //■
gotoxy(18,7);
printf("■");
color(14); //黄色
gotoxy(26,6);
printf("■■"); //■■
gotoxy(28,7); // ■■
printf("■■");
color(10); //绿色
gotoxy(36,6); //■■
printf("■■"); //■■
gotoxy(36,7);
printf("■■");
color(13); //粉色
gotoxy(45,5);
printf("■"); //■
gotoxy(45,6); //■
printf("■"); //■
gotoxy(45,7); //■
printf("■");
gotoxy(45,8);
printf("■");
color(12); //亮红色
gotoxy(56,6);
printf("■"); // ■
gotoxy(52,7); //■■■
printf("■■■");
}
int main()
{
title();
return 0;
}
6.设置字符画装饰界面:
为了避免主界面过于死板,我们进行如下操作,使界面更加生动
打印的时候是由规律的,从上至下,自左至右,可以自行搭配颜色,甚至字符画下面打印开发者的姓名和所在开发公司:
/**
* 绘制字符花
*/
void flower()
{
gotoxy(66,11); //确定屏幕上要输出的位置
color(12); //设置颜色
printf("(_)"); //红花上边花瓣
gotoxy(64,12);
printf("(_)"); //红花左边花瓣
gotoxy(68,12);
printf("(_)"); //红花右边花瓣
gotoxy(66,13);
printf("(_)"); //红花下边花瓣
gotoxy(67,12); //红花花蕊
color(6);
printf("@");
gotoxy(72,10);
color(13);
printf("(_)"); //粉花左边花瓣
gotoxy(76,10);
printf("(_)"); //粉花右边花瓣
gotoxy(74,9);
printf("(_)"); //粉花上边花瓣
gotoxy(74,11);
printf("(_)"); //粉花下边花瓣
gotoxy(75,10);
color(6);
printf("@"); //粉花花蕊
gotoxy(71,12);
printf("|"); //两朵花之间的连接
gotoxy(72,11);
printf("/"); //两朵花之间的连接
gotoxy(70,13);
printf("\\|"); //注意、\为转义字符。想要输入\,必须在前面需要转义
gotoxy(70,14);
printf("`|/");
gotoxy(70,15);
printf("\\|");
gotoxy(71,16);
printf("| /");
gotoxy(71,17);
printf("|");
gotoxy(67,17);
color(10);
printf("\\\\\\\\"); //草地
gotoxy(73,17);
printf("//");
gotoxy(67,18);
color(2);
printf("^^^^^^^^");
gotoxy(65,19);
color(5);
printf("哈 尔 滨 工 业 大 学"); //公司名称
gotoxy(68,20);
printf("张 一 博"); //开发者的名字,读者练习时,可以换成自己的名字
}
效果图如下所示
输入如下测试代码,要注意自定义函数的位置,如果自定义函数在main函数之前定义的,则无需在main函数之中声明,直接调用即可,如果是在main函数之后定义的,则需要在main函数之中在此定义:
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
/*******定 义 全 局 变 量 *******/
int i,j,Temp,Temp1,Temp2; //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
/*******函 数 声 明 *******/
int color(int c); //设置文字颜色
void gotoxy(int x, int y); //光标移到指定位置
void title(); //欢迎界面上方的标题
void close(); //关闭游戏
/**
* 文字颜色函数 此函数的局限性:1、只能Windows系统下使用 2、不能改变背景颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
return 0;
}
/**
* 获取屏幕光标位置
*/
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //横坐标
pos.Y = y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
/**
* 欢迎界面上方的标题
*/
void title()
{
color(15); //亮白色
gotoxy(28,3);
printf("趣 味 俄 罗 斯 方 块\n"); //输出标题
color(11); //亮蓝色
gotoxy(18,5);
printf("■"); //■
gotoxy(18,6); //■■
printf("■■"); //■
gotoxy(18,7);
printf("■");
color(14); //黄色
gotoxy(26,6);
printf("■■"); //■■
gotoxy(28,7); // ■■
printf("■■");
color(10); //绿色
gotoxy(36,6); //■■
printf("■■"); //■■
gotoxy(36,7);
printf("■■");
color(13); //粉色
gotoxy(45,5);
printf("■"); //■
gotoxy(45,6); //■
printf("■"); //■
gotoxy(45,7); //■
printf("■");
gotoxy(45,8);
printf("■");
color(12); //亮红色
gotoxy(56,6);
printf("■"); // ■
gotoxy(52,7); //■■■
printf("■■■");
}
void flower()
{
gotoxy(66,11); //确定屏幕上要输出的位置
color(12); //设置颜色
printf("(_)"); //红花上边花瓣
gotoxy(64,12);
printf("(_)"); //红花左边花瓣
gotoxy(68,12);
printf("(_)"); //红花右边花瓣
gotoxy(66,13);
printf("(_)"); //红花下边花瓣
gotoxy(67,12); //红花花蕊
color(6);
printf("@");
gotoxy(72,10);
color(13);
printf("(_)"); //粉花左边花瓣
gotoxy(76,10);
printf("(_)"); //粉花右边花瓣
gotoxy(74,9);
printf("(_)"); //粉花上边花瓣
gotoxy(74,11);
printf("(_)"); //粉花下边花瓣
gotoxy(75,10);
color(6);
printf("@"); //粉花花蕊
gotoxy(71,12);
printf("|"); //两朵花之间的连接
gotoxy(72,11);
printf("/"); //两朵花之间的连接
gotoxy(70,13);
printf("\\|"); //注意、\为转义字符。想要输入\,必须在前面需要转义
gotoxy(70,14);
printf("`|/");
gotoxy(70,15);
printf("\\|");
gotoxy(71,16);
printf("| /");
gotoxy(71,17);
printf("|");
gotoxy(67,17);
color(10);
printf("\\\\\\\\"); //草地
gotoxy(73,17);
printf("//");
gotoxy(67,18);
color(2);
printf("^^^^^^^^");
gotoxy(65,19);
color(5);
printf("哈 尔 滨 工 业 大 学"); //公司名称
gotoxy(68,20);
printf("张 一 博"); //开发者的名字,读者练习时,可以换成自己的名字
}
int main()
{
title();
flower();
return 0;
}
注意:1)在flower函数之中大量出现了转义字符,\n,\t在编程的时候是常见的,”\“被称为转移字符,它之后的字母,已经不再是其本来ASCII码的意思了;
2)如果要输出“\”本身,则需要在\的后面再加一个\,因为\本身代表转义,前面再加一个\就是转义的转义,也就是\本身了
7.设计菜单选项的边框
通过两个for循环语句即可设计出边框
/**
* 菜单选项边框
*/
void welcom()
{
int n;
int i,j = 1;
color(14); //黄色边框
for (i = 9; i <= 20; i++) //循环y轴坐标,打印输出上下边框===
{
for (j = 15; j <= 60; j++) //循环x轴坐标,打印输出左右边框||
{
gotoxy(j, i);
if (i == 9 || i == 20) printf("="); //输出上下边框===
else if (j == 15 || j == 59) printf("||"); //输出左右边框||
}
}
}
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
/*******定 义 全 局 变 量 *******/
int i,j,Temp,Temp1,Temp2; //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
/*******函 数 声 明 *******/
int color(int c); //设置文字颜色
void gotoxy(int x, int y); //光标移到指定位置
void title(); //欢迎界面上方的标题
void close(); //关闭游戏
/**
* 文字颜色函数 此函数的局限性:1、只能Windows系统下使用 2、不能改变背景颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
return 0;
}
/**
* 获取屏幕光标位置
*/
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //横坐标
pos.Y = y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
/**
* 菜单选项边框
*/
void welcom()
{
int n;
int i,j = 1;
color(14); //黄色边框
for (i = 9; i <= 20; i++) //循环y轴坐标,打印输出上下边框===
{
for (j = 15; j <= 60; j++) //循环x轴坐标,打印输出左右边框||
{
gotoxy(j, i);
if (i == 9 || i == 20) printf("="); //输出上下边框===
else if (j == 15 || j == 59) printf("||"); //输出左右边框||
}
}
}
int main()
{
welcom();
return 0;
}
8.设计菜单选项值中的文字(是welcom()函数的另一部分)
/**
* 菜单选项的文字
*/
color(12); //设置字体颜色为红色
gotoxy(25, 12); //设置显示位置
printf("1.开始游戏"); //输出文字“1.开始游戏”
gotoxy(40, 12);
printf("2.按键说明");
gotoxy(25, 17);
printf("3.游戏规则");
gotoxy(40, 17);
printf("4.退出");
gotoxy(21,22);
color(3);
printf("请选择[1 2 3 4]:[ ]\b\b");
color(14);
scanf("%d", &n); //输入选项
switch (n)
{
case 1: //输入1
system("cls"); //清屏
break;
case 2: //输入2
break;
case 3: //输入3
break;
case 4: //输入4
break;
}
}
最终效果图!!!
最终测试代码发布!!!
#include <stdio.h>
#include <time.h>
#include <windows.h>
#include <conio.h>
/*******定 义 全 局 变 量 *******/
int i,j,Temp,Temp1,Temp2; //temp,temp1,temp2用于记住和转换方块变量的值
//标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
/*******函 数 声 明 *******/
int color(int c); //设置文字颜色
void gotoxy(int x, int y); //光标移到指定位置
void title(); //欢迎界面上方的标题
void close(); //关闭游戏
/**
* 文字颜色函数 此函数的局限性:1、只能Windows系统下使用 2、不能改变背景颜色
*/
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c); //更改文字颜色
return 0;
}
/**
* 获取屏幕光标位置
*/
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x; //横坐标
pos.Y = y; //纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
/**
* 菜单选项边框
*/
void welcom()
{
int n;
int i,j = 1;
color(14); //黄色边框
for (i = 9; i <= 20; i++) //循环y轴坐标,打印输出上下边框===
{
for (j = 15; j <= 60; j++) //循环x轴坐标,打印输出左右边框||
{
gotoxy(j, i);
if (i == 9 || i == 20) printf("="); //输出上下边框===
else if (j == 15 || j == 59) printf("||"); //输出左右边框||
}
}
/**
* 菜单选项的文字
*/
color(12); //设置字体颜色为红色
gotoxy(25, 12); //设置显示位置
printf("1.开始游戏"); //输出文字“1.开始游戏”
gotoxy(40, 12);
printf("2.按键说明");
gotoxy(25, 17);
printf("3.游戏规则");
gotoxy(40, 17);
printf("4.退出");
gotoxy(21,22);
color(3);
printf("请选择[1 2 3 4]:[ ]\b\b");
color(14);
scanf("%d", &n); //输入选项
switch (n)
{
case 1: //输入1
system("cls"); //清屏
break;
case 2: //输入2
break;
case 3: //输入3
break;
case 4: //输入4
break;
}
}
/**
* 欢迎界面上方的标题
*/
void title()
{
color(15); //亮白色
gotoxy(28,3);
printf("趣 味 俄 罗 斯 方 块\n"); //输出标题
color(11); //亮蓝色
gotoxy(18,5);
printf("■"); //■
gotoxy(18,6); //■■
printf("■■"); //■
gotoxy(18,7);
printf("■");
color(14); //黄色
gotoxy(26,6);
printf("■■"); //■■
gotoxy(28,7); // ■■
printf("■■");
color(10); //绿色
gotoxy(36,6); //■■
printf("■■"); //■■
gotoxy(36,7);
printf("■■");
color(13); //粉色
gotoxy(45,5);
printf("■"); //■
gotoxy(45,6); //■
printf("■"); //■
gotoxy(45,7); //■
printf("■");
gotoxy(45,8);
printf("■");
color(12); //亮红色
gotoxy(56,6);
printf("■"); // ■
gotoxy(52,7); //■■■
printf("■■■");
}
void flower()
{
gotoxy(66,11); //确定屏幕上要输出的位置
color(12); //设置颜色
printf("(_)"); //红花上边花瓣
gotoxy(64,12);
printf("(_)"); //红花左边花瓣
gotoxy(68,12);
printf("(_)"); //红花右边花瓣
gotoxy(66,13);
printf("(_)"); //红花下边花瓣
gotoxy(67,12); //红花花蕊
color(6);
printf("@");
gotoxy(72,10);
color(13);
printf("(_)"); //粉花左边花瓣
gotoxy(76,10);
printf("(_)"); //粉花右边花瓣
gotoxy(74,9);
printf("(_)"); //粉花上边花瓣
gotoxy(74,11);
printf("(_)"); //粉花下边花瓣
gotoxy(75,10);
color(6);
printf("@"); //粉花花蕊
gotoxy(71,12);
printf("|"); //两朵花之间的连接
gotoxy(72,11);
printf("/"); //两朵花之间的连接
gotoxy(70,13);
printf("\\|"); //注意、\为转义字符。想要输入\,必须在前面需要转义
gotoxy(70,14);
printf("`|/");
gotoxy(70,15);
printf("\\|");
gotoxy(71,16);
printf("| /");
gotoxy(71,17);
printf("|");
gotoxy(67,17);
color(10);
printf("\\\\\\\\"); //草地
gotoxy(73,17);
printf("//");
gotoxy(67,18);
color(2);
printf("^^^^^^^^");
gotoxy(65,19);
color(5);
printf("哈 尔 滨 工 业 大 学"); //公司名称
gotoxy(68,20);
printf("张 一 博"); //开发者的名字,读者练习时,可以换成自己的名字
}
int main()
{
title();
flower();
welcom();
return 0;
}