ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:200.17KB ,
资源ID:9650166      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9650166.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(可以用 Proteus仿真的KeilC俄罗斯方块程序.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

可以用 Proteus仿真的KeilC俄罗斯方块程序.docx

1、可以用 Proteus仿真的KeilC俄罗斯方块程序可以用 Proteus仿真的KeilC俄罗斯方块程序时间:2006-12-29 来源: 作者:徐文军 点击:1792 字体大小:【大 中 小】 /-/ 源程序大公开 / (c) Copyright 20012005 xuwenjun / All Rights Reserved / V1.00 /-/标题: 俄罗斯方块程序 ? /文件名: xwj_fk.c /版本: V1.00 /修改人: 徐文军 E-mail:xuwenjun /日期: 05-05-13 /描述: 俄罗斯方块程序 ? /声明: / 以下代码仅免费提供给学习用途,但引用或修改后

2、必须在文件中声明出处. / 如用于商业用途请与作者联系. E-mail:xuwenjun / 有问题请mailto xuwenjun 欢迎与我交流! /-/老版本: 无 老版本文件名: /创建人: 徐文军 E-mail:xuwenjun /日期: 05-05-13 /描述: / 1、功能完整,直接使用 / 2、模块独立性强,移植方便,外部仅init和move函数,修改显示和输入即可 / 3、对减少内存占用、尽量减少屏幕操作进行适当优化 / 4、新方块生成高度随机,绝对无规律 / 5、仿真环境为Keil7.5+Proteus6.5,可以联机也可脱机运行 / code SIZE = 1845 -

3、/ 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 lon

4、g#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(voi

5、d); /冲突检查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_m

6、apLINEMAX+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行

7、 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= 不错! ,真棒! ,好极啦!,太棒

8、了!,;/-/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,chnin

9、t(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=(

10、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;

11、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_

12、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) /满行

13、 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_map

14、i-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) /在最高位置碰撞且不能消行则游戏结

15、束 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,-); prin

16、tat(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 (i(automapn+4) fk_mapi=rand()-1|FULLMAP; /背景映象 else fk_mapi=FULLMAP; /背景映象 fk_refline(i); /刷新1行背景 fk_show(); /显示分数/ fk_new(); /产生新方块 /-/void fk_move(void) /移动方块 unsigned char temp; if(KeyTest() /检查有无按键 putinbuf(KeyGetcode(); /按键码输入接收缓冲区

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1