📄 main.c
字号:
//*************************************************************************************************
//*************************************************************************************************
//**<程 序 名>:俄罗斯方块游戏 **
//**<版本说明>:改进版v3.0,增强了积分功能,最多可以显示8位,增加了游戏时间功能,增加了方块预览,**
//** 增设了游戏级别的框架,计划增加过关功能,另外还丰富了开机画面,优化了部分函数。 **
//**<完成时间>:2007年11月10日 **
//**<作 者>:LastRitter **
//**<联系方式>:E-mail:superyongzhe@163.com;QQ:314665354。 **
//*************************************************************************************************
//*************************************************************************************************
//*************************************************************************************************
//* *
//* ******************************头文件及宏定义************************** *
//* *
//*************************************************************************************************
#include "includes.h"
#define TIME1H 0x3C
#define TIME1L 0xB0 //定时器1溢出时间:50ms
#define SCANPORT P1
bit b_BlockDown=0; //方块定时下降标志位。
unsigned char uc_KeyCode=0; //键盘扫描输入暂存。
bit b_TimeAdd=0;
//*************************************************************************************************
//* *
//* ********************************主函数****************************** *
//* *
//*************************************************************************************************
void main(void)
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定时器1,用于方块定时下降 >>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
TR1=1; //开启定时器1
ET1=1; //开定时器1中断
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<外部中断0,用于开启键盘扫描处理标志>>>>>>>>>>>>>>>>>>>>>>>>>>>
IT0=1; // 中断方式:下降沿。
EX0=1; // 开启外部中断。
EA=1;
vLCDInitialize(); //LCD初始化。
SCANPORT=0x0F; //按键端口初始化。
vStartPicture(PIC_INITIALIZE);
while(1)
{
if(uc_KeyCode!=0) //如果有按键按下,则进行按键扫描和键码处理。
{
vKeyProcess(uc_KeyCode);
uc_KeyCode=0;
}
if(b_BlockDown) //方块定时下降。
{
b_BlockDown=0;
vBlockAction(ACTIONDOWN);
}
if(b_TimeAdd)
{
b_TimeAdd=0;
vTimeAdd();
}
if(uc_StartPicture==PIC_CONTINUE)
{
uc_StartPicture=PIC_PAUSE;
if(!b_GameStart)
vStartPicture(PIC_CONTINUE);
}
}
}
//*************************************************************************************************
//* *
//* ******************************外部中断0,用于开启键盘扫描及键码处理****************** *
//* *
//*************************************************************************************************
void vINT0(void) interrupt 0
{
unsigned char ucCount;
EX0=0;
for(ucCount=0;ucCount<10;ucCount++);
if(SCANPORT!=0x0F)
uc_KeyCode=SCANPORT&0x0F; //开启键盘扫描标志。
EX0=1;
}
//*************************************************************************************************
//* *
//* **************************定时器1中断,用于方块定时下降************************ *
//* *
//*************************************************************************************************
void vTimer1(void) interrupt 3
{
static unsigned char sucDownCount=0,sucTimeCount=0,sucStPicCount=0;
if(b_GameStart)
{
if(sucDownCount>uc_GameSpeed)
{
sucDownCount=0;
b_BlockDown=1;
}
else
sucDownCount++;
if(sucTimeCount==200)
{
sucTimeCount=0;
b_TimeAdd=1;
}
else
sucTimeCount++;
}
else
{
if(uc_StartPicture!=PIC_STOP)
{
if(sucStPicCount==40)
{
uc_StartPicture=PIC_CONTINUE;
sucStPicCount=0;
}
else
sucStPicCount++;
}
}
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<恢复定时器1溢出时间>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TH1=TIME1H;
TL1=TIME1L;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -