⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 俄罗斯方块
💻
📖 第 1 页 / 共 2 页
字号:


[转载]俄罗斯方块
--------------------------------------------------------------------------------
 
作者:小汀 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 + -