📄 eluosi.h
字号:
#include "D:\MSP_H\12864lcd.h"
#define DRAW 0x00
#define CLEAR 0x01
#define ESC 0x01
#define LEFT 0x07
#define RIGHT 0x09
#define UP 0x05
#define DOWN 0x08
void Pixel(BYTE xx,BYTE yy,BYTE PixelModel); /* 底层画点抽像层 */
void Box(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE BoxModel,BYTE FillType); /* 底层矩形抽像层 */
/* 俄罗斯方块的画点函数,这样构造可以方便实现在不同硬件平台移植,
此函数是以 4X4 个 DPJ_dot() 像素点为一个点。 */
void ELS_dot(BYTE x, BYTE y, BYTE mode)/* 构造俄罗斯方块的画点函数 */
{
BYTE dx, dy;
if (x > -1 && x < 14
&& y > -1 && y < 20) /* 不超出方块显示区域 */
{
dx = x*4 + 4; /* 抽象方块显示区域(6, 34, 57, 110) */
dy = y*4 + 32;
Box(dx, dy, dx+3, dy+3, mode); /* 以 mode 方式画方块点 */
}
}
typedef struct
{
BYTE Category; /* 类型,共7种 */
BYTE Direction; /* 朝的方向 */
BYTE x0, y0, x1, y1; /* 方块在方块区的位置,左下角 */
BYTE max_x; /* 方块能到达方块区的最左端 */
BYTE data[4][4], data2[4][4]; /* 方块数据 */
} ELSpiece; /* 俄罗斯方块的有关信息结构 */
void Creat_piece(void); /* 开辟一个方块 */
void Again_piece(void); /* 再次放出方块 */
void Delete_piece(void); /* 释放一个方块内存 */
BYTE Give_value(BYTE Category, BYTE Direction); /* 给方块赋值 */
void Play_piece(void); /* 开始游戏 */
void Show_piece(void); /* 显示方块 */
void Ocopy_board(BYTE Fstart); /* 覆盖方块区 */
BYTE LR_boolean(BYTE LR); /* 判断左右是否可移动 */
void drawmat(BYTE *mat,BYTE matsize,BYTE x,BYTE y,BYTE color); /*显示点阵汉字*/
void Creat_piece()
{
PIECE = (ELSpiece *)malloc(sizeof(ELSpiece)); /* 开辟空间 */
Again_piece(); /* 赋值 */
Give_value(PIECE->Category, PIECE->Direction); /* 给方块赋初值 */
}
void Again_piece()
{
PIECE->Category = random(6); /* 随机确定方块类型 */
PIECE->Direction = random(3); /* 随机确定方块初始方向 */
PIECE->x0 = 4;
PIECE->y0 = 3;
PIECE->x1 = 4; /* 初始化方块坐标 */
PIECE->y1 = 3;
Give_value(PIECE->Category, PIECE->Direction); /* 给方块赋初值 */
}
void Delete_piece()
{
free(PIECE);
}
BYTE Give_value(BYTE Category, BYTE Direction)
{
BYTE i, j;
switch(Category) /* 方块在方块区的处理 */
{
case 1:
if ((Direction == 2 || Direction == 0) && (PIECE->x1 > 11)) /* 靠近边框 */
{
return 0;
}
switch(Direction)
{
case 0: /* 3 -> 0 的转换 */
if (ELSboard[PIECE->y1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+2]
|| ELSboard[PIECE->y1-1][PIECE->x1+2] || ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1])
{
return 0;
}
break;
case 2: /* 1 -> 2 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1+1] || ELSboard[PIECE->y1-1][PIECE->x1+2]
|| ELSboard[PIECE->y1][PIECE->x1+1])
{
return 0;
}
break;
case 3: /* 2 -> 3 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1]
|| ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
}
break;
case 2:
if (Direction > 1)
{
Direction -= 2;
}
if (Direction == 1 && PIECE->x1 > 11)
{
return 0;
}
switch(Direction)
{
case 0: /* 1 -> 0 的转换 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1]
|| ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
if (ELSboard[PIECE->y1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1]
|| ELSboard[PIECE->y1-1][PIECE->x1+2])
{
return 0;
}
break;
}
break;
case 3:
if (Direction > 1)
{
Direction -= 2;
}
if (Direction == 1 && PIECE->x1 > 11)
{
return 0;
}
switch(Direction)
{
case 0: /* 1 -> 0 的转换 */
if (ELSboard[PIECE->y1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1]
|| ELSboard[PIECE->y1-2][PIECE->x1+1])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
if (ELSboard[PIECE->y1][PIECE->x1+1] || ELSboard[PIECE->y1-2][PIECE->x1+2]
|| ELSboard[PIECE->y1-1][PIECE->x1+2] ||ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
}
break;
case 4:
if (Direction > 1)
{
Direction -= 2;
}
if (Direction == 1 && PIECE->x1 > 10)
{
return 0;
}
switch(Direction)
{
case 0: /* 1 -> 0 的转换 */
if (ELSboard[PIECE->y1-3][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1]
|| ELSboard[PIECE->y1-1][PIECE->x1+1])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
for (j = -1; j < 2; j++)
{
for (i = 3; i > j; i--)
{
if (ELSboard[PIECE->y1+i][PIECE->x1+1])
{
return 0;
}
}
}
break;
}
break;
case 5:
if ((Direction == 1 || Direction == 3) && (PIECE->x1 > 11))
{
return 0;
}
switch(Direction)
{
case 0: /* 3 -> 0 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1]
|| ELSboard[PIECE->y1][PIECE->x1+1] || ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
if (ELSboard[PIECE->y1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+2]
|| ELSboard[PIECE->y1-1][PIECE->x1+2] || ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
case 2: /* 1 -> 2 的转换 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1])
{
return 0;
}
break;
case 3: /* 2 -> 3 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1+1] || ELSboard[PIECE->y1-1][PIECE->x1+1]
|| ELSboard[PIECE->y1-1][PIECE->x1+2])
{
return 0;
}
}
break;
case 6:
if ((Direction == 1 || Direction == 3) && (PIECE->x1 > 11))
{
return 0;
}
switch(Direction)
{
case 0: /* 3 -> 0 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1])
{
return 0;
}
break;
case 1: /* 0 -> 1 的转换 */
if (ELSboard[PIECE->y1-1][PIECE->x1+1] || ELSboard[PIECE->y1-1][PIECE->x1+2]
|| ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
break;
case 2: /* 1 -> 2 的转换 */
if (ELSboard[PIECE->y1-2][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1]
|| ELSboard[PIECE->y1][PIECE->x1] || ELSboard[PIECE->y1][PIECE->x1+1])
{
return 0;
}
break;
case 3: /* 2 -> 3 的转换 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+2]
|| ELSboard[PIECE->y1-1][PIECE->x1+2] || ELSboard[PIECE->y1][PIECE->x1+2])
{
return 0;
}
}
break;
}
PIECE->Direction = Direction; /* 重新确定方块的方向 */
for (i = 0; i < 4; i++) /* 初试化方块数据,全为0 */
{
for (j = 0; j < 4; j++)
{
PIECE->data[i][j] = 0;
}
}
switch(Category) /* 各方块赋值 */
{
case 0: /* 正方块,一个方向 */
PIECE->data[2][0] = 1; PIECE->data[2][1] = 1; /* 1, 1 */
PIECE->data[3][0] = 1; PIECE->data[3][1] = 1; /* 1, 1 */
PIECE->max_x = 12;
break;
case 1: /* 4个方向 */
switch(Direction)
{
case 0: /* 1 */
PIECE->data[2][1] = 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 1: /* 1 */
PIECE->data[1][0] = 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 2: /* 1, 1, 1 */
PIECE->data[2][0] = 1; PIECE->data[2][1] = 1; /* 1 */
PIECE->data[2][2] = 1; PIECE->data[3][1] = 1;
PIECE->max_x = 11;
break;
case 3: /* 1 */
PIECE->data[1][1] = 1; PIECE->data[2][0] = 1; /* 1, 1 */
PIECE->data[2][1] = 1; PIECE->data[3][1] = 1; /* 1 */
PIECE->max_x = 12;
break;
}
break;
case 2: /* 2个方向 */
switch(Direction)
{
case 0: /* 1 */
PIECE->data[1][0] = 1; PIECE->data[2][0] = 1; /* 1, 1 */
PIECE->data[2][1] = 1; PIECE->data[3][1] = 1; /* 1 */
PIECE->max_x = 12;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -