俄罗斯方块程序(Proteus)
[日期:2005-4-16]
来源:侃单片机 作者:xwj
[字体:大 中 小]
//特 点: // // 1、功能完整,直接使用 //
// 2、模块独立性强,移植方便,外部仅init和move函数,修改显示和输入即可 //
// 3、对减少内存占用、尽量减少屏幕操作进行适当优化 //
// 4、新方块生成高度随机,绝对无规律 // // 5、仿真环境为Keil7.5+Proteus6.5,可以联机也可脱机运行 //
//--------------------------------------------------------------------------//
// 源程序大公开 // // (c) Copyright 2001-2005 xuwenjun //
// All Rights Reserved // // V1.00 // //--------------------------------------------------------------------------// //标 题: 俄罗斯方块程序 ? // //文件名: xwj_fk.c // //版 本: V1.00 //
//修改人: 徐文军 E-mail:xuwenjun@21cn.com //
//日 期: 05-05-13 // //描 述: 俄罗斯方块程序 ? //
//声 明: //
// 以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处. //
// 如用于商业用途请与作者联系. E-mail:xuwenjun@21cn.com // // 有问题请mailto xuwenjun@21cn.com 欢迎与我交流! //
//--------------------------------------------------------------------------// //老版本: 无 老版本文件名: // //创建人: 徐文军 E-mail:xuwenjun@21cn.com //
//日 期: 05-05-13 // //描 述: // // 1、功能完整,直接使用 //
// 2、模块独立性强,移植方便,外部仅init和move函数,修改显示和输入即可 //
// 3、对减少内存占用、尽量减少屏幕操作进行适当优化 //
// 4、新方块生成高度随机,绝对无规律 // // 5、仿真环境为Keil7.5+Proteus6.5,可以联机也可脱机运行 //
// CODE SIZE = 1845 ---- // // CONSTANT SIZE = 326 ---- // // DATA SIZE = 16 19 // // IDATA SIZE = 50 ---- // // BIT SIZE = 1 1 // //--------------------------------------------------------------------------//
#include
#include \字符液晶控制函数声明 //
#include \公用函数 #include \口行列式键盘 //
#include \串口函数集 #include \数制转换 #include \俄罗斯方块程序
#define ulong unsigned long #define uint unsigned int #define uchar unsigned char
extern void delay(unsigned int x);
//----------------俄罗斯方块内部函数----------------------------------------//
void fk_dot(uchar x,uchar y); //显示1个方块点 void fk_cldot(uchar x,uchar y); //清除1个方块点
void fk_show(void); //显示分数 void fk_reffk(void); //刷新方块 void fk_refnew(void); //刷新预览方块 void fk_refline(yy); //刷新1行背景 bit fk_chk(void); //冲突检查 void fk_new(void); //产生新方块 void fk_add(void); //方块合并
/*
//-----------------俄罗斯方块公用函数--------------------------------------//
void fk_init(void); //方块初始化 void fk_move(unsigned char mode); //移动方块
*/
//-------------------------------------------------------------------------//
#define FULLMAP 0x0fff /*掩码*/ #define LINEGUAN 20 /*20行过一关*/ #define NEWX 15 /*预览方块X位置*/ #define NEWY 12 /*预览方块Y位置*/ #define LINEMAX 21 /*屏幕最高21行*/ uint idata fk_map[LINEMAX+4]; //背景映象 uchar fk_x,fk_y,fk_r; //方块左右、高度、方向
uchar fk_type; //方块形状
uchar fk_oldx,fk_oldy,fk_oldr; //方块上次左右、高度、方向
uchar fk_newtype,fk_newr; //新方块形状、方向
uint score; //总分 uint line; //总行数 uchar speed; //速度 uchar moven; //速度相关计数器 uchar automapn; //随机方块的行数 bit fk_run; //俄罗斯方坑蜗吩诵?
uchar code fk_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, //田字
};
uchar code strmap[4][9]={
\不错! \真棒! \好极啦!\太棒了!\
};
//--------------------------------------------------------------------------//
void fk_dot(uchar x,uchar y) //显示1个方块点
{
printat(x*3+1, 241-(y-4)*12,\
}
//--------------------------------------------------------------------------//
void fk_cldot(uchar x,uchar y) //清除1个方块点