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

📄 ddpie.c

📁 一个比较垃圾的俄罗斯方块源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
#include "dos.h"           /* 结构体t的包含文件 */
#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 SPACE 0x3920       /* 定义空格键的扫描码 */
#define F1 0x3b00          /* 定义F1键的扫描码 */
#define rand (random(7)+1) /* 定义随机数rand (从1到7) */

int i,j,k;
int a_x,a_y;     /* 定义组合体左上角的坐标 */
int flag_assembly[2];   /* 定义选择组合体类型的标志  */
             /*flag_assembly[0]表示本次  flag_assembly[1]表示下次 */
int flag_change;    /* 定义组合体变形的标志 */
int flag_quad[19][12]={0};
long grade=0;      /* 记录所得分数 */
int speed=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()     /* 游戏结束信息输出 */
{
    setcolor(RED);
    settextstyle(DEFAULT_FONT,HORIZ_DIR,3);
    outtextxy(115,200,"GAME OVER");
    sleep(3);              /* 停留3秒 */
}

void infor_control()   /* 游戏控制信息 */
{
    setcolor(LIGHTBLUE);
    outtextxy(440,270,"'Esc'-------------exit");
    outtextxy(440,290,"'<--'-------------left");
    outtextxy(440,310,"'-->'------------right");
    outtextxy(440,330,"'UP'------------change");
    outtextxy(440,350,"'DOWN'--------speed up");
    outtextxy(440,370,"'ENTER'----------pause");
    outtextxy(440,390,"'SPACE'--to the bottom");
    outtextxy(440,410,"'F1'------select speed");
}

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()  /* 游戏的主要信息  包括:分数…… */
{
    char *str_here;
    setcolor(BROWN);
    setfillstyle(EMPTY_FILL,BLACK);    /* 设置bar()的填充模式 */
    bar(500,155,570,170); /* 覆盖上次的分数 */
    sprintf(str_here,"GRADE:%-8ld",grade);
    outtextxy(470,160,str_here);      /* 输出分数 */
    sprintf(str_here,"SPEED:%-8d",speed);
    bar(500,185,570,200);
    outtextxy(470,190,str_here);
    outtextxy(370,80,"Next:");
}

void select_speed()        /* 选择速度 */
{
    char *str;
    int key;
    while(1)
    {
        setfillstyle(EMPTY_FILL,BLACK);    /* 设置bar()的填充模式 */
        bar(160,245,300,265);
        sprintf(str,"Select speed: %-2d",speed);   /* 输出选择信息 */
        outtextxy(170,250,str);
        key=bioskey(0);
        switch(key)
        {
            case UP:
                if(speed>0)
                    speed--;
                break;
            case DOWN:
                if(speed<9)
                    speed++;
                break;
            case ENTER: key=100;
        }
        if(key==100)
            break;
    }
    setfillstyle(EMPTY_FILL,BLACK);    /* 设置bar()的填充模式 */
    bar(160,245,300,265);
}

void quadrel(int x,int y)    /* 设计方块的视觉效果 */
{
    setfillstyle(CLOSE_DOT_FILL,speed+2);  /* 设置bar()的填充模式 */
    bar(x+1,y+1,x+19,y+19);
    setcolor(speed+3);  /* 设置rectangle()的填充颜色 */
    rectangle(x+1,y+1,x+19,y+19);
    setcolor(speed+5);    /* 设置椭圆的外边颜色 */
    setfillstyle(HATCH_FILL,speed+4);   /* 设置椭圆的填充模式 */
    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;
                    break;
                case 0:
                    quad[0].q[3].y-=40;
                    quad[0].q[0].x-=40;
                    quad[0].q[0].y-=40;
            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -