?? eluosi.h
字號(hào):
#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); /* 底層畫點(diǎn)抽像層 */
void Box(BYTE Xbegin,BYTE Ybegin,BYTE Xend,BYTE Yend,BYTE BoxModel,BYTE FillType); /* 底層矩形抽像層 */
/* 俄羅斯方塊的畫點(diǎn)函數(shù),這樣構(gòu)造可以方便實(shí)現(xiàn)在不同硬件平臺(tái)移植,
此函數(shù)是以 4X4 個(gè) DPJ_dot() 像素點(diǎn)為一個(gè)點(diǎn)。 */
void ELS_dot(BYTE x, BYTE y, BYTE mode)/* 構(gòu)造俄羅斯方塊的畫點(diǎn)函數(shù) */
{
BYTE dx, dy;
if (x > -1 && x < 14
&& y > -1 && y < 20) /* 不超出方塊顯示區(qū)域 */
{
dx = x*4 + 4; /* 抽象方塊顯示區(qū)域(6, 34, 57, 110) */
dy = y*4 + 32;
Box(dx, dy, dx+3, dy+3, mode); /* 以 mode 方式畫方塊點(diǎn) */
}
}
typedef struct
{
BYTE Category; /* 類型,共7種 */
BYTE Direction; /* 朝的方向 */
BYTE x0, y0, x1, y1; /* 方塊在方塊區(qū)的位置,左下角 */
BYTE max_x; /* 方塊能到達(dá)方塊區(qū)的最左端 */
BYTE data[4][4], data2[4][4]; /* 方塊數(shù)據(jù) */
} ELSpiece; /* 俄羅斯方塊的有關(guān)信息結(jié)構(gòu) */
void Creat_piece(void); /* 開辟一個(gè)方塊 */
void Again_piece(void); /* 再次放出方塊 */
void Delete_piece(void); /* 釋放一個(gè)方塊內(nèi)存 */
BYTE Give_value(BYTE Category, BYTE Direction); /* 給方塊賦值 */
void Play_piece(void); /* 開始游戲 */
void Show_piece(void); /* 顯示方塊 */
void Ocopy_board(BYTE Fstart); /* 覆蓋方塊區(qū) */
BYTE LR_boolean(BYTE LR); /* 判斷左右是否可移動(dòng) */
void drawmat(BYTE *mat,BYTE matsize,BYTE x,BYTE y,BYTE color); /*顯示點(diǎn)陣漢字*/
void Creat_piece()
{
PIECE = (ELSpiece *)malloc(sizeof(ELSpiece)); /* 開辟空間 */
Again_piece(); /* 賦值 */
Give_value(PIECE->Category, PIECE->Direction); /* 給方塊賦初值 */
}
void Again_piece()
{
PIECE->Category = random(6); /* 隨機(jī)確定方塊類型 */
PIECE->Direction = random(3); /* 隨機(jī)確定方塊初始方向 */
PIECE->x0 = 4;
PIECE->y0 = 3;
PIECE->x1 = 4; /* 初始化方塊坐標(biāo) */
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) /* 方塊在方塊區(qū)的處理 */
{
case 1:
if ((Direction == 2 || Direction == 0) && (PIECE->x1 > 11)) /* 靠近邊框 */
{
return 0;
}
switch(Direction)
{
case 0: /* 3 -> 0 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1])
{
return 0;
}
break;
case 2: /* 1 -> 2 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
if (ELSboard[PIECE->y1-1][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1])
{
return 0;
}
break;
case 3: /* 2 -> 3 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
if (ELSboard[PIECE->y1-2][PIECE->x1] || ELSboard[PIECE->y1-2][PIECE->x1+1])
{
return 0;
}
break;
case 1: /* 0 -> 1 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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 的轉(zhuǎn)換 */
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++) /* 初試化方塊數(shù)據(jù),全為0 */
{
for (j = 0; j < 4; j++)
{
PIECE->data[i][j] = 0;
}
}
switch(Category) /* 各方塊賦值 */
{
case 0: /* 正方塊,一個(gè)方向 */
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個(gè)方向 */
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個(gè)方向 */
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;
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -