#include<stdio.h>
#include<windows.h>//字体颜色,窗口
#include<conio.h>
#include<stdlib.h>
#include<time.h>
#include <mmsystem.h>
#pragma comment(lib,“winmm.lib”)

#define zuobiaox 13 //游戏窗口左上角的x轴坐标
#define zuobiaoy 3 //游戏窗口左上角y轴的坐标
#define height 20 //游戏窗口的高度
#define width 20 //游戏窗口的宽度

int i, j, Temp, Temp1, Temp2;
int a[80][80] = { 0 }; //标记游戏屏幕的图案:2表示游戏边框,1表示方块,0表无图案
int b[4];//标记4个口方块,0表示没有方块1表示有方块
struct fangkuai
{
int x;
int y;
int flag;
int next;
int speed;
int number;
int score;
int level;

};
HANDLE hOUT;//控制台句柄

int color(int c);//控制台中的文字颜色
void gotoxy(int x, int y);//光标移动到指定位置
void drwa();//绘制游戏边框
void falg(struct fangkuai *);//随机产生方块类型的序号
void makefangkuai(struct fangkuai *);//绘制俄罗斯方块
void printffangkuai(struct fangkuai *);//打印俄罗斯方块
void clean(struct fangkuai *);//清楚方块的痕迹
int ifmove(struct fangkuai *);//判断是否能移动,返回值为1能移动
void del(struct fangkuai *);//满行删减
void gameplay();
void regulation();//游戏规则
void explation();//按键说明
void welcome();//欢迎界面
void replay(struct fangkuai *);//重新开始
void title();//欢迎界面上方的标题
void flower();//装饰
void close();//关闭游戏

//获取光标的位置
void gotoxy(int x, int y)
{
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}

//控制文字颜色
int color(int c)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), c);
return 0;

}

//制作游戏窗口
void drwa()
{
gotoxy(zuobiaox + width - 7, zuobiaoy - 2);
color(11);
printf(“Welcome to the game!”);
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 8);
color(2);
printf("***************************");
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 7);
color(3);
printf("下一出现方块: “);
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 13);
color(2);
printf(”**************************");
gotoxy(zuobiaox + 2 * width + 3, zuobiaox + 17);
color(14);
printf(“↑键:旋转”);
gotoxy(zuobiaox + 2 * width + 3, zuobiaox + 19);
printf(“空格:暂停游戏”);
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 15);
printf(“Esc:退出游戏”);
gotoxy(zuobiaox, zuobiaoy);
color(12);
printf(“╔”);
gotoxy(zuobiaox + 2 * width - 2, zuobiaoy);
printf(“╗”);
gotoxy(zuobiaox, zuobiaoy + height);
printf(“╚”);
gotoxy(zuobiaox + 2 * width - 2, zuobiaoy + height);
printf(“╝”);
a[zuobiaox][zuobiaoy + height] = 2;//记住该处已有的图案
a[zuobiaox + 2 * width - 2][zuobiaoy + height] = 2;
for (i = 2; i < 2 * width; i += 2)
{
gotoxy(zuobiaox + i, zuobiaoy);
printf(“═”);//打印横框
}
for (i = 2; i < 2 * width - 2; i += 2)
{
gotoxy(zuobiaox + i, zuobiaoy + height);
printf(“═”);//打印下横框
a[zuobiaox + i][ zuobiaoy + height] = 2;
}
for (i = 1; i < height; i++)
{
gotoxy(zuobiaox, zuobiaoy + i);
printf(“║”);//打印左竖框
a[zuobiaox][zuobiaoy + i] = 2;//记住左竖框有图案
}
for (i = 1; i < height; i++)
{
gotoxy(zuobiaox + 2 * width - 2, zuobiaoy + i);
printf(“║”);//打印左竖框
a[zuobiaox+2
width-2][zuobiaoy + i] = 2;//记住左竖框有图案
}
}

void makefangkuai(struct fangkuai Fangkuai)
{
a[Fangkuai->x][Fangkuai->y] = b[0];//中心方块位置的图形状态
switch (Fangkuai->flag)//共七大类,19种类型
{
case 1: //田字方块
{
color(10);
a[Fangkuai->x][Fangkuai->y - 1] = b[1];
a[Fangkuai->x + 2][Fangkuai->y-1]=b[2];
a[Fangkuai->x + 2][Fangkuai->y] = b[3];
break;
}
case 2://直线方块■■■
{
color(13);
a[Fangkuai->x - 2][Fangkuai->y] = b[1];
a[Fangkuai->x + 2][Fangkuai->y] = b[2];
a[Fangkuai->x + 4][Fangkuai->y] = b[3];
break;
}
case 3://直线方块
/


■*/

{color(13);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y - 2] = b[2];a[Fangkuai->x][Fangkuai->y + 1] = b[3];break;
}
case 4://T字方块/*■■■■*/
{color(11);a[Fangkuai->x - 2][Fangkuai->y] = b[1];a[Fangkuai->x + 2][Fangkuai->y] = b[2];a[Fangkuai->x][Fangkuai->y + 1] = b[3];break;
}
case 5://顺时针90°T字方块/*■■■■*/
{color(11);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y + 1] = b[2];a[Fangkuai->x - 2][Fangkuai->y] = b[3];break;
}
case 6:/*■■■■*/
{color(11);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x - 2][Fangkuai->y] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;
}
case 7://顺时针270T字方块/*■■■■*/
{color(11);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y + 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;
}
case 8:/*■■■■  */
{color(14);a[Fangkuai->x][Fangkuai->y + 1] = b[1];a[Fangkuai->x - 2][Fangkuai->y] = b[2];a[Fangkuai->x + 2][Fangkuai->y + 1] = b[3];break;}
case 9:/*顺时针Z字方块■■■■*/
{color(14);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x - 2][Fangkuai->y] = b[2];a[Fangkuai->x - 2][Fangkuai->y + 1] = b[3];break;
}case 10:/*反转Z字方块■■■■*/
{color(14);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x - 2][Fangkuai->y - 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;
}case 11:/*顺时针Z字方块■■■■*/
{color(14);a[Fangkuai->x][Fangkuai->y + 1] = b[1];a[Fangkuai->x - 2][Fangkuai->y - 1] = b[2];a[Fangkuai->x - 2][Fangkuai->y] = b[3];break;
}
case 12:/*7字方块■■■■*/
{color(12);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y + 1] = b[2];a[Fangkuai->x - 2][Fangkuai->y - 1] = b[3];break;
}
case 13:/*顺时针90°7字方块■■■■*/
{color(12);a[Fangkuai->x - 2][Fangkuai->y] = b[1];a[Fangkuai->x + 2][Fangkuai->y - 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;
}case 14:/* 顺时针180°7字方块■■■■*/
{color(12);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y + 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y + 1] = b[3];break;
}
case 15:/*■■■■*/
{color(12);a[Fangkuai->x - 2][Fangkuai->y] = b[1];a[Fangkuai->x - 2][Fangkuai->y + 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;
}
case 16:/*■■■■*/
{color(12);a[Fangkuai->x][Fangkuai->y + 1] = b[1];a[Fangkuai->x][Fangkuai->y - 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y - 1] = b[3];break;
}case 17:/*■■■■*/
{color(12);a[Fangkuai->x - 2][Fangkuai->y] = b[1];a[Fangkuai->x + 2][Fangkuai->y + 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];break;}case 18:/*■■■■*/
{color(12);a[Fangkuai->x][Fangkuai->y - 1] = b[1];a[Fangkuai->x][Fangkuai->y + 1] = b[2];a[Fangkuai->x - 2][Fangkuai->y + 1] = b[3];break;
}case 19:/*■■■■*/
{color(12);a[Fangkuai->x - 2][Fangkuai->y] = b[1];a[Fangkuai->x - 2][Fangkuai->y - 1] = b[2];a[Fangkuai->x + 2][Fangkuai->y] = b[3];
}
}

}

/打印俄罗斯方块/
void printffangkuai(struct fangkuai *Fangkuai)
{
for (i = 0; i < 4; i++)
{
b[i] = 1;//数组b[4]的每个元素的值都是1
}
makefangkuai(Fangkuai);
for (i = Fangkuai->x - 2; i <= Fangkuai->x + 4; i += 2)
{
for (j = Fangkuai->y - 2; j <= Fangkuai->y + 1; j++)
{
if (a[i][j] == 1 && j > zuobiaoy)//j>zuobiaoy是框定图案在框中才有
{
gotoxy(i, j);
printf(“■”);
}
}
}
//打印菜单信息
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 1);
color(4);
printf(“level:”);
color(12);
printf("%d", Fangkuai->level);
gotoxy(zuobiaoy + 2 * width + 13, zuobiaoy + 3);
color(4);
printf(“score:”);
color(12);
printf("%d", Fangkuai->score);
gotoxy(zuobiaox + 2 * width + 3, zuobiaoy + 5);
color(4);
printf(“speed:”);
color(12);
printf("%d", Fangkuai->speed);

}

/判断是否可移动/
int ifmove(struct fangkuai* Fangkuai)
{
if (a[Fangkuai->x][Fangkuai->y] != 0) //当中心方块位置上有图案时,返回值为0,既不可移动
{
return 0;
}
else
{//当为田字方块且中心方块位置外,其他■字方块位置上无图案时,说明这个位置能够放下田字方块,可以移动到这个位置,返回值为1,即可移动
//比如田字方块,它的中心方块时左下角的■,如果它的上,右,右上的位置为空,则这个位置就可以放一个田字方块;如果有一个位置上不为空,都放不下一个田

 if ((Fangkuai->flag == 1 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 2 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0 && a[Fangkuai->x + 4][Fangkuai->y] == 0)) || (Fangkuai->flag == 3 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y - 2] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 4 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 5 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 6 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 7 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 8 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x + 2][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 9 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x - 2][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 10 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 11 && (a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y - 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 12 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y - 1] == 0)) || (Fangkuai->flag == 13 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x + 2][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 14 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 15 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x - 2][Fangkuai->y + 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 16 && (a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y - 1] == 0)) || (Fangkuai->flag == 17 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x + 2][Fangkuai->y + 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0)) || (Fangkuai->flag == 18 && (a[Fangkuai->x][Fangkuai->y - 1] == 0 && a[Fangkuai->x][Fangkuai->y + 1] == 0 && a[Fangkuai->x - 2][Fangkuai->y + 1] == 0)) || (Fangkuai->flag == 19 && (a[Fangkuai->x - 2][Fangkuai->y] == 0 && a[Fangkuai->x - 2][Fangkuai->y - 1] == 0 && a[Fangkuai->x + 2][Fangkuai->y] == 0))){return 1;}
}
return 0;

}

/随机产生俄罗斯方块类型的序号/
void flag(struct fangkuai *Fangkuai)
{
Fangkuai->number++;//记住产生方块的个数
srand(time(NULL));
if (Fangkuai->number == 1)
{
Fangkuai->flag = rand() % 19 + 1;//记住第一个方块的序号
}
Fangkuai->next = rand() % 19 + 1;//记住下一个方块的序号
}

/清除痕迹/
void clean(struct fangkuai *Fangkuai)
{
for (i = 0; i < 4; i++)
b[i] = 0;//数组b[4]的每个元素的值都为0
makefangkuai(Fangkuai);
for (i = Fangkuai->x - 2; i <= Fangkuai->x + 4; i += 2)
{
for (j = Fangkuai->y - 2; j <= Fangkuai->y + 1; j++)
{
if (a[i][j] == 0 && j > zuobiaoy)
{
gotoxy(i, j);
printf(" “);
}
}
}
}
/判断是否满行并删减/
void del(struct fangkuai *Fangkuai)//当某行有width-2个方块时,则满行消除
{
int k=0, Del = 0;//分别用于记录某行方块的个数和删除方块的行数的变量
for (j = zuobiaoy + height ; j >= zuobiaoy + 1; j–)
{
for (i = zuobiaox + 2; i < zuobiaox + 2 * width - 2; i += 2)
{
if (a[i][j] == 1)//竖坐标依次从下往上,横坐标依次由左至右判断是否满行
{
k++;//记录此行方块的个数
if (k == width - 2)//如果满行
{
for (k = zuobiaox + 2; k < zuobiaox + 2 * width - 2; k += 2)//删除满行的方块
{
a[k][j] = 0;
gotoxy(k, j);
printf(” “);
}
for (k = j - 1; k > zuobiaoy; k–)//如果删除行以上的位置有方块,则先清除,再将方块下移一个位置
{
for (i = zuobiaox + 2; i < zuobiaox + 2 * width - 2; i += 2)
{
if (a[i][k] == 1)
{
a[i][k] = 0;
gotoxy(i, k);
printf(” ");
a[i][k + 1] = 1;
gotoxy(i, k + 1);
printf(“■”);
}
}
}
j++;//方块下移后,重新判断删除行是否满行
Del++;//记录删除方块的行数
}
}
}
}
Fangkuai->score += 100 * Del;//没删除一行,得100分
if (Del > 0 && (Fangkuai->score % 200 == 0 || Fangkuai->score / 200 > Fangkuai->level - 1))
{

 Fangkuai->speed -= 20;Fangkuai->level++;
}

}

void gameplay()
{
int n;
struct fangkuai t, *Fangkuai = &t;//定义结构体的指针并指向结构体变量
char ch;//接受键盘输入的变量
Fangkuai->number = 0;
Fangkuai->speed = 150;
Fangkuai->score = 0;
Fangkuai->level = 1;
while (1)
{
flag(Fangkuai);//随机方块序号
Temp = Fangkuai->flag;//记住当前方块序号
Fangkuai->x = zuobiaox + 2 * width + 6;//获得预览界面方块的x坐标
Fangkuai->y = zuobiaoy + 10;//获得预览界面方块的y 坐标
Fangkuai->flag = Fangkuai->next;//获得下一个序号
printffangkuai(Fangkuai);
Fangkuai->x = zuobiaox + width;//获得游戏窗口中心方块y的坐标
Fangkuai->y = zuobiaoy - 1;
Fangkuai->flag = Temp;//获得当前的方块序号
while (1)//控制方块方向,直至方块不再下移
{
label:printffangkuai(Fangkuai);//打印方块
Sleep(Fangkuai->speed);
clean(Fangkuai);
Temp1 = Fangkuai->x;//记住当前中心方块横坐标的值
Temp2 = Fangkuai->flag;//记住当前方块的序号
if (kbhit())
{
ch = getch();
if (ch == 75)//按←向左
{
Fangkuai->x -= 2;
}
if (ch == 77)//→
{
Fangkuai->x += 2;
}
if (ch == 80)//↓加快下落
{
if (ifmove(Fangkuai) != 0)
{
Fangkuai->y += 2;
}
if (ifmove(Fangkuai) == 0)
{
Fangkuai->y = zuobiaoy + height - 2;
}
}
if (ch == 72)//↑变形
{
if (Fangkuai->flag >= 2 && Fangkuai->flag <= 3)
{
Fangkuai->flag++;
Fangkuai->flag %= 2;
Fangkuai->flag += 2;

             }if (Fangkuai->flag >= 4 && Fangkuai->flag <= 7){Fangkuai->flag++;Fangkuai->flag %= 4;Fangkuai->flag += 4;}if (Fangkuai->flag >= 8 && Fangkuai->flag <= 11){Fangkuai->flag++;Fangkuai->flag %= 4;Fangkuai->flag += 8;}if (Fangkuai->flag >= 12 && Fangkuai->flag <= 15){Fangkuai->flag++;Fangkuai->flag %= 4;Fangkuai->flag += 12;}if (Fangkuai->flag >= 16 && Fangkuai->flag <= 19){Fangkuai->flag++;Fangkuai->flag %= 4;Fangkuai->flag += 16;}}if (ch == 32) //空格暂停{printffangkuai(Fangkuai);while (1){if (kbhit())//再按空格键,继续游戏{ch = getch();if (ch == 32){goto label;}}}}if (ch == 27){system("cls");memset(a, 0, 6400 * sizeof(int));//初始化数组welcome();}if (ifmove(Fangkuai) == 0)//如果不可动,上面操作无效{Fangkuai->x = Temp1;Fangkuai->flag = Temp2;}else //如果可动,执行操作goto label;}Fangkuai->y++;//如果没有操作指令,方块向下if (ifmove(Fangkuai) == 0)//如果向下移动且不可动,方块放在此处{Fangkuai->y--;printffangkuai(Fangkuai);del(Fangkuai);break;}}for (i = Fangkuai->y - 2; i < Fangkuai->y + 2; i++)//游戏结束条件:方块触到框顶{if (i == zuobiaoy){system("cls");gotoxy(29, 7);printf("  \n");color(12);printf("\t\t\t■■■■  ■    ■  ■■   \n");printf("\t\t\t■        ■■  ■  ■  ■  \n");printf("\t\t\t■■■    ■ ■ ■  ■   ■\n");printf("\t\t\t■        ■  ■■  ■  ■   \n");printf("\t\t\t■■■■  ■    ■  ■■   \n");gotoxy(17, 18);color(14);printf("重新玩一把---1");gotoxy(44, 18);printf("不玩了---2");int n;gotoxy(32, 20);printf("选择【1/2】:");color(11);scanf("%d", &n);switch (n){case 1:{system("cls");replay(Fangkuai);break; }case 2:{exit(0);break;}}}}Fangkuai->flag = Fangkuai->next;//清除下一个俄罗斯方块的图形Fangkuai->x = zuobiaox + 2 * width + 6;Fangkuai->y = zuobiaoy + 10;clean(Fangkuai);
}

}

void replay(struct fangkuai*)
{
system(“cls”);
memset(a, 0, 6400 * sizeof(int));
drwa();
gameplay();
}

int main()
{
title();
mciSendString(L"open D:\饶品德作品\ConsoleApplication1\aa.mp3", NULL, 0, 0);
mciSendString(L"play D:\饶品德作品\ConsoleApplication1\aa.mp3", NULL, 0, 0);
flower();
welcome();

}

/欢迎界面/
void welcome()
{
int n;
int i, j = 1;
color(14);
for (i = 9; i <= 20; i++)//输出上下边框
{
for (j = 15; j <= 60; j++)//输出左右边框
{
gotoxy(j, i);
if (i == 9 || i == 20)
printf("=");
else if (j == 15 || j == 59)
printf("||");

 }
}
color(12);
gotoxy(25, 12);
printf("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:system("cls");drwa();gameplay();break;
case 2:explation();break;
case 3:regulation();break;
case 4:close();break;
}

}

void title()
{
color(15);
gotoxy(16, 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(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("^^^^^^^");

}

void close()
{
exit(0);
}
void explation()
{
int i, j = 1;
system(“cls”);
color(13);
gotoxy(32, 3);
printf(“按键说明”);
color(2);
for (i = 6; i <= 16; i++)
{
for (j = 15; j <= 60; j++)
{
gotoxy(j, i);
if (i == 6 || i == 16)
printf("=");
else if (j == 15 || j == 59) printf("||");
}
}
color(3);
gotoxy(18, 7);
printf(“玩家可通过←→移动方块”);
color(10);
gotoxy(18, 9);
printf(“↑使方块旋转”);
color(14);
gotoxy(18, 11);
printf(“↓加速下落”);
color(11);
gotoxy(18, 13);
printf(“空格暂停,Esc退出”);
getch();
system(“cls”);
main();
}

void regulation()
{
int i, j = 1;
system(“cls”);
color(13);
gotoxy(34, 3);
printf(“游戏规则”);
color(2);
for (i = 6; i <= 18; i++)
{
for (j = 12; j <= 70; j++)
{
gotoxy(j, i);
if (i == 6 || i == 18) printf("=");
else if (j == 12 || j == 69) printf("||");
}
}
color(12);
gotoxy(16, 7);
printf(“每消除一行,积分增加100”);
color(11);
gotoxy(16, 15);
printf(“每积累1000分提升一个等级”);
getch();
system(“cls”);
welcome();
}

//注意:
主函数中:
mciSendString(L"open D:\饶品德作品\ConsoleApplication1\aa.mp3", NULL, 0, 0);
mciSendString(L"play D:\饶品德作品\ConsoleApplication1\aa.mp3", NULL, 0, 0);
这两句作用是添加 背景音乐,你需要下载一首歌曲,格式如上代码所示,把歌曲路径放入与代码相同的文件中,aa.mp3就是XXX.mp3,歌曲名字而已,说的不详细,这个可以百度搜。

C语言---------俄罗斯方块(源代码)相关推荐

  1. C#语言俄罗斯方块源代码(据陈广老师视频) 第1-6集

    写到第六集,出现了很多错误,都是照着上面写的也不知道怎么回事,先不解决了,以后学习的过程中慢慢解决吧. 代码就先写前6集吧,估计已经写到整个代码的70%了,呵呵 整个项目代码:C#语言俄罗斯方块源代码 ...

  2. C#语言俄罗斯方块源代码(据陈广老师视频)

    以下是我根据陈广老师视频,自己敲的代码,日后会不断更新. using System; using System.Collections.Generic; using System.ComponentM ...

  3. 输出 Hello World 混乱C语言的源代码

    下面的六个程序片段主要完成这些事情: 输出Hello, World 混乱C语言的源代码 下面的所有程序都可以在GCC下编译通过,只有最后一个需要动用C 的编译器g 才能编程通过. lns=" ...

  4. iar环境下c语言编程,c语言_源代码-iar环境配置.pdf

    c语言_源代码-iar环境配置 欢迎光临我的博客:/mikehendry 其实,IAR 编译环境的配置是相当重要的,没配置正确或者不符合自己的习惯的话,使用起来就会很麻烦.下面 我根据网上的经验和资料 ...

  5. c语言hypot函数,hypot ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] /* hypot函数对于给定的直角三角形的两个直角边, 求其斜边的长度. */ //一般的常规算法: doublemy_ ...

  6. c语言俄罗斯方块程序设计论文,c语言俄罗斯方块游戏程序设计报告

    c语言俄罗斯方块游戏程序设计报告 俄罗斯方块程序设计报告 2018-7-1511 计本(2)班 卢文俊C 语言课程设计报告主标题: C 语言课程设计 副标题: 俄罗斯方块游戏 ----界面设计姓 名: ...

  7. 51单片机c语言程序控制,51单片机C语言程序设计源代码

    <51单片机C语言程序设计源代码>由会员分享,可在线阅读,更多相关<51单片机C语言程序设计源代码(281页珍藏版)>请在人人文库网上搜索. 1.51 SCM c语言教程示例2 ...

  8. pow ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] double my_pow(double x, double y) { register double ret, val ...

  9. fabs ( )【C语言库函数源代码】

    [C语言库函数源代码] [本程序在Dev C++ 4.9.9.2 下编译通过] float my_fabs01 (float fnumber) { float ret; __asm__ ( " ...

  10. c语言象棋教程下载,C语言程序源代码中国象棋.doc-资源下载在线文库www.lddoc.cn...

    C语言程序源代码---中国象棋.doc includegraphics.hincludeconio.hincludestring.hincludebios.hincludestdlib.hinclud ...

最新文章

  1. Numpy入门教程:03.数组操作
  2. 2016年第七届蓝桥杯 - 省赛 - C/C++大学A组 - B. 生日蜡烛
  3. excel如何返回双引号
  4. MySQL操作实战(一):关键字 函数
  5. [蓝桥杯2019初赛]完全二叉树的权值-完全二叉树的性质
  6. Spring cloud——Hystrix 原理解析
  7. 使用LinkedHashMap的Code4ReferenceList最近使用(LRU)实现
  8. 沫沫金:收集Hibernate使用过程中的小技巧(不断更新)
  9. php mysql 排名_mysql中如何实现排名
  10. inputtextarea表单提示文字
  11. python 运算符优先级、Chaining comparison operators
  12. C#窗体控件—textbox
  13. 【VSCode】SSH远程连接服务器
  14. Arduino学习笔记
  15. uni app 自定义基座 真机调试 ios设备
  16. RationalDMIS 2020高级编程之提取数据OBTAIN语句
  17. html怎么把网址设为首页,怎样让网站设为首页和加入收藏
  18. 在野外面对熊应该怎么办?
  19. linux如何上传数据到百度网盘,Linux命令行上传文件到百度网盘
  20. git语法大全(值得收藏)

热门文章

  1. Android 开源无线投屏,用树莓派Raspberry Pi 4B制作一个无线投屏器(20200803)
  2. [易语言]易语言实现简单的答题软件
  3. 理解C/C++运行时库
  4. Milogs客户销售工作日志软件系统简介
  5. 05.[图解TCPIP(第5版) 文档简单整理
  6. PaddleOCR 手写识别模型:标注到训练
  7. Charles使用教程(Mac)
  8. 计算机存储器的分类图片,存储器分类及各自特点有哪些
  9. 备考计算机三级数据库——SQL 案例
  10. 移动通信原理学习笔记之三——抗衰落和链路性能增强技术