📄
字号:
[转载]俄罗斯方块
--------------------------------------------------------------------------------
作者:小汀 2004-8-16 20:09:00 已被阅读99次 编辑 | 删除 | 保存本文到我的公文包
#include "graphics.h" /* 图形函数的包含文件 */
#include "stdlib.h" /* 随机函数的包含文件 */
#define LEFT 0x4b00 /* 定义left键的扫描码 */
#define RIGHT 0x4d00 /* 定义right键的扫描码 */
#define DOWN 0x5000 /* 定义down键的扫描码 */
#define UP 0x4800 /* 定义up键的扫描码 */
#define ESC 0x011b /* 定义Esc键的扫描码 */
#define ENTER 0x1c0d /* 定义回车键的扫描码 */
#define rand (random(7)+1) /* 定义随机数rand (从1到7) */
int i,j,k;
int a_x,a_y; /* 定义组合体左上角的坐标 */
int flag_assembly[2]; /* 定义选择组合体类型的标志 0表示本次 1表示下次 */
int flag_change; /* 定义组合体变形的标志 */
int flag_quad[19][12]={0};
int grade=0; /* 记录所得分数 */
typedef struct /* 定义结构体类型site */
{
int x; /* 横坐标 */
int y; /* 纵坐标 */
}site;
struct Quad /* 定义结构体类型Quad */
{
site q[4]; /* 四个方块 */
}quad[3]; /* quad[0]用来表示本次出现的组合 */
/* quad[1]用来在组合变形后覆盖上次的组合 */
/* quad[2]用来显示下次将出现的组合 */
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0; /* 和gd = VGA,gm = VGAHI是同样效果 */
registerbgidriver(EGAVGA_driver);/* 注册BGI驱动后可以不需要.BGI文件的支持运行 */
initgraph(&gd, &gm, "");
}
void gameover() /* 游戏结束信息输出 */
{
cleardevice(); /* 清屏 */
setcolor(RED);
settextstyle(DEFAULT_FONT,HORIZ_DIR,RED);
outtextxy(180,200,"GAME OVER");
sleep(3); /* 停留3秒 */
}
void infor_control() /* 游戏控制信息 */
{
setcolor(LIGHTBLUE);
outtextxy(460,200,"'Esc'------exit");
outtextxy(460,220,"'<--'------left");
outtextxy(460,240,"'-->'------right");
outtextxy(460,260,"'UP'------change");
outtextxy(460,280,"'DOWN'------speed up");
outtextxy(460,300,"'ENTER'------pause");
}
void logo_ddpie() /* 标志输出 */
{
setcolor(RED);
outtextxy(460,80,"----------------");
outtextxy(460,100,"Made by ddpie");
outtextxy(460,120," -----2004.8.8");
outtextxy(460,140,"----------------");
}
void infor_now() /* 游戏的主要信息 包括:分数…… */
{
int *str;
setcolor(BROWN);
outtextxy(370,80,"Next:");
setfillstyle(EMPTY_FILL,BLACK); /* 设置bar()的填充模式 */
bar(380,195,430,210); /* 覆盖上次的分数 */
sprintf(str,"GRADE:%-8d",grade);
outtextxy(350,200,str); /* 输出分数 */
}
void quadrel(int x,int y) /* 设计方块的视觉效果 */
{
setfillstyle(CLOSE_DOT_FILL,YELLOW); /* 设置bar()的填充模式 */
bar(x+1,y+1,x+19,y+19);
setcolor(WHITE); /* 设置rectangle()的填充颜色 */
rectangle(x+1,y+1,x+19,y+19);
setcolor(BROWN); /* 设置椭圆的外边颜色 */
setfillstyle(HATCH_FILL,DARKGRAY); /* 设置椭圆的填充模式 */
fillellipse(x+10,y+10,7,7);
}
void drawwall() /* 游戏的外围墙 */
{
setcolor(LIGHTGREEN); /* 设置颜色 */
for(i=115;i<=320;i++)
if(i%10==5)
{
rectangle(i,35,i+10,45); /* 上 */
rectangle(i,415,i+10,425); /* 下 */
}
for(i=35;i<=415;i++)
if(i%10==5)
{
rectangle(105,i,115,i+10); /* 左 */
rectangle(325,i,335,i+10); /* 右 */
}
}
void assembly(int x) /* 选择组合体的类型 */
{
switch(x)
{
case 1: /* S形 */
quad[0].q[0].x=a_x;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x+20;
quad[0].q[2].y=a_y+20;
quad[0].q[3].x=a_x+20;
quad[0].q[3].y=a_y+40;
break;
case 2: /* 反S形 */
quad[0].q[0].x=a_x+20;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x+20;
quad[0].q[2].y=a_y+20;
quad[0].q[3].x=a_x;
quad[0].q[3].y=a_y+40;
break;
case 3: /* 竖条形 */
quad[0].q[0].x=a_x+20;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x+20;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x+20;
quad[0].q[2].y=a_y+40;
quad[0].q[3].x=a_x+20;
quad[0].q[3].y=a_y+60;
break;
case 4: /* 倒T形 */
quad[0].q[0].x=a_x+20;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x+20;
quad[0].q[2].y=a_y+20;
quad[0].q[3].x=a_x+40;
quad[0].q[3].y=a_y+20;
break;
case 5: /* 反L形 */
quad[0].q[0].x=a_x;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x;
quad[0].q[2].y=a_y+40;
quad[0].q[3].x=a_x+20;
quad[0].q[3].y=a_y;
break;
case 6: /* L形 */
quad[0].q[0].x=a_x+20;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x+40;
quad[0].q[1].y=a_y;
quad[0].q[2].x=a_x+40;
quad[0].q[2].y=a_y+20;
quad[0].q[3].x=a_x+40;
quad[0].q[3].y=a_y+40;
break;
case 7: /* 方形 */
quad[0].q[0].x=a_x;
quad[0].q[0].y=a_y;
quad[0].q[1].x=a_x;
quad[0].q[1].y=a_y+20;
quad[0].q[2].x=a_x+20;
quad[0].q[2].y=a_y;
quad[0].q[3].x=a_x+20;
quad[0].q[3].y=a_y+20;
}
}
void change_assembly(int x) /* 组合体变形 */
{
switch(x) /* 判断要变形的组合体的类型 */
{
case 1: /* S形 */
switch(flag_change%2) /* 判断从什么变到什么 */
{
case 1:
quad[0].q[0].x+=40;
quad[0].q[3].y-=40;
break;
case 0:
quad[0].q[0].x-=40;
quad[0].q[3].y+=40;
}
break;
case 2: /* 反S形 */
switch(flag_change%2) /* 判断从什么变到什么 */
{
case 1:
quad[0].q[1].x+=40;
quad[0].q[3].y-=40;
break;
case 0:
quad[0].q[1].x-=40;
quad[0].q[3].y+=40;
}
break;
case 3: /* 竖条形 */
switch(flag_change%2) /* 判断从什么变到什么 */
{
case 1:
quad[0].q[0].x-=20;
quad[0].q[0].y+=20;
quad[0].q[2].x+=20;
quad[0].q[2].y-=20;
quad[0].q[3].x+=40;
quad[0].q[3].y-=40;
break;
case 0:
quad[0].q[0].x+=20;
quad[0].q[0].y-=20;
quad[0].q[2].x-=20;
quad[0].q[2].y+=20;
quad[0].q[3].x-=40;
quad[0].q[3].y+=40;
}
break;
case 4: /* 倒T形 */
switch(flag_change%4) /* 判断从什么变到什么 */
{
case 1:
quad[0].q[1].x+=20;
quad[0].q[1].y+=20;
break;
case 2:
quad[0].q[0].x-=20;
quad[0].q[0].y+=20;
break;
case 3:
quad[0].q[3].x-=20;
quad[0].q[3].y-=20;
break;
case 0:
quad[0].q[0].x+=20;
quad[0].q[0].y-=20;
quad[0].q[1].x-=20;
quad[0].q[1].y-=20;
quad[0].q[3].x+=20;
quad[0].q[3].y+=20;
}
break;
case 5: /* 反L形 */
switch(flag_change%4) /* 判断从什么变到什么 */
{
case 1:
quad[0].q[1].x+=40;
quad[0].q[2].x+=40;
quad[0].q[2].y-=40;
break;
case 2:
quad[0].q[3].y+=40;
quad[0].q[0].x+=40;
quad[0].q[0].y+=40;
break;
case 3:
quad[0].q[1].x-=40;
quad[0].q[2].x-=40;
quad[0].q[2].y+=40;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -