程序說明:
從中間向四個方向發送方塊的四階俄羅斯方塊(姑且這麼叫吧)。按照“下、左、上、右”的順序依次向不同區塊發送方塊。方塊既可以在本區塊下落,也可以在落地前轉換到其他區塊。僅對於每一單獨區塊而言,玩法與經典俄羅斯方塊無異。
不足:
- 無法調整窗口大小及在未安裝easyX的電腦上運行,可移植性極差。
- 沒有多線程設計,操作卡頓、延遲嚴重,極不直觀。
- 預計功能沒有實現(沒有在程序說明中寫出),還會時常出現卡死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;
}
}