【半成品】C语言+easyX实现高阶俄罗斯方块

程序说明:

从中间向四个方向发送方块的四阶俄罗斯方块(姑且这么叫吧)。按照“下、左、上、右”的顺序依次向不同区块发送方块。方块既可以在本区块下落,也可以在落地前转换到其他区块。仅对于每一单独区块而言,玩法与经典俄罗斯方块无异。

不足:

  1. 无法调整窗口大小及在未安装easyX的电脑上运行,可移植性极差。
  2. 没有多线程设计,操作卡顿、延迟严重,极不直观。
  3. 预计功能没有实现(没有在程序说明中写出),还会时常出现卡死bug。
#include "stdafx.h"
#include<graphics.h>
#include<math.h>
#include<conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>//选用T,Nz和I

float size = 14.0;//方块边长
float gap = 15.0;//方块核心间隔
int i, j, k;//座标数组
int type;//方块类型
int position = 0;//方块状态
int fail = 0;
char Re;//用于重启
int fall = 0;//自动下落
struct stage_area
{
    float p_x;
    float p_y;
    int took;
}area[4][21][14];//主舞台初始化
char hit;//判断是否按键
int bottom = 0;//判断是否到底
struct getpicture
{
    IMAGE img2[36];//定义背景抠图
    int x_img[36];//抠图横座标
    int y_img[36];//抠图纵座标
};
int score_get = 0;
int duan=1;
int combo = 1;

//画方块元
void square(float centre_x, float centre_y)
{
    line(centre_x - size / 2.0, centre_y - size / 2.0, centre_x - size / 2.0, centre_y + size / 2.0);
    line(centre_x - size / 2.0, centre_y + size / 2.0, centre_x + size / 2.0, centre_y + size / 2.0);
    line(centre_x + size / 2.0, centre_y + size / 2.0, centre_x + size / 2.0, centre_y - size / 2.0);
    line(centre_x + size / 2.0, centre_y - size / 2.0, centre_x - size / 2.0, centre_y - size / 2.0);
    line(centre_x + size / 2.0, centre_y + size / 2.0, centre_x - size / 2.0, centre_y - size / 2.0);
    line(centre_x + size / 2.0, centre_y - size / 2.0, centre_x - size / 2.0, centre_y + size / 2.0);
}//画出正方形,centre是正方形中心,size是边长

 //主场景
void stage()
{
    //initgraph(1366, 768);
    //setfillcolor(GREEN);
    //fillcircle(683, 384, 683);
    setcolor(RGB(230, 250, 20));//主场景颜色,黄色
    line(8, 8, 760, 8);
    line(760, 8, 760, 760);
    line(760, 760, 8, 760);
    line(8, 760, 8, 8);//外大框
    line(293, 9, 293, 759);
    line(475, 9, 475, 759);
    line(8, 293, 760, 293);
    line(8, 475, 760, 475);//内框+舞台边框
    line(294, 294, 474, 474);
    line(294, 474, 474, 294);//内框斜线
}

//舞台分区
void start_up()
{

    area[0][0][0].p_x = 294 - size / 2.0;
    area[0][0][0].p_y = 474 + size / 2.0;
    area[1][0][0].p_x = 294 - size / 2.0;
    area[1][0][0].p_y = 294 - size / 2.0;
    area[2][0][0].p_x = 474 + size / 2.0;
    area[2][0][0].p_y = 294 - size / 2.0;
    area[3][0][0].p_x = 474 + size / 2.0;
    area[3][0][0].p_y = 474 + size / 2.0;//四个区块原点初始化

    i = 0;
    for (j = 0; j < 20; j++)
    {
        for (k = 1; k < 14; k++)
        {
            area[i][j][k].p_x = area[i][j][k - 1].p_x + gap;
            area[i][j][k].p_y = area[i][j][k - 1].p_y;
            area[i][j][k].took = 0;
        }
        area[i][j + 1][0].p_y = area[i][j][0].p_y + gap;
        area[i][j + 1][0].p_x = area[i][j][0].p_x;
        area[i][j + 1][0].took = 0;
        area[i][j][0].took = 3;
        area[i][j][13].took = 3;//定义边界
    }//区块主体初始化,以座标形式标出
    for (k = 1; k < 14; k++)
        area[i][19][k].took = 3;//定义边界

    i = 1;
    for (j = 0; j < 20; j++)
    {
        for (k = 1; k < 14; k++)
        {
            area[i][j][k].p_y = area[i][j][k - 1].p_y + gap;
            area[i][j][k].p_x = area[i][j][k - 1].p_x;
            area[i][j][k].took = 0;
        }
        area[i][j + 1][0].p_x = area[i][j][0].p_x - gap;
        area[i][j + 1][0].p_y = area[i][j][0].p_y;
        area[i][j + 1][0].took = 0;
        area[i][j][0].took = 3;
        area[i][j][13].took = 3;//定义边界
    }//区块主体初始化,以座标形式标出
    for (k = 1; k < 14; k++)
        area[i][19][k].took = 3;//定义边界

    i = 2;
    for (j = 0; j < 20; j++)
    {
        for (k = 1; k < 14; k++)
        {
            area[i][j][k].p_x = area[i][j][k - 1].p_x - gap;
            area[i][j][k].p_y = area[i][j][k - 1].p_y;
            area[i][j][k].took = 0;
        }
        area[i][j + 1][0].p_y = area[i][j][0].p_y - gap;
        area[i][j + 1][0].p_x = area[i][j][0].p_x;
        area[i][j + 1][0].took = 0;
        area[i][j][0].took = 3;
        area[i][j][13].took = 3;//定义边界
    }//区块主体初始化,以座标形式标出
    for (k = 1; k < 14; k++)
        area[i][19][k].took = 3;//定义边界

    i = 3;
    for (j = 0; j < 20; j++)
    {
        for (k = 1; k < 14; k++)
        {
            area[i][j][k].p_y = area[i][j][k - 1].p_y - gap;
            area[i][j][k].p_x = area[i][j][k - 1].p_x;
            area[i][j][k].took = 0;
        }
        area[i][j + 1][0].p_x = area[i][j][0].p_x + gap;
        area[i][j + 1][0].p_y = area[i][j][0].p_y;
        area[i][j + 1][0].took = 0;
        area[i][j][0].took = 3;
        area[i][j][13].took = 3;//定义边界
    }//区块主体初始化,以座标形式标出
    for (k = 1; k < 14; k++)
        area[i][19][k].took = 3;//定义边界

    size = 14.0;//方块边长
    gap = 15.0;//方块核心间隔
    i, j, k;//座标数组
    type;//方块类型
    position = 0;//方块状态
    fail = 0;
    Re;//用于重启
    fall = 0;//天降正义!
    hit;//判断是否按键
    bottom = 0;//判断是否到底
    score_get = 0;
    score_get = 0;
    duan = 1;
    combo = 1;
}

//即时绘制方块
void fresh()
{
    for(int w=0;w<20;w++)
        for (int e = 1; e < 13; e++)
        {
            if (area[i][w][e].took == 0)
            {
                setcolor(GREEN);
                square(area[i][w][e].p_x, area[i][w][e].p_y);
            }
            if (area[i][w][e].took == 1)
            {
                setcolor(RGB(255, 255, 255));
                square(area[i][w][e].p_x, area[i][w][e].p_y);
            }

        }
}

//I形1态,横
void block_I_1(float head_x, float head_y)
{
    area[i][j][k].took = 1;
    area[i][j][k + 1].took = 1;
    area[i][j][k + 2].took = 1;
    area[i][j][k + 3].took = 1;
    fresh();

    Sleep(500);

    area[i][j][k].took = 0;
    area[i][j][k + 1].took = 0;
    area[i][j][k + 2].took = 0;
    area[i][j][k + 3].took = 0;
    fresh();
}

//I形2态,竖
void block_I_2(float head_x, float head_y)
{
    area[i][j-3][k].took = 1;
    area[i][j-2][k].took = 1;
    area[i][j-1][k].took = 1;
    area[i][j][k].took = 1;
    fresh();

    Sleep(500);

    area[i][j-1][k].took = 0;
    area[i][j-2][k].took = 0;
    area[i][j-3][k].took = 0;
    area[i][j][k].took = 0;
    fresh();
}

//T形1态,上
void block_T_1(float head_x, float head_y)
{
    area[i][j][k-1].took = 1;
    area[i][j][k+1].took = 1;
    area[i][j - 1][k].took = 1;
    area[i][j][k].took = 1;
    fresh();

    Sleep(500);

    area[i][j][k - 1].took = 0;
    area[i][j][k + 1].took = 0;
    area[i][j - 1][k].took = 0;
    area[i][j][k].took = 0;
    fresh();
}

//T形2态,右
void block_T_2(float head_x, float head_y)
{
    area[i][j][k].took = 1;
    area[i][j][k + 1].took = 1;
    area[i][j - 1][k].took = 1;
    area[i][j+1][k].took = 1;
    fresh();

    Sleep(500);

    area[i][j+1][k].took = 0;
    area[i][j][k + 1].took = 0;
    area[i][j - 1][k].took = 0;
    area[i][j][k].took = 0;
    fresh();
}

//T形3态,下
void block_T_3(float head_x, float head_y)
{
    area[i][j][k - 1].took = 1;
    area[i][j][k + 1].took = 1;
    area[i][j +1 ][k].took = 1;
    area[i][j][k].took = 1;
    fresh();

    Sleep(500);

    area[i][j][k - 1].took = 0;
    area[i][j][k + 1].took = 0;
    area[i][j +1 ][k].took = 0;
    area[i][j][k].took = 0;
    fresh();
}

//T形4态,左
void block_T_4(float head_x, float head_y)
{
    area[i][j][k].took = 1;
    area[i][j][k - 1].took = 1;
    area[i][j - 1][k].took = 1;
    area[i][j + 1][k].took = 1;
    fresh();

    Sleep(500);

    area[i][j + 1][k].took = 0;
    area[i][j][k - 1].took = 0;
    area[i][j - 1][k].took = 0;
    area[i][j][k].took = 0;
    fresh();
}

//Nz形1态,正
void block_Nz_1(float head_x, float head_y)
{
    area[i][j][k].took = 1;
    area[i][j][k - 1].took = 1;
    area[i][j + 1][k].took = 1;
    area[i][j + 1][k+1].took = 1;
    fresh();

    Sleep(500);

    area[i][j][k].took = 0;
    area[i][j][k - 1].took = 0;
    area[i][j + 1][k].took = 0;
    area[i][j + 1][k + 1].took = 0;
    fresh();
}

//Nz形2态,立
void block_Nz_2(float head_x, float head_y)
{
    area[i][j][k].took = 1;
    area[i][j][k + 1].took = 1;
    area[i][j + 1][k].took = 1;
    area[i][j - 1][k + 1].took = 1;
    fresh();

    Sleep(500);

    area[i][j][k].took = 0;
    area[i][j][k + 1].took = 0;
    area[i][j + 1][k].took = 0;
    area[i][j - 1][k + 1].took = 0;
    fresh();
}

void perform()
{
    if (i == 0)
    {
        if (type == 0)
        {
            if (position == 0)
            {
                goto i0pgps;
            }

            if (position == 1)
            {
            i0t0p1:
                block_I_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 1][k].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'a'&& area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&& area[i][j][k + 1].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }
                else //下面有方块
                {
                    area[i][j - 3][k].took = 1;
                    area[i][j - 2][k].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 2)
            {
            i0pgps:
                block_I_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 4].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }

                else //下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j][k + 2].took = 1;
                    area[i][j][k + 3].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 3)
            {
                goto i0t0p1;
            }
        }
        if (type == 1)//3
        {
            if (position == 0)
            {
            i0t3p0:
                block_Nz_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 2][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 2][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j + 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
            i0t3p1:
                block_Nz_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j - 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                goto i0t3p0;
            }

            if (position == 3)
            {
                goto i0t3p1;
            }

        }
        if (type == 2)//5
        {
            if (position == 0)
            {
                block_T_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 2].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 2].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k].took == 3 || area[i][j + 1][k - 1].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
                block_T_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                block_T_3(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 3)
            {
                block_T_4(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'w')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 's')
                        {
                            while (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'a'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'd'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 1 || area[i][j + 1][k - 1].took == 3 || area[i][j + 2][k].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

        }
    }

    if (i == 1)
    {
        if (type == 0)
        {
            if (position == 0)
            {
                goto i1pgps;
            }

            if (position == 1)
            {
            i1t0p1:
                block_I_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 1][k].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'w'&& area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 's'&& area[i][j][k + 1].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }
                else //下面有方块
                {
                    area[i][j - 3][k].took = 1;
                    area[i][j - 2][k].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 2)
            {
            i1pgps:
                block_I_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 4].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }

                else //下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j][k + 2].took = 1;
                    area[i][j][k + 3].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 3)
            {
                goto i1t0p1;
            }
        }
        if (type == 1)
        {
            if (position == 0)
            {
            i1t3p0://940
                block_Nz_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 2][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 2][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j + 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
            i1t3p1:
                block_Nz_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j - 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                goto i1t3p0;//844
            }

            if (position == 3)
            {
                goto i1t3p1;
            }

        }
        if (type == 2)
        {
            if (position == 0)
            {
                block_T_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 2].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 2].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k].took == 3 || area[i][j + 1][k - 1].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
                block_T_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                block_T_3(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 3)
            {
                block_T_4(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'd')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'a')
                        {
                            while (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'w'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 's'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 1 || area[i][j + 1][k - 1].took == 3 || area[i][j + 2][k].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

        }
    }

    if (i == 2)
    {
        if (type == 0)
        {
            if (position == 0)
            {
                goto i2pgps;
            }

            if (position == 1)
            {
            i2t0p1:
                block_I_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 1][k].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'd'&& area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&& area[i][j][k + 1].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }
                else //下面有方块
                {
                    area[i][j - 3][k].took = 1;
                    area[i][j - 2][k].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 2)
            {
            i2pgps:
                block_I_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 4].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }

                else //下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j][k + 2].took = 1;
                    area[i][j][k + 3].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 3)
            {
                goto i2t0p1;
            }
        }
        if (type == 1)//3
        {
            if (position == 0)
            {
            i2t3p0:
                block_Nz_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 2][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 2][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j + 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
            i2t3p1:
                block_Nz_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j - 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                goto i2t3p0;
            }

            if (position == 3)
            {
                goto i2t3p1;
            }

        }
        if (type == 2)//5
        {
            if (position == 0)
            {
                block_T_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 2].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 2].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k].took == 3 || area[i][j + 1][k - 1].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
                block_T_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                block_T_3(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 3)
            {
                block_T_4(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 's')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'w')
                        {
                            while (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 'd'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'a'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 1 || area[i][j + 1][k - 1].took == 3 || area[i][j + 2][k].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

        }
    }

    if (i == 3)
    {
        if (type == 0)
        {
            if (position == 0)
            {
                goto i3pgps;
            }

            if (position == 1)
            {
            i3t0p1:
                block_I_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 1][k].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 's'&& area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&& area[i][j][k + 1].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }
                else //下面有方块
                {
                    area[i][j - 3][k].took = 1;
                    area[i][j - 2][k].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 2)
            {
            i3pgps:
                block_I_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)//下面没方块
                {

                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0 && area[i][j + 1][k + 3].took == 0)
                                j++;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 4].took == 0)
                            k++;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j++;
                }

                else //下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j][k + 2].took = 1;
                    area[i][j][k + 3].took = 1;
                    fresh();//固化
                    bottom = 1;
                }

            }

            if (position == 3)
            {
                goto i3t0p1;
            }
        }
        if (type == 1)
        {
            if (position == 0)
            {
            i3t3p0://940
                block_Nz_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 2][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 2][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 2][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j + 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
            i3t3p1:
                block_Nz_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 2].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j - 1][k + 1].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                goto i3t3p0;//844
            }

            if (position == 3)
            {
                goto i3t3p1;
            }

        }
        if (type == 2)
        {
            if (position == 0)
            {
                block_T_1(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 1][k].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 2].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 2].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k].took == 3 || area[i][j + 1][k - 1].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 1)
            {
                block_T_2(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 1].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 2)
            {
                block_T_3(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 2][k].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j + 1][k - 1].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 2].took == 0 && area[i][j + 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 2][k].took == 1 || area[i][j + 1][k + 1].took == 1 || area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 3 || area[i][j + 1][k + 1].took == 3 || area[i][j + 1][k - 1].took == 3)//下面有方块
                {
                    area[i][j][k - 1].took = 1;
                    area[i][j][k + 1].took = 1;
                    area[i][j + 1][k].took = 1;
                    area[i][j][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

            if (position == 3)
            {
                block_T_4(area[i][j][k].p_x, area[i][j][k].p_y);
                if (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)//下面没方块
                {
                    if (kbhit())
                    {
                        hit = getch();
                        if (hit == 'a')
                        {
                            if (position > 2)
                                position = 0;
                            else
                                position++;
                        }
                        if (hit == 'd')
                        {
                            while (area[i][j + 1][k - 1].took == 0 && area[i][j + 2][k].took == 0)
                                j += 1;
                            j--;
                        }
                        if (hit == 's'&&area[i][j][k - 2].took == 0 && area[i][j + 1][k - 1].took == 0 && area[i][j - 1][k - 1].took == 0)
                            k--;
                        if (hit == 'w'&&area[i][j][k + 1].took == 0 && area[i][j + 1][k + 1].took == 0 && area[i][j - 1][k + 1].took == 0)
                            k += 1;
                        if (hit == 'W')
                            i = 2;
                        if (hit == 'S')
                            i = 0;
                        if (hit == 'A')
                            i = 1;
                        if (hit == 'D')
                            i = 3;
                    }
                    j += 1;
                }
                else if (area[i][j + 1][k - 1].took == 1 || area[i][j + 2][k].took == 1 || area[i][j + 1][k - 1].took == 3 || area[i][j + 2][k].took == 3)//下面有方块
                {
                    area[i][j][k].took = 1;
                    area[i][j][k - 1].took = 1;
                    area[i][j - 1][k].took = 1;
                    area[i][j + 1][k].took = 1;
                    fresh();//固化
                    bottom = 1;
                }
            }

        }
    }
}

void remove()//判断消除
{
    int rm = 0;
    int yes = 0;
    for (j = 1; j < 20; j++)
    {
        for (k = 1; k < 13; k++)
            if (area[i][j][k].took == 1)
                rm += 1;
        if (rm == 12)//遍历,某一行有12个took==1的格子
        {
            for (k = 1; k < 13; k++)
                area[i][j][k].took = 0;
            score_get += combo;
            combo++;
            fall = 1;
            yes = 1;
            rm = 0;
            break;
        }
        else
        {
            rm = 0;
            combo = 1;
        }
    }
    if (yes == 1)
    {
        while (j != 0)
        {
            for (k = 1; k < 13; k++)
                area[i][j][k].took = area[i][j - 1][k].took;
            j--;
        }
        for (j = 0; j < 20; j++)
            for (k = 1; k < 13; k++)
            {
                if (area[i][j][k].took == 0)
                {
                    setcolor(GREEN);
                    square(area[i][j][k].p_x, area[i][j][k].p_y);
                }
                if (area[i][j][k].took == 1)
                {
                    setcolor(RGB(255, 255, 255));
                    square(area[i][j][k].p_x, area[i][j][k].p_y);
                }
            }
    }

}

void game_fail()
{
    int ai;
    ai = i;
    if (bottom == 1)
        for (i = 0; i < 4; i++)
            for (k = 1; k < 13; k++)
            {
                if (area[i][0][k].took == 1)
                {
                    fail = 1;
                    break;
                }
                if (fail == 1)
                    break;
            }
    bottom = 0;
    i = ai;
}

void Fall()
{
    int ai;//临时储存i值
    int num=0;//是否产生方块
    ai = i;
    i++;
    for (j = 0; j < 20; j++)
        for (k = 1; k < 13; k++)
        {
            if (num > 2)
                num=0;
            else
                num++;
            if (area[i][j][k].took == 1 && area[i][j - 1][k].took == 0 && num == 3)
            {
                area[i][j - 1][k].took = 1;
            }
        }
    i = ai;
    fall = 0;
}

void score()
{
    IMAGE img0; // 定义 IMAGE 对象
    IMAGE img1;//定义背景图像
    IMAGE img2;
    IMAGE img3;
    IMAGE img4;
    IMAGE img5;
    IMAGE img6;
    IMAGE img7;
    IMAGE img8;
    IMAGE img9;
    IMAGE imgfen;
    IMAGE imgduan;

    loadimage(&img0, L"F:\\文档\\The C\\C作业\\小测试\\图\\0.bmp", 100, 100);
    loadimage(&img1, L"F:\\文档\\The C\\C作业\\小测试\\图\\1.bmp", 100, 100);
    loadimage(&img2, L"F:\\文档\\The C\\C作业\\小测试\\图\\2.bmp", 100, 100);
    loadimage(&img3, L"F:\\文档\\The C\\C作业\\小测试\\图\\3.bmp", 100, 100);
    loadimage(&img4, L"F:\\文档\\The C\\C作业\\小测试\\图\\4.bmp", 100, 100);
    loadimage(&img5, L"F:\\文档\\The C\\C作业\\小测试\\图\\5.bmp", 100, 100);
    loadimage(&img6, L"F:\\文档\\The C\\C作业\\小测试\\图\\6.bmp", 100, 100);
    loadimage(&img7, L"F:\\文档\\The C\\C作业\\小测试\\图\\7.bmp", 100, 100);
    loadimage(&img8, L"F:\\文档\\The C\\C作业\\小测试\\图\\8.bmp", 100, 100);
    loadimage(&img9, L"F:\\文档\\The C\\C作业\\小测试\\图\\9.bmp", 100, 100);
    loadimage(&imgfen, L"F:\\文档\\The C\\C作业\\小测试\\图\\分.bmp", 100, 100);
    loadimage(&imgduan, L"F:\\文档\\The C\\C作业\\小测试\\图\\段.bmp", 100, 100);

    if (score_get % 10 == 0)
    {
        putimage(1100, 150, &img0);//定义抠图对象

    }
    if (score_get % 10 == 1)
    {
        putimage(1100, 150, &img1);//定义抠图对象

    }
    if (score_get % 10 == 2)
    {
        putimage(1100, 150, &img2);//定义抠图对象

    }
    if (score_get % 10 == 3)
    {
        putimage(1100, 150, &img3);//定义抠图对象

    }
    if (score_get % 10 == 4)
    {
        putimage(1100, 150, &img4);//定义抠图对象

    }
    if (score_get % 10 == 5)
    {
        putimage(1100, 150, &img5);//定义抠图对象

    }
    if (score_get % 10 == 6)
    {
        putimage(1100, 150, &img6);//定义抠图对象

    }
    if (score_get % 10 == 7)
    {
        putimage(1100, 150, &img7);//定义抠图对象

    }
    if (score_get % 10 == 8)
    {
        putimage(1100, 150, &img8);//定义抠图对象

    }
    if (score_get % 10 == 9)
    {
        putimage(1100, 150, &img9);//定义抠图对象

    }


    if ((score_get / 10) % 10 == 0)
    {
        putimage(1000, 150, &img0);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 1)
    {
        putimage(1000, 150, &img1);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 2)
    {
        putimage(1000, 150, &img2);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 3)
    {
        putimage(1000, 150, &img3);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 4)
    {
        putimage(1000, 150, &img4);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 5)
    {
        putimage(1000, 150, &img5);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 6)
    {
        putimage(1000, 150, &img6);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 7)
    {
        putimage(1000, 150, &img7);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 8)
    {
        putimage(1000, 150, &img8);//定义抠图对象

    }
    if ((score_get / 10) % 10 == 9)
    {
        putimage(1000, 150, &img9);//定义抠图对象

    }




    if (combo % 10 == 0)
    {
        putimage(1100, 500, &img0);//定义抠图对象

    }
    if (combo % 10 == 1)
    {
        putimage(1100, 500, &img1);//定义抠图对象

    }
    if (combo % 10 == 2)
    {
        putimage(1100, 500, &img2);//定义抠图对象

    }
    if (combo % 10 == 3)
    {
        putimage(1100, 500, &img3);//定义抠图对象

    }
    if (combo % 10 == 4)
    {
        putimage(1100, 500, &img4);//定义抠图对象

    }
    if (combo % 10 == 5)
    {
        putimage(1100, 500, &img5);//定义抠图对象

    }
    if (combo % 10 == 6)
    {
        putimage(1100, 500, &img6);//定义抠图对象

    }
    if (combo % 10 == 7)
    {
        putimage(1100, 500, &img7);//定义抠图对象

    }
    if (combo % 10 == 8)
    {
        putimage(1100, 500, &img8);//定义抠图对象

    }
    if (combo % 10 == 9)
    {
        putimage(1100, 500, &img9);//定义抠图对象

    }


    if ((combo / 10) % 10 == 0)
    {
        putimage(1000, 500, &img0);//定义抠图对象

    }
    if ((combo / 10) % 10 == 1)
    {
        putimage(1000, 500, &img1);//定义抠图对象

    }
    if ((combo / 10) % 10 == 2)
    {
        putimage(1000, 500, &img2);//定义抠图对象

    }
    if ((combo / 10) % 10 == 3)
    {
        putimage(1000, 500, &img3);//定义抠图对象

    }
    if ((combo / 10) % 10 == 4)
    {
        putimage(1000, 500, &img4);//定义抠图对象

    }
    if ((combo / 10) % 10 == 5)
    {
        putimage(1000, 500, &img5);//定义抠图对象

    }
    if ((combo / 10) % 10 == 6)
    {
        putimage(1000, 500, &img6);//定义抠图对象

    }
    if ((combo / 10) % 10 == 7)
    {
        putimage(1000, 500, &img7);//定义抠图对象

    }
    if ((combo / 10) % 10 == 8)
    {
        putimage(1000, 500, &img8);//定义抠图对象

    }
    if ((combo / 10) % 10 == 9)
    {
        putimage(1000, 500, &img9);//定义抠图对象

    }


    putimage(900, 50, &imgfen);//定义抠图对象

    putimage(900, 400, &imgduan);//定义抠图对象

}

void main()
{
New:
    initgraph(1366, 768);
    setfillcolor(GREEN);
    fillcircle(683, 384, 683);
    stage();//38
    start_up();//57
    i = 0;
    j = 0;
    k = 7;
    //type = 6;
    //position = 0;

    while (fail == 0)
    {
        time_t t;
        srand((unsigned)time(&t));
        //i = i % 4;
        while (bottom == 0)
        {       
            perform();
            score();
            //fresh();//143
            setcolor(RGB(230, 250, 20));
            stage();
            if (bottom == 1)
            {
                remove();
                if (fail == 0)
                    game_fail();
                type = rand() % 3;
                j = 0;
                k = 7;
                if (i > 2)
                    i = 0;
                else
                    i++;

            }
        }




        //block_T_1(area[i][j][k].p_x, area[i][j][k].p_y);
        //area[i][j][k].p_x += gap;
    }



    closegraph();

    printf("失败,键入R重新开始,按其他键退出\n");
    Re = getch();
    if (Re == 'r' || Re == 'R')
    {
        fail = 0;
        goto New;
    }

}
发布了14 篇原创文章 · 获赞 33 · 访问量 9372
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章