俄罗斯方块日记详解版1:游戏开始的三个界面

#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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值