?? getmark.c
字號:
//*************************************************************************************************
//* *
//* **********************************獲取分數處理函數************************* *
//* *
//*************************************************************************************************
#include "LCD12864.h"
#include "GameProcess.h"
#include "GameGraph.h"
extern unsigned int ui_GameMark;
unsigned char uca_BlockScan[5]; //存儲滿行的行號。
unsigned char uc_ScanNumber; //存儲滿行行數。
//*************************************************************************************************
//* *
//* **********************************掃描指定行****************************** *
//* *
//*************************************************************************************************
unsigned char ucScanRow(unsigned char ucRow) //0-改行為填滿;
{ //1-改行被填滿。
unsigned char ucCount;
for(ucCount=0;ucCount<12;ucCount++)
if(ucReadBlock(ucRow,ucCount)==0)
return 0;
return 1;
}
//*************************************************************************************************
//* *
//* **********************************掃描指定行****************************** *
//* *
//*************************************************************************************************
void vBlockScan() //掃描是否有填滿的行,如果有則把行號存在數組里。
{
unsigned char ucCount;
uc_ScanNumber=0;
if(uc_BlockRow<4)
{
for(ucCount=0;ucCount<=uc_BlockRow;ucCount++)
if(ucScanRow(uc_BlockRow-ucCount+1))
{
uca_BlockScan[uc_ScanNumber++]=uc_BlockRow-ucCount+1;
}
}
else
{
if(uc_BlockRow<20)
{
for(ucCount=0;ucCount<5;ucCount++)
if(ucScanRow(uc_BlockRow+1-ucCount))
{
uca_BlockScan[uc_ScanNumber++]=uc_BlockRow-ucCount+1;
}
}
else
{
for(ucCount=0;ucCount<4;ucCount++)
if(ucScanRow(uc_BlockRow-ucCount))
{
uca_BlockScan[uc_ScanNumber++]=uc_BlockRow-ucCount;
}
}
}
}
//*************************************************************************************************
//* *
//* **********************************清除指定行****************************** *
//* *
//*************************************************************************************************
void vCleanOneRow(unsigned char ucRow)
{
unsigned char ucCount;
for(ucCount=0;ucCount<12;ucCount++)
vCleanBlock(ucRow,ucCount);
}
//*************************************************************************************************
//* *
//* *****************************把改行的上一行移動到該行********************* *
//* *
//*************************************************************************************************
void vMoveRow(unsigned char ucRow)
{
unsigned char ucCount;
vCleanOneRow(ucRow);
for(ucCount=0;ucCount<12;ucCount++)
{
if(ucReadBlock(ucRow-1,ucCount)==1)
vShowBlock(ucRow,ucCount);
}
vCleanOneRow(ucRow-1);
}
//*************************************************************************************************
//* *
//* **********************************獲取分數1******************************* *
//* *
//*************************************************************************************************
void vGetMarkOne()
{
unsigned char ucCount;
for(ucCount=uca_BlockScan[0];ucCount>0;ucCount--)
vMoveRow(ucCount);
}
//*************************************************************************************************
//* *
//* **********************************獲取分數2******************************* *
//* *
//*************************************************************************************************
void vGetMarkTwo()
{
unsigned char ucCount;
for(ucCount=uca_BlockScan[1];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[0];ucCount>0;ucCount--)
vMoveRow(ucCount);
}
//*************************************************************************************************
//* *
//* **********************************獲取分數3******************************* *
//* *
//*************************************************************************************************
void vGetMarkThree()
{
unsigned char ucCount;
for(ucCount=uca_BlockScan[2];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[1];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[0];ucCount>0;ucCount--)
vMoveRow(ucCount);
}
//*************************************************************************************************
//* *
//* **********************************獲取分數4******************************* *
//* *
//*************************************************************************************************
void vGetMarkFour()
{
unsigned char ucCount;
for(ucCount=uca_BlockScan[3];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[2];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[1];ucCount>0;ucCount--)
vMoveRow(ucCount);
for(ucCount=uca_BlockScan[0];ucCount>0;ucCount--)
vMoveRow(ucCount);
}
//*************************************************************************************************
//* *
//* **********************************獲取分數******************************** *
//* *
//*************************************************************************************************
void vGetMark()
{
vBlockScan();
switch(uc_ScanNumber)
{
case 0:break;
case 1:vGetMarkOne();ui_GameMark+=1;break; //消除1行的1分;
case 2:vGetMarkTwo();ui_GameMark+=3;break; //一次消除兩行得3分;
case 3:vGetMarkThree();ui_GameMark+=7;break; //一次消除三行得7分;
case 4:vGetMarkFour();ui_GameMark+=15;break; //一次消除四行得15分。
default:break;
}
vShowNumber(4,0,ui_GameMark);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -