【半成品】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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章