电子行业资料俄罗斯方块程序字符液晶控制函数声时doc 18.docx
《电子行业资料俄罗斯方块程序字符液晶控制函数声时doc 18.docx》由会员分享,可在线阅读,更多相关《电子行业资料俄罗斯方块程序字符液晶控制函数声时doc 18.docx(10页珍藏版)》请在冰豆网上搜索。
![电子行业资料俄罗斯方块程序字符液晶控制函数声时doc 18.docx](https://file1.bdocx.com/fileroot1/2022-10/13/003a8abf-236e-4382-a93c-a6df29f9dfe7/003a8abf-236e-4382-a93c-a6df29f9dfe71.gif)
电子行业资料俄罗斯方块程序字符液晶控制函数声时doc18
// CODESIZE = 1845 ---- //
// CONSTANTSIZE = 326 ---- //
// DATASIZE = 16 19 //
// IDATASIZE = 50 ---- //
// BITSIZE = 1 1 //
//--------------------------------------------------------------------------//
#include
#include"xwj_lcd16.h" //字符液晶控制函数声明 //
#include"xwj_lcd6963.h" //T6963C公用函数
#include"xwj_hlkey.h" // P1口行列式键盘 //
#include"xwj_serial.h" //串口函数集
#include"change.h" //数制转换
#include"xwj_fk.h" //俄罗斯方块程序
#defineulong unsignedlong
#defineuint unsignedint
#defineuchar unsignedchar
externvoiddelay(unsignedintx);
//----------------俄罗斯方块内部函数----------------------------------------//
voidfk_dot(ucharx,uchary); //显示1个方块点
voidfk_cldot(ucharx,uchary); //清除1个方块点
voidfk_show(void); //显示分数
voidfk_reffk(void); //刷新方块
voidfk_refnew(void); //刷新预览方块
voidfk_refline(yy); //刷新1行背景
bit fk_chk(void); //冲突检查
voidfk_new(void); //产生新方块
voidfk_add(void); //方块合并
/*
//-----------------俄罗斯方块公用函数--------------------------------------//
voidfk_init(void); //方块初始化
voidfk_move(unsignedcharmode); //移动方块
*/
//-------------------------------------------------------------------------//
#defineFULLMAP 0x0fff /*掩码*/
#defineLINEGUAN 20 /*20行过一关*/
#defineNEWX 15 /*预览方块X位置*/
#defineNEWY 12 /*预览方块Y位置*/
#defineLINEMAX 21 /*屏幕最高21行*/
uintidatafk_map[LINEMAX+4]; //背景映象
uchar fk_x,fk_y,fk_r; //方块左右、高度、方向
ucharfk_type; //方块形状
uchar fk_oldx,fk_oldy,fk_oldr; //方块上次左右、高度、方向
uchar fk_newtype,fk_newr; //新方块形状、方向
uintscore; //总分
uintline; //总行数
ucharspeed; //速度
ucharmoven; //速度相关计数器
ucharautomapn; //随机方块的行数
bitfk_run; //俄罗斯方坑蜗吩诵?
ucharcodefk_mod[][4][4]={ //方块模型号,4个方向,4行
0,0,7,2,0,1,3,1,0,0,2,7,0,2,3,2, //_|_
0,0,6,3,0,1,3,2,0,0,6,3,0,1,3,2, //_|~
0,0,3,6,0,2,3,1,0,0,3,6,0,2,3,1, //~|_
0,0,7,4,0,3,1,1,0,0,1,7,0,2,2,3, //|__
0,0,7,1,0,1,1,3,0,0,4,7,0,3,2,2, //__|
0,0,0,15,1,1,1,1,0,0,0,15,1,1,1,1, //____
0,0,3,3,0,0,3,3,0,0,3,3,0,0,3,3, //田字
};
ucharcodestrmap[4][9]={
"不错!
","真棒!
","好极啦!
","太棒了!
",
};
//--------------------------------------------------------------------------//
voidfk_dot(ucharx,uchary) //显示1个方块点
{
printat(x*3+1,241-(y-4)*12,"■");
}
//--------------------------------------------------------------------------//
voidfk_cldot(ucharx,uchary) //清除1个方块点
{
// printat(x*3+1,241-(y-4)*12,"□");
printat(x*3+1,241-(y-4)*12,"┘");
}
//--------------------------------------------------------------------------//
voidfk_show(void) //显示分数
{
printat(50,12,chnint(score,1));
printat(60,12,"00");
printat(40,12,"得分:
");
printat(54,36,chnint(line,1));
printat(40,36,"行数:
");
printat(54,60,chnchar(speed,1));
printat(40,60,"速度:
");
printat(54,84,chnchar(automapn,1));
printat(40,84,"关数:
");
}
//--------------------------------------------------------------------------//
voidfk_reffk(void) //刷新方块
{
uchari,j;
uchartemp;
//----------------------------------------------//清除原来的方块
for(i=0;i<4;i++)
{
temp=(fk_mod[fk_type][fk_oldr][i]);
for(j=fk_oldx;j {
if(temp&0x01)
{
fk_cldot(j,fk_oldy+i);
}
temp>>=1;
}
}
//----------------------------------------------//显示新的方块
for(i=0;i<4;i++)
{
temp=(fk_mod[fk_type][fk_r][i]);
for(j=fk_x;j {
if(temp&0x01)
{
fk_dot(j,fk_y+i);
}
temp>>=1;
}
}
fk_oldx=fk_x;fk_oldy=fk_y;fk_oldr=fk_r; //保存新方块位置
}
//--------------------------------------------------------------------------//
voidfk_refnew(void) //刷新预览方块
{
uchari,j;
uchartemp;
//----------------------------------------------//预览方块
for(i=0;i<4;i++)
{
temp=(fk_mod[fk_newtype][fk_newr][i]);
f