?? gameprocess.c
字號:
//*************************************************************************************************
//* *
//* ******************************游戲動作處理程序************************** *
//* *
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************頭文件及宏定義************************** *
//* *
//*************************************************************************************************
#include "at89x51.h"
#include "LCDShowMap.h"
#include "LCD12864.h"
#include "GameGraph.h"
#include "MoveDecide.h"
#include "MoveBlock.h"
#include "BlockCreate.h"
#include "GetMark.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<方塊動作>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define ACTIONROTATE 0
#define ACTIONRIGHT 1
#define ACTIONDOWN 2
#define ACTIONLEFT 3
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<方塊類型>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define TYPEONE 0
#define TYPETWO 1
#define TYPETHREE 2
#define TYPEFOUR 3
#define TYPEFIVE 4
#define TYPESIX 5
#define TYPESEVEN 6
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<方塊狀態>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#define STATEONE 0
#define STATETWO 1
#define STATETHREE 2
#define STATEFOUR 3
//*************************************************************************************************
//* *
//* ********************************全局變量******************************* *
//* *
//*************************************************************************************************
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定義當前方塊屬性變量>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned char uc_BlockType=TYPEFOUR;
unsigned char uc_BlockState=STATETHREE;
unsigned char uc_BlockRow=0;
unsigned char uc_BlockLine=4;
extern bit b_DownStart; //開啟定時器定時下降標志位。
unsigned int ui_GameMark=0; //當前游戲分數。
//*************************************************************************************************
//* *
//* **********************************創建新方塊****************************** *
//* *
//*************************************************************************************************
void vNewBlock()
{
if(uc_BlockType==TYPESEVEN) //變換方塊類型。
uc_BlockType=TYPEONE;
else
uc_BlockType++;
if(uc_BlockState==STATEFOUR) //變換方塊狀態。
uc_BlockState=STATEONE;
else
uc_BlockState++;
switch(uc_BlockState) //防止狀態變量超出特定類型方塊類型的取值范圍。
{
case TYPEONE:uc_BlockState%=2;break;
case TYPETWO:uc_BlockState=0;break;
case TYPETHREE:uc_BlockState%=4;break;
case TYPEFOUR:uc_BlockState%=4;break;
case TYPEFIVE:uc_BlockState%=4;break;
case TYPESIX:uc_BlockState%=2;break;
case TYPESEVEN:uc_BlockState%=2;break;
default:break;
}
uc_BlockRow=0; //初始化方塊位置
uc_BlockLine=4;
vBlockCreate(); //新建方塊。
}
//*************************************************************************************************
//* *
//* ********************************游戲初始化******************************* *
//* *
//*************************************************************************************************
void vGameInitialize()
{
unsigned char ucCountOne,ucCountTwo;
vShowOneChin(1,2,uca_FEN); //顯示“分數”。
vShowOneChin(1,18,uca_SHU);
vShowFrame(); //顯示邊框。
for(ucCountOne=0;ucCountOne<21;ucCountOne++) //清空游戲區域。
for(ucCountTwo=0;ucCountTwo<12;ucCountTwo++)
vCleanBlock(ucCountOne,ucCountTwo);
ui_GameMark=0; //清空游戲分數。
vShowNumber(4,0,0); //顯示初始分數。
vNewBlock(); //新建方塊。
b_DownStart=1; //開啟定時器定時下降。
}
//*************************************************************************************************
//* *
//* ******************************判斷游戲是否結束************************** *
//* *
//*************************************************************************************************
unsigned char ucIsGameOver()
{
unsigned char ucCount,ucCountTwo;
for(ucCount=0;ucCount<12;ucCount++)
if(ucReadBlock(0,ucCount)==1)
{
if(uc_BlockType==TYPETHREE&&(uc_BlockState==STATETWO||uc_BlockState==STATEFOUR))
{
for(ucCountTwo=3;ucCountTwo<8;ucCountTwo++)
if(ucReadBlock(2,ucCountTwo)==1)
return 1;
}
else
{
for(ucCountTwo=3;ucCountTwo<8;ucCountTwo++)
if(ucReadBlock(1,ucCountTwo)==1)
return 1;
}
}
return 0;
}
//*************************************************************************************************
//* *
//* ******************************游戲結束處理函數************************** *
//* *
//*************************************************************************************************
void vGameOver()
{
b_DownStart=0;
vGameInitialize();
}
//*************************************************************************************************
//* *
//* ******************************游戲動作處理函數**************************** *
//* *
//*************************************************************************************************
void vBlockAction(unsigned char ucAction)
{
unsigned char ucCount;
if(ucMoveDecide(ucAction)) //判斷方塊是否可以移動。
{
vMoveBlock(ucAction); //如果可以,則移動方塊。
if(uc_BlockLine<3) //此處是為了彌補移動方塊時可能產生的錯誤。
for(ucCount=1;ucCount<7;ucCount++)
{
CS1=1;
CS2=0;
vWriteCMD(LCDPAGE+ucCount);
vWriteCMD(LCDLINE+FRAMELEFT);
vWriteData(0xFF);
vWriteData(0xFF);
}
}
else
if(ucAction==ACTIONDOWN)
{
if(ucIsGameOver())
vGameOver();
else
{
vGetMark();
vNewBlock();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -