⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamegraph.c

📁 用proteus模拟仿真实现俄罗期方块游戏
💻 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 + -