标题:
51单片机制作的俄罗斯方块游戏机源程序
[打印本页]
作者:
andy20112
时间:
2017-3-31 13:55
标题:
51单片机制作的俄罗斯方块游戏机源程序
这个是已经做过的51单片机俄罗斯方块游戏机,可以正常使用,大家有兴趣的可以搞个玩玩。
0.png
(45.94 KB, 下载次数: 78)
下载附件
2017-3-31 19:19 上传
0.png
(43.14 KB, 下载次数: 57)
下载附件
2017-3-31 19:21 上传
完整源码下载:
俄罗斯方块程序.rar
(125.13 KB, 下载次数: 29)
2017-3-31 13:55 上传
点击文件名下载附件
下载积分: 黑币 -5
主程序预览:
/* 俄罗斯方块游戏
*
* author:LastRitter
* date:2007.11.10
* modify:cole3
* date:2010.10.28
*/
#include "includes.h"
#define TIME1H 0x3C
#define TIME1L 0xB0 //定时器1溢出时间:50ms
bit b_BlockDown=0; //方块定时下降标志位。
unsigned char uc_KeyCode=0; //键盘扫描输入暂存。
bit b_TimeAdd=0;
bit k_flag=0;
//主函数
void main(void)
{
vLCDInitialize(); //LCD初始化。
//定时器1,用于方块定时下降
TH1 = TIME1H;
TL1 = TIME1L;
TR1 = 1; //开启定时器1
ET1 = 1; //开定时器1中断
EA = 1;
vStartPicture(PIC_INITIALIZE);
while(1)
{
// 扫描按键
vScanKey();
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);
}
}
}
//定时器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;
}
复制代码
//*************************************************************************************************
//* *
//* ******************************游戏动作处理程序************************** *
//* *
//*************************************************************************************************
#include "includes.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<定义当前方块属性变量>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BLOCK *psta_BlockCur=sta_BlockSet,*psta_BlockNext; //指向当前方块设定的指针。
bit b_GameStart=0; //游戏开始标志位。
//*************************************************************************************************
//* *
//* ********************************游戏初始化******************************* *
//* *
//*************************************************************************************************
void vGameInitialize()
{
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<清空LCD>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vCleanAll();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<清空游戏区域>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vCleanAllBlock();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化分数显示>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vMarkInitialize();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化时间显示>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vTimeInitialize();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化等级显示>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vLevelInitialize();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化游戏边框>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vShowFrame();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化方块位置>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
uc_BlockRow=STARTROW;
uc_BlockLine=STARTLINE;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化方块类型>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vNewBlock();
psta_BlockCur=psta_BlockNext;
vNewBlock();
vShowBlockEx(6,18,psta_BlockNext);
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<初始化方块显示>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vCreateBlock();
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<设游戏开始标志>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
b_GameStart=1;
}
//*************************************************************************************************
//* *
//* ******************************判断游戏是否结束************************** *
//* *
//*************************************************************************************************
unsigned char ucIsGameOver()
{
unsigned char ucCount;
for(ucCount=0;ucCount<12;ucCount++)
if(ucReadBlock(0,ucCount))
return 1;
return 0;
}
//*************************************************************************************************
//* *
//* ******************************游戏结束处理函数************************** *
//* *
//*************************************************************************************************
void vGameOver()
{
b_GameStart=0;
vShowGraph(3,30,70,2,uca_GAMEOVER);
}
//*************************************************************************************************
//* *
//* ******************************游戏动作处理函数**************************** *
//* *
//*************************************************************************************************
void vBlockAction(unsigned char ucAction)
{
if (ucMoveDecide(ucAction)) //判断方块是否可以移动。
vMoveBlock(ucAction); //如果可以,则移动方块。
else
if (ucAction == ACTIONDOWN)
{
if (ucIsGameOver())
vGameOver();
else
{
vGetMark();
uc_BlockRow = STARTROW;
uc_BlockLine = STARTLINE;
psta_BlockCur = psta_BlockNext;
vNewBlock();
vShowBlockEx(6,18,psta_BlockNext);
vCreateBlock();
}
}
}
复制代码
作者:
bbq123bbq
时间:
2017-4-1 10:46
看不懂,先顶一个
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1