#include <stdio.h>
#include <Windows.h>
#include <conio.h>
#include <time.h>
HANDLE handle; //handle一般设置为全局变量
void hideCursor()
{
CONSOLE_CURSOR_INFO info; //系统的结构体变量名字都是大写
info.bVisible = FALSE; //设置光标是否可见
info.dwSize = 1; //设置光标宽度(1-100)
SetConsoleCursorInfo(handle, &info); //设置光标属性
}
void initHandle() //初始化句柄
{
handle = GetStdHandle(STD_OUTPUT_HANDLE);//生成一个句柄
hideCursor();//游戏启动后隐藏光标位置
}
void setColor(int color) //设置颜色
{
SetConsoleTextAttribute(handle, color);
}
void setPos(int x, int y)
{
COORD coord = { x * 2,y }; //英文字母 :一个字符,汉字:两个字符
SetConsoleCursorPosition(handle, coord); //设置文字输出位置
}
void printTetris(int x, int y) //这里打印的是俄罗斯方块英文tetris
{
setPos(x,y);
printf(" ■■■■■ ■■■■■ ■■■■■ ■■■■ ■■■ ■■■■");
setPos(x,y + 1);
printf(" ■ ■ ■ ■ ■ ■ ■");
setPos(x,y + 2);
printf(" ■ ■■■■ ■ ■■■ ■ ■■■");
setPos(x,y + 3);
printf(" ■ ■ ■ ■ ■ ■ ■");
setPos(x,y + 4);
printf(" ■ ■■■■■ ■ ■ ■ ■■■ ■■■");
}
void deleteTetris(int x, int y)//清除方块
{
int i, j;
for (i = y; i <= y + 4; i++)
{
for (j = x; j <= x + 33; j++)
{
setPos(j, i);
printf("%2s", "");
}
}
}
void printStart(int x, int y) //欢迎界面一的文本
{
//随机产生颜色
int color = rand() % 0x10;
//处理黑色的情况
if (color == 0x00)
{
color = 0x0f;
}
setColor(color);
printTetris(x, y);
setPos(25, 14);
printf("按任意键开始游戏!");
setPos(46, 28);
printf("版本:俄罗斯游戏1.0");
setPos(46, 29);
printf("作者:88");
}
void printStart1(int x, int y) //模式选择界面的文本
{
//随机产生颜色
int color = rand() % 0x10;
//处理黑色的情况
if (color == 0x00)
{
color = 0x0f;
}
setColor(color);
printTetris(x, y);
setPos(25, 14);
printf(" --模式选择--");
setPos(25, 16);
printf(" ---------------");
setPos(25, 17);
printf("--按1进入单人模式--");
setPos(25, 18);
printf("--/ \\--");
setPos(25, 19);
printf("--\\ /--");
setPos(25, 20);
printf("--按2进入双人模式--");
setPos(25, 21);
printf(" ---------------");
setPos(46, 28);
printf("版本:俄罗斯游戏1.0");
setPos(46, 29);
printf("作者:88");
}
void printStart2(int x, int y) //单人模式界面的文本
{
//随机产生颜色
int color = rand() % 0x10;
//处理黑色的情况
if (color == 0x00)
{
color = 0x0f;
}
setColor(color);
printTetris(x, y);
setPos(25, 14);
printf(" --单人模式--");
setPos(25, 16);
printf(" ---------------");
setPos(25, 17);
printf("--按1进入标准模式--");
setPos(25, 18);
printf("--/ \\--");
setPos(25, 19);
printf("--\\ /--");
setPos(25, 20);
printf("--按2进入地狱模式--");
setPos(25, 21);
printf("--/ \\--");
setPos(25, 22);
printf("--\\ /--");
setPos(25, 23);
printf("--按3进入作弊模式--");
setPos(25, 24);
printf(" ---------------");
setPos(46, 28);
printf("版本:俄罗斯游戏1.0");
setPos(46, 29);
printf("作者:88");
}
void printStart3(int x, int y) //双人模式界面的文本
{
//随机产生颜色
int color = rand() % 0x10;
//处理黑色的情况
if (color == 0x00) {
color = 0x0f;
}
setColor(color);
printTetris(x, y);
setPos(25, 14);
printf(" --双人模式--");
setPos(25, 16);
printf(" ---------------");
setPos(25, 17);
printf("--按1进入标准模式--");
setPos(25, 18);
printf("--/ \\--");
setPos(25, 19);
printf("--\\ /--");
setPos(25, 20);
printf("--按2进入地狱模式--");
setPos(25, 21);
printf("--/ \\--");
setPos(25, 22);
printf("--\\ /--");
setPos(25, 23);
printf("--按3进入作弊模式--");
setPos(25, 24);
printf(" ---------------");
setPos(46, 28);
printf("版本:俄罗斯游戏1.0");
setPos(46, 29);
printf("作者:88");
}
void printAnimation() //开场动画,第一个欢迎界面
{
int x = 5;
clock_t time1, time2;
time1 = clock();
printStart(x, 5);
while (1)
{
time2 = clock();
if (time2 - time1 > 150)
{ ///时间间隔300毫秒
time1 = time2;
deleteTetris(x, 5);
printStart(++x, 5);
if (25 == x)
{
deleteTetris(x, 5); x = 5;
}
}
if (_kbhit())
{
break;
}
}
system("cls");
}
void chooseWindow()//选择模式界面
{
int x = 5;
clock_t time1, time2;
time1 = clock();
printStart1(x, 5);
while (1)
{
time2 = clock();
if (time2 - time1 > 150)
{ ///时间间隔300毫秒
time1 = time2;
deleteTetris(x, 5);
printStart1(++x, 5);
if (25 == x)
{
deleteTetris(x, 5); x = 5;
}
}
if (_kbhit())
{
break;
}
}
system("cls");
}
void chooseWindow2()//单人模式界面
{
int x = 5;
clock_t time1, time2;
time1 = clock();
printStart2(x, 5);
while (1)
{
time2 = clock();
if (time2 - time1 > 150)
{ ///时间间隔300毫秒
time1 = time2;
deleteTetris(x, 5);
printStart2(++x, 5);
if (25 == x)
{
deleteTetris(x, 5); x = 5;
}
}
if (_kbhit())
{
break;
}
}
system("cls");
}
void chooseWindow3()//双人模式界面
{
int x = 5;
clock_t time1, time2;
time1 = clock();
printStart3(x, 5);
while (1)
{
time2 = clock();
if (time2 - time1 > 150)
{ ///时间间隔300毫秒
time1 = time2;
deleteTetris(x, 5);
printStart3(++x, 5);
if (25 == x)
{
deleteTetris(x, 5); x = 5;
}
}
if (_kbhit())
{
break;
}
}
system("cls");
}
int main()
{
///初始化句柄,必须放在最开始
initHandle();
///播放背景音乐
/*mciSendString("open 俄罗斯方块进入音乐.mp3 alias g", NULL, 0, NULL);
mciSendString("play g repeat", NULL, 0, NULL);*/
printAnimation();
if (kbhit())
{
getch();
chooseWindow();
}
if (kbhit())
{
switch (getch())
{
case 49:
case 97: chooseWindow2();
/*chooseMode();*/
break;
case 50:
case 98: chooseWindow3(); /*chooseMode2(); */break;
}
}
}
俄罗斯方块日记详解版1:游戏开始的三个界面
于 2024-09-11 16:51:27 首次发布