程序说明:
从中间向四个方向发送方块的四阶俄罗斯方块(姑且这么叫吧)。按照“下、左、上、右”的顺序依次向不同区块发送方块。方块既可以在本区块下落,也可以在落地前转换到其他区块。仅对于每一单独区块而言,玩法与经典俄罗斯方块无异。
不足:
- 无法调整窗口大小及在未安装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;
}
}