可以用 Proteus仿真的KeilC俄罗斯方块程序.doc_第1页
可以用 Proteus仿真的KeilC俄罗斯方块程序.doc_第2页
可以用 Proteus仿真的KeilC俄罗斯方块程序.doc_第3页
可以用 Proteus仿真的KeilC俄罗斯方块程序.doc_第4页
可以用 Proteus仿真的KeilC俄罗斯方块程序.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

可以用 Proteus仿真的KeilC俄罗斯方块程序时间:2006-12-29 来源: 作者:徐文军 点击:1792 字体大小:【大 中 小】 /-/ 源程序大公开 / (c) Copyright 20012005 xuwenjun / All Rights Reserved / V1.00 /-/标题: 俄罗斯方块程序 ? /文件名: xwj_fk.c /版本: V1.00 /修改人: 徐文军 E-mail: /日期: 05-05-13 /描述: 俄罗斯方块程序 ? /声明: / 以下代码仅免费提供给学习用途,但引用或修改后必须在文件中声明出处. / 如用于商业用途请与作者联系. E-mail: / 有问题请mailto 欢迎与我交流! /-/老版本: 无 老版本文件名: /创建人: 徐文军 E-mail: /日期: 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 xwj_lcd16.h / 字符液晶控制函数声明 /#include xwj_lcd6963.h / T6963C 公用函数#include xwj_hlkey.h / P1口行列式键盘 /#include xwj_serial.h /串口函数集#include change.h /数制转换#include xwj_fk.h /俄罗斯方块程序#define ulong unsigned long#define uint unsigned int#define uchar unsigned charextern 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_mapLINEMAX+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_mod44= /方块模型号,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 strmap49= 不错! ,真棒! ,好极啦!,太棒了!,;/-/void fk_dot(uchar x,uchar y) /显示1个方块点 printat(x*3+1, 241-(y-4)*12,);/-/void fk_cldot(uchar x,uchar y) /清除1个方块点/ printat(x*3+1, 241-(y-4)*12,); printat(x*3+1, 241-(y-4)*12,);/-/void fk_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,关数:); /-/void fk_reffk(void) /刷新方块 uchar i,j; uchar temp; /-/清除原来的方块 for (i=0;i4;i+) temp=(fk_modfk_typefk_oldri); for (j=fk_oldx;j=1; /-/显示新的方块 for (i=0;i4;i+) temp=(fk_modfk_typefk_ri); for (j=fk_x;j=1; fk_oldx=fk_x;fk_oldy=fk_y;fk_oldr=fk_r; /保存新方块位置/-/void fk_refnew(void) /刷新预览方块 uchar i,j; uchar temp; /-/预览方块 for (i=0;i4;i+) temp=(fk_modfk_newtypefk_newri); for (j=NEWX;j=1; /-/void fk_refline(yy) /刷新1行背景 uchar i; uint temp; if (yy=4) temp=fk_mapyy; for (i=0;i= 1; /-/bit fk_chk(void) /冲突检查 uchar i; bit neq=0; for (i=0;i4;i+) if ( (fk_modfk_typefk_ri)fk_x)+(fk_mapfk_y+i) != (fk_modfk_typefk_ri)fk_x)|(fk_mapfk_y+i) ) neq=1; return(neq);/-/void fk_new(void) /产生新方块 srand(rand()+fk_x+fk_y+fk_r); fk_oldx=fk_x=5; fk_oldy=fk_y=LINEMAX; fk_type = fk_newtype; fk_oldr=fk_newr; fk_newtype = rand()%7; fk_newr=rand()%4; fk_refnew(); /刷新预览方块 if (fk_run) fk_reffk(); /刷新显示/-/void fk_add(void) /方块合并 uchar i,j; uchar full=0x00; uchar fulltemp; uchar fullline=0x00; for (i=0;i4;i+) /方块合并 fk_mapfk_y+i |= (fk_modfk_typefk_ri)fk_x; full = 4) & (fk_mapfk_y+i = 0xffff) /满行 full |= 0x01; if (full != 0) /有满行 for (j=0;j3;j+) /消行闪烁3次 delay(300); fulltemp=full; for (i=0;i4;i+) /4行 if (fulltemp&0x08) != 0) fk_mapfk_y+i = FULLMAP; fk_refline(fk_y+i); fulltemp = 1; fulltemp=full; for (i=fk_y;iLINEMAX+4+fullline;i+) /上面行下移 if (i = LINEMAX+4)&(fk_mapi-fullline!=FULLMAP) fk_mapi-fullline=FULLMAP; /背景映象 fk_refline(i-fullline); if (fulltemp&0x08) != 0) fullline+; fulltemp = 1; if (line+fullline)/LINEGUAN) != (line/LINEGUAN)/每20行速度+1 speed +; line += fullline; /更新分数、行数 score += (1 LINEMAX-10) /在最高位置碰撞且不能消行则游戏结束 printat(46,180,加油啊!); /加油啊 if (fk_y LINEMAX-6) /在最高位置碰撞且不能消行则游戏结束 printat(46,180,糟糕了!); /糟糕了 if (fk_y=LINEMAX) /在最高位置碰撞且不能消行则游戏结束 fk_run=0; /方块初始化 else fk_new(); /产生新方块 /-/void fk_init(void) /方块初始化 uchar i; fk_run = 0; moven=0; Lcd6963Cls(); Lcd6963Rec(0,0,152,255); Lcd6963ChHz(0); /切换到16X16点阵 printat(2, 16,欢迎光临文君阁); printat(2, 48,请按键选择:); printat(2, 80,-); printat(2, 96,7左旋 8右旋 9右旋); printat(2, 112,4左移 5右旋 6右移); printat(2, 128,4速度 5开始 6关数); printat(2, 144,1左移 2下移 3右移); printat(2, 160,-); Lcd6963ChHz(1); /切换到12X12点阵 printat(46,180,欢迎使用); fk_show(); /显示分数 while (fk_run) fk_move(); /等待设置速度关数开始 delay(10); for (i=0;i4;i+) fk_mapi=0xffff; /背景映象 delay(3000); for (i=4;iLINEMAX+4;i+) if (ispeed)+2; case 2: /下移 if (fk_run) /游戏中下移 if(fk_y0) fk_y-; if(fk_chk() fk_y+; /有冲突取消操作,执行碰撞组合 fk_add(); /方块合并 /产生新方块 else /方块到底也执行碰撞组合 fk_add(); /方块合并 else /初始化时 fk_new(); /产生新方块 break; case 0: /下移到底 while(fk_y0)&(fk_chk() /一直下移直到冲突 fk_y-; moven=1; fk_y+; /恢复到未冲突位置 break; case 3: /右移 case 6: /右移 if (fk_run) /游戏中右移 if(fk_x0) fk_x-; if(fk_chk() fk_x+;/有冲突取消操作 else /初始化时 speed+; speed &= 0x07; fk_show(); /显示分数 break; case 9: /右转 case 8: /右转 case 5: /右转 if (fk_run) /游戏中右转 fk_r+; if(fk_chk() fk_r-; /有冲突取消操作 fk_r &= 0x03; else /初始化时 fk_run = 1; break; case 7: /左转 if (fk_run) /游戏中右转 fk_r-; if(fk_chk() fk_r+; /有冲突取消操作 fk_r &= 0x03; else /初始化时 fk_run = 1; break; if(fk_run)& (fk_x!=fk_oldx)|(fk_y!=fk_oldy)|(fk_r!=fk_oldr) ) fk_reffk(); /刷新显示 rand();/*/ - / 32字节void delay(uint x) uint i,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论