C语言课程设计(俄罗斯方块).doc
《C语言课程设计(俄罗斯方块).doc》由会员分享,可在线阅读,更多相关《C语言课程设计(俄罗斯方块).doc(14页珍藏版)》请在咨信网上搜索。
实训报告 实训报告 实训名称: C语言课程设计(俄罗斯方块) 院 系: 计算机科学与工程学院 专 业: 物联网工程 班 级: 152 学 号: 092615219 姓 名: 姚锋 指导教师: 靳颜清 开课时间: 2015 至 2016 学年短学期 一、需求分析 1.1 需求概述 1.11市场需求: 俄罗斯方块游戏是一个经典的小游戏,由于它操作简单,上到老人、下到小孩都可以玩,曾广受人们欢迎。现在游戏之风盛行,一款款画面精美、音乐动听的大型游戏就在我们身边,但需要投入大量的人力、物力去开发,还需要发大量的精力去玩,而且特别容易上瘾。现在的人,也许大都不屑于玩俄罗斯方块这种“弱智”的游戏,但仔细观察,我们身边还是有人玩这个的。俄罗斯方块也确实是一个很不错的休闲游戏。 1.12 对功能需求: 功能界面:游戏开始,音乐响起,让人感觉到是一种享受,这时,由计算机随机产生所定义的图形,记录所产生的图形的形状的数目,无操作时,方块竖直缓慢下落,图形在接触障碍物之前,可以由键盘控制向左右下移动,向下加速或翻转,可以进行暂停,当某一行被下落的方块填满后消除并计分。 1.2 功能简介 1.21.随机产生俄罗斯方块图形 1.22.方向键和wasdrz实现下落方块的左移、右移、加速下落、变形、交换等基本操作 1.23.正确判断游戏结束 1.24.对游戏成绩进行记分 注:运行环境 windows 7 控制台(80 * 43); 二、总体设计 2.1 开发环境与工具 开发环境:CodeBlocks 工具:prosesson 2.2 游戏总模块流程图(见图2.2) 图2.2 游戏总模块流程图 三、详细设计 3.1 模块介绍(创建,预览下一个方块和删除方块模块) 3.11 开始动画和文字显示(见图3.11) 图 3.11 开始动画 在本模板下,首先在界面底部会同时出现两个简单的小人迎面相遇,接着,过程中会等待按键触发,等待过程中Tetris字样会进行颜色变化,实现闪动效果,按任意键即可开始游戏。 3.12 随机创建方块的代码 函 数 名: int creat_block() 函数描述: 制作方块函数 函数功能: 实现俄罗斯方块制作方块的功能 输 入: NULL 输 出: NULL 备 注: 实现方块的制作 在本模块下,我们要完成当前方块的创建和下一个方块的提前创建与预览。 图3.12 随机创建方块 3.13 删除方块 函 数 名: int delete_block(int x,int y,int shape ,int status ) 函数描述: 在指定位置消除指定方块函数 函数功能: 实现俄罗斯方块消除方块的功能 输 入: x,y,shape,status 输 出: NULL 备 注: 实现消除方块 ,为下面的消行做铺垫 在本模块下,我们要根据操作者对方块发出的移动指令,对之前位置的方块做正确的删除。 图3.13 删除方块流程图 3.14 结束界面 当操作者在按下N(n)键之后,屏幕上会出现lose字幕和一堆由1与0两个数字组成的乱码,表明游戏已经结束,最后按任意键退出整个游戏界面。 3.2 核心代码 3.21 随机创建方块的代码 int creat_block() { shape=block_next_shape; status=block_next_status; block_colour=block_next_colour; block_x=17; block_y=1; next_block(); block_xj(shape); } int next_block() { delete_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status); block_next_colour=rand()%(0x10); block_next_shape=rand()%7; block_next_status=rand()%4; if(block_next_colour==0x00) { block_next_colour=0x0f; } printf_block(NEXT_BLOCK_X,NEXT_BLOCK_Y,block_next_shape,block_next_status,block_next_colour); } 3.22 删除方块的代码 int delete_block(int x,int y,int shape ,int status ) { int i,j; for(i=0;i<4;i++) { for(j=0;j<4;j++) { cursor(j+x,i+y); if(blocks[shape][status][i][j]==1) { SetConsoleTextAttribute(handle ,0x00); printf("■"); } } } } 3.23 开始动画以及开始文字 int dh() { int k1=0,k2=0,k3=0,k4=0;clock_t now3;clock_t last3;last3 =clock(); int k5=0,k6=0,k7=0,k8=0;clock_t now4;clock_t last4;last4 =clock(); int i=0; while(i<7) { now3=clock(); while(now3-last3>0.35f*CLOCKS_PER_SEC) { now3=clock(); while(now3-last3<0.01f*CLOCKS_PER_SEC) { now3=clock(); } last3=clock(); cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle ,0x00);printf(" ");k1++; cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle ,0x00);printf(" ");k2++; cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle ,0x00);printf(" ");k3++; cursor(6+1+k4,19-k4);SetConsoleTextAttribute(handle ,0x00);printf(" ");k4++; cursor(7+1+k1,16-k1);SetConsoleTextAttribute(handle ,0x0a);printf("-"); cursor(7+1+k2,17-k2);SetConsoleTextAttribute(handle ,0x0a);printf("0"); cursor(6+1+k3,18-k3);SetConsoleTextAttribute(handle ,0x0a);printf("< Y >"); cursor(6+1+k4,19-k4);SetConsoleTextAttribute(handle ,0x0a);printf("// \ "); cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle ,0x00);printf(" ");k5++; cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle ,0x00);printf(" ");k6++; cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle,0x00);printf(" ");k7++; cursor(6+2+18-k8,19-k8);SetConsoleTextAttribute(handle,0x00);printf(" ");k8++; cursor(7+2+18-k5,16-k5);SetConsoleTextAttribute(handle ,0x0b);printf("-"); cursor(7+2+18-k6,17-k6);SetConsoleTextAttribute(handle ,0x0b);printf("0"); cursor(6+2+18-k7,18-k7);SetConsoleTextAttribute(handle ,0x0b);printf("< F >"); cursor(6+2+18-k8,19-k8);SetConsoleTextAttribute(handle ,0x0b);printf(" \\\\"); i++; if(i==7) { break; } } } } int game_star() { dh(); clock_t clock_now,clock_last; clock_last=clock(); while(1) { { clock_now=clock(); if(clock_now-clock_last < 0.33f * CLOCKS_PER_SEC) { SetConsoleTextAttribute(handle ,(rand()%(0x10))); cursor(3,3); printf("■■■■■ ■■■■■ ■■■■■ ■■■■■ ■■■ ■■■■■"); cursor(3,5); printf(" ■ ■■■■■ ■ ■■■■■ ■ ■■■■■"); cursor(3,7); printf(" ■ ■■■■■ ■ ■ ■ ■■■ ■■■■■"); cursor(5,4);printf("■"); cursor(5,6);printf("■"); cursor(9,4);printf("■"); cursor(9,6);printf("■"); cursor(17,4);printf("■"); cursor(17,6);printf("■"); cursor(21,4);printf("■"); cursor(25,4);printf("■"); cursor(21,6);printf("■"); cursor(24,6);printf("■"); cursor(29,4);printf("■"); cursor(29,6);printf("■"); cursor(33,4);printf("■"); cursor(37,6);printf("■"); SetConsoleTextAttribute(handle ,0x0e); clock_last=clock_now; } } { SetConsoleTextAttribute(handle ,(rand()%(0x10))); cursor(15,17); printf("按任意键开始"); } if(_kbhit()) { getch(); clear_p(); return 0; } } } 3.24 游戏结束 int gameover() { int i; handle = GetStdHandle(STD_OUTPUT_HANDLE); clock_t time_now,time_last; time_last=clock(); for(i=700;i>=0;i--) { while(i) { time_now=clock(); if(time_now-time_last>0.45F * CLOCKS_PER_SEC) { SetConsoleTextAttribute(handle ,0x0a); cursor(rand()%84,rand()%25); printf("0"); SetConsoleTextAttribute(handle ,0x0a); cursor(rand()%84,rand()%25); printf("1"); SetConsoleTextAttribute(handle ,0x0a); cursor(rand()%84,rand()%25); printf("0"); SetConsoleTextAttribute(handle ,0x0a); cursor(rand()%84,rand()%25); printf("1"); SetConsoleTextAttribute(handle ,(rand()%(0x10))); cursor(4,4);printf("■");cursor(4,5);printf("■"); cursor(4,6);printf("■");cursor(4,7);printf("■"); cursor(4,8);printf("■");cursor(4,9);printf("■"); cursor(5,9);printf("■■■");cursor(10,4);printf("■"); cursor(10,5);printf("■"); cursor(10,6);printf("■");cursor(10,7);printf("■"); cursor(10,8);printf("■");cursor(10,9);printf("■"); cursor(11,4);printf("■■■");cursor(13,4);printf("■"); cursor(13,5);printf("■");cursor(13,6);printf("■"); cursor(13,7);printf("■");cursor(13,8);printf("■"); cursor(13,9);printf("■");cursor(11,9);printf("■■■"); cursor(17,4);printf("■");cursor(17,5);printf("■"); cursor(17,6);printf("■");cursor(20,7);printf("■"); cursor(20,8);printf("■");cursor(20,9);printf("■"); cursor(18,4);printf("■■■");cursor(17,7);printf("■■■"); cursor(17,9);printf("■■■");cursor(26,4);printf("■■■"); cursor(26,7);printf("■■■");cursor(26,9);printf("■■■"); cursor(25,4);printf("■");cursor(25,5);printf("■"); cursor(25,6);printf("■");cursor(25,7);printf("■"); cursor(25,8);printf("■");cursor(25,9);printf("■"); cursor(15,17);printf("按任意键关闭屏幕"); i--; } } } } 四、运行结果 运行结果(一) 运行结果(二) 运行结果(三) 运行结果(四) 五、总结 在编这项项目的过程中,我发现了很多问题,课堂上学得那些知识并不牢固,一实践和检验的时候往往会出现这样和那样的错误,所以要想真正掌握这门知识,光靠记忆和在深入理解也是远远不够的,必须上机多敲键盘,多打代码,遇到错误,要冷静的分析和修改,但经常很多问题不是我们个人能解决的,有时我们只是局限于一角,忽略其他的方块隐藏的潜在简单的错误,可能一个局外人一眼就可以发现了,有时可能我们是真的停留在程序表面,所以运用经常出错,因此必须把知识和实践相结合,凭一己之力不能解决的事千千万,我们要与他人团结合作,发挥团队的强大性。 13- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 俄罗斯方块
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【快乐****生活】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【快乐****生活】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文