📄 gamegraph.c
字号:
//*************************************************************************************************
//* *
//* ******************************游戏图像处理程序************************** *
//* *
//*************************************************************************************************
#include "at89x51.h"
#include "LCD12864.h"
#define FRAMELEFT 38 //边框范围:ucLine:36~127。
#define BLOCKLEFT 40
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<格子状态数组>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uca_BlockMap[]=
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00};
unsigned char code uca_BitSelect[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//用于按位置零。
unsigned char code uca_BlockLeft[]={0xF0,0xB0,0xD0,0xF0};
unsigned char code uca_BlockRight[]={0x0F,0x0B,0x0D,0x0F};
unsigned char code uca_BlockTwo[]={0xFF,0xBB,0xDD,0xFF};
unsigned char code uca_BlockClean[]={0x00,0x00,0x00,0x00};
//*************************************************************************************************
//* *
//* **********************************读格子状态************************** *
//* *
//*************************************************************************************************
unsigned char ucReadBlock(unsigned char ucRow,unsigned char ucLine)
{
unsigned char ucResult;
if(ucLine<8)
ucResult=uca_BlockMap[ucRow*2]>>(ucLine);
else
ucResult=uca_BlockMap[ucRow*2+1]>>(ucLine-8);
if(ucResult&0x01)
return 1;
else
return 0;
}
//*************************************************************************************************
//* *
//* **********************************写格子状态************************** *
//* *
//*************************************************************************************************
void vWriteBlock(unsigned char ucRow,unsigned char ucLine ,unsigned char ucValue)
{
if(ucValue==1)
{
if(ucLine<8)
uca_BlockMap[ucRow*2]|=(ucValue<<ucLine);
else
uca_BlockMap[ucRow*2+1]|=(ucValue<<(ucLine-8));
}
else
{
if(ucLine<8)
uca_BlockMap[ucRow*2]&=uca_BitSelect[ucLine];
else
uca_BlockMap[ucRow*2+1]&=uca_BitSelect[ucLine-8];
}
}
//*************************************************************************************************
//* *
//* **********************************显示一个方块**************************** *
//* *
//*************************************************************************************************
void vShowBlock(unsigned char ucRow,unsigned char ucLine)
{
vWriteBlock(ucRow,ucLine,1);
if(ucLine%2)
{
if(ucReadBlock(ucRow,ucLine-1))
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockTwo);
else
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockLeft);
}
else
{
if(ucReadBlock(ucRow,ucLine+1))
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockTwo);
else
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockRight);
}
}
//*************************************************************************************************
//* *
//* **********************************清除一个方块**************************** *
//* *
//*************************************************************************************************
void vCleanBlock(unsigned char ucRow,unsigned char ucLine)
{
vWriteBlock(ucRow,ucLine,0);
if(ucLine%2)
{
if(ucReadBlock(ucRow,ucLine-1))
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockRight);
else
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockClean);
}
else
{
if(ucReadBlock(ucRow,ucLine+1))
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockLeft);
else
vShowCustomRow(ucLine/2+1,BLOCKLEFT+ucRow*4,4,uca_BlockClean);
}
}
//*************************************************************************************************
//* *
//* ******************************游戏区域边框绘制函数************************** *
//* *
//*************************************************************************************************
void vShowFrame()
{
unsigned char ucCount;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<绘制左半屏>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CS1=1;
CS2=0;
vWriteCMD(LCDPAGE);
vWriteCMD(LCDLINE+FRAMELEFT);
for(ucCount=FRAMELEFT;ucCount<64;ucCount++)
vWriteData(0xC0);
for(ucCount=1;ucCount<7;ucCount++)
{
vWriteCMD(LCDPAGE+ucCount);
vWriteCMD(LCDLINE+FRAMELEFT);
vWriteData(0xFF);
vWriteData(0xFF);
}
vWriteCMD(LCDPAGE+7);
vWriteCMD(LCDLINE+FRAMELEFT);
for(ucCount=FRAMELEFT;ucCount<64;ucCount++)
vWriteData(0x03);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<绘制右半屏>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
CS1=0;
CS2=1;
vWriteCMD(LCDPAGE);
vWriteCMD(LCDLINE);
for(ucCount=0;ucCount<62;ucCount++)
vWriteData(0xC0);
for(ucCount=1;ucCount<7;ucCount++)
{
vWriteCMD(LCDPAGE+ucCount);
vWriteCMD(LCDLINE+60);
vWriteData(0xFF);
vWriteData(0xFF);
}
vWriteCMD(LCDPAGE+7);
vWriteCMD(LCDLINE);
for(ucCount=0;ucCount<62;ucCount++)
vWriteData(0x03);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -