📄 eluosi.h
字号:
break;
case 1: /* 1, 1 */
PIECE->data[2][1] = 1; PIECE->data[2][2] = 1; /* 1, 1 */
PIECE->data[3][0] = 1; PIECE->data[3][1] = 1;
PIECE->max_x = 11;
break;
}
break;
case 3: /* 2个方向 */
switch(Direction)
{
case 0: /* 1 */
PIECE->data[1][1] = 1; PIECE->data[2][0] = 1; /* 1, 1 */
PIECE->data[2][1] = 1; PIECE->data[3][0] = 1; /* 1 */
PIECE->max_x = 12;
break;
case 1: /* 1, 1 */
PIECE->data[2][0] = 1; PIECE->data[2][1] = 1; /* 1, 1 */
PIECE->data[3][1] = 1; PIECE->data[3][2] = 1;
PIECE->max_x = 11;
break;
}
break;
case 4: /* 3个方向 */
switch(Direction)
{
case 0: /* 1 */
PIECE->data[0][0] = 1; PIECE->data[1][0] = 1; /* 1 */
PIECE->data[2][0] = 1; PIECE->data[3][0] = 1; /* 1 */
PIECE->max_x = 13; /* 1 */
break;
case 1: /* 1, 1, 1, 1 */
PIECE->data[3][0] = 1; PIECE->data[3][1] = 1;
PIECE->data[3][2] = 1; PIECE->data[3][3] = 1;
PIECE->max_x = 10;
break;
}
break;
case 5: /* 4个方向 */
switch(Direction)
{
case 0: /* 1, 1 */
PIECE->data[1][0] = 1; PIECE->data[1][1] = 1; /* 1 */
PIECE->data[2][1] = 1; PIECE->data[3][1] = 1; /* 1 */
PIECE->max_x = 12;
break;
case 1: /* 1 */
PIECE->data[2][2] = 1; PIECE->data[3][0] = 1; /* 1, 1, 1 */
PIECE->data[3][1] = 1; PIECE->data[3][2] = 1;
PIECE->max_x = 11;
break;
case 2: /* 1 */
PIECE->data[1][0] = 1; PIECE->data[2][0] = 1; /* 1 */
PIECE->data[3][0] = 1; PIECE->data[3][1] = 1; /* 1, 1 */
PIECE->max_x = 12;
break;
case 3: /* 1, 1, 1 */
PIECE->data[2][0] = 1; PIECE->data[2][1] = 1; /* 1 */
PIECE->data[2][2] = 1; PIECE->data[3][0] = 1;
PIECE->max_x = 11;
break;
}
break;
case 6: /* 4个方向 */
switch(Direction)
{
case 0: /* 1, 1 */
PIECE->data[1][0] = 1; PIECE->data[1][1] = 1; /* 1 */
PIECE->data[2][0] = 1; PIECE->data[3][0] = 1; /* 1 */
PIECE->max_x = 12;
break;
case 1: /* 1, 1, 1 */
PIECE->data[2][0] = 1; PIECE->data[2][1] = 1; /* 1 */
PIECE->data[2][2] = 1; PIECE->data[3][2] = 1;
PIECE->max_x = 11;
break;
case 2: /* 1 */
PIECE->data[1][1] = 1; PIECE->data[2][1] = 1; /* 1 */
PIECE->data[3][0] = 1; PIECE->data[3][1] = 1; /* 1, 1 */
PIECE->max_x = 12;
break;
case 3: /* 1 */
PIECE->data[2][0] = 1; PIECE->data[3][0] = 1; /* 1, 1, 1 */
PIECE->data[3][1] = 1; PIECE->data[3][2] = 1;
PIECE->max_x = 11;
break;
}
break;
}
return 1;
}
void Show_piece(void)
{
BYTE i, j;
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (PIECE->data2[i][j] == 1)
{
ELS_dot(PIECE->x0+j, PIECE->y0+i-3, CLEAR);
}
}
}
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (PIECE->data[i][j] == 1)
{
ELS_dot(PIECE->x1+j, PIECE->y1+i-3, DRAW);
}
PIECE->data2[i][j] = PIECE->data[i][j];
}
}
PIECE->x0 = PIECE->x1; /* 改变方块位置 */
PIECE->y0 = PIECE->y1;
}
BYTE LR_boolean(BYTE LR)
{
BYTE i, j, TF;
TF = 1;
if (LR == 0) /* 判断左移 */
{
for (i = 0; i < 4; i++)
{
for (j = 0; j < 2; j++)
{
if (PIECE->data[i][j] && ELSboard[PIECE->y1+i-3][PIECE->x1+j-1])
{
TF = 0;
goto OVER;
}
}
}
}
else /* 判断右移 */
{
for (i = 0; i < 4; i++)
{
for (j = 3; j > -1; j--)
{
if (PIECE->data[i][j] && ELSboard[PIECE->y1+i-3][PIECE->x1+j+1])
{
TF = 0;
goto OVER;
}
}
}
}
OVER:
return TF;
}
void Ocopy_board(BYTE Fstart)
{
BYTE i, j;
for (i = Fstart; i > 3; i--)
{
for (j = 0; j < 14; j++)
{
ELSboard[i][j] = ELSboard[i-1][j];
if (ELSboard[i][j])
{
ELS_dot(j, i, DRAW);
}
else
{
ELS_dot(j, i, CLEAR);
}
}
}
}
void Play_piece()
{
BYTE i, j, EXIT, FULL;
BYTE Del_key, Direc;
EXIT = Direc = 0;
while(!EXIT)
{
Show_piece(); /* 显示方块 */
for (i = 0; i < Delay_time; i++) /* 分割延时,使键盘能实时响应。最好做成中断 */
{
rest(1); /* 延时 */
if (flag)
{
switch(readkey()) /* 获取按键盘 */
{
case LEFT:
if (PIECE->x1 > 0 && LR_boolean(0))
{
PIECE->x1--;
Show_piece();
}
break;
case RIGHT:
if (PIECE->x1 < PIECE->max_x && LR_boolean(1))
{
PIECE->x1++;
Show_piece();
}
break;
case UP:
Direc++;
if (Direc > 3)
{
Direc = 0;
}
if (Give_value(PIECE->Category, Direc))
{
Show_piece();
}
else
{
Direc--;
}
break;
case DOWN:
Delay_time /= 2;
break;
case ESC:
EXIT = 1;
break;
}
}
}
Delay_time = 500;
PIECE->y1++; /* 向下移动 */
/* 判断情况 */
for (i = 0; i < 4; i++)
{
for (j = 0; j < 4; j++)
{
if (PIECE->data[i][j] && ELSboard[PIECE->y1+i-3][PIECE->x1+j])
{
Del_key = 1; /* 说明有可能填满 */
break;
}
}
}
if (Del_key)
{
if (PIECE->y1 == 4)
{
goto OVER;
}
for (i = 0; i < 4; i++) /* 填充方块区 */
{
for (j = 0; j < 4; j++)
{
if (PIECE->data[i][j])
{
ELSboard[PIECE->y1+i-4][PIECE->x1+j] = 1;
}
}
}
/* 删除添满楼层 */
for (i = PIECE->y1-1; i > 3; i--)
{
FULL = 0;
for (j = 0; j < 14; j++)
{
if (ELSboard[i][j])
{
FULL++;
if (FULL == 14)
{
Ocopy_board(i);
i++;
}
}
else
{
break;
}
}
}
Del_key = 0;
Again_piece();
}
}
OVER: ;
}
void drawmat(BYTE *mat,BYTE matsize,BYTE x,BYTE y,BYTE color)
/*依次:字模指针、点阵大小、起始坐标(x,y)、颜色*/
{
BYTE i, j, k, n;
n = (matsize - 1) / 8 + 1;
for(j = 0; j < matsize; j++)
for(i = 0; i < n; i++)
for(k = 0;k < 8; k++)
if(mat[j * n + i] & (0x80 >> k)) /*测试为1的位则显示*/
Pixel(x + i * 8 + k, y + j, color);
}
void main(void)
{
install_keyboard();
Box(0, 0, 63, 127, CLEAR); /* 清屏幕 */
Box(2, 30, 61, 113, DRAW); /* 画方块区边框 */
Creat_piece();
Play_piece(); /* 开始游戏 */
Delete_piece(); /* 销毁方块,退出游戏 */
while(!get_click()) ;
}
END_OF_MAIN();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -