?? 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 + -