您好,欢迎访问三七文档
赣南师范学院科技学院C课程设计报告教学系数学与信息科学系年级2015级专业计算机科学与技术学号1520061128姓名钟莉筠任课教师郑志明完成日期2016年7月6日分数签名数学与信息科学系2016届学生课程报告1目录一、课程设计简介...................................................2二、程序功能介绍...................................................2(一)俄罗斯方块游戏需要解决的问题包括..........错误!未定义书签。(二)俄罗斯方块有戏需要设计的功能函数包括......错误!未定义书签。三、开发环境及工具................................................2四、程序数据结构设计...............................................3(一)从配置文件获取方块数据....................错误!未定义书签。(二)游戏初始化控制............................错误!未定义书签。(三)显示游戏池边界............................................5(四)显示游戏提示信息结点......................................7(五)运行游戏信息结点..........................................9(六)是否重玩游戏信息结点.....................................11五、程序设计储存设计..............................................12六、程序流程设计..................................................12七、程序运行效果图................................................12八、程序测试结果图................................................13九、程序存在的不足及改进的方法..................................15十、程序设计心得体会..............................................16数学与信息科学系2016届学生课程报告2一、课程设计简介程设计中利用C语言在控制台的情况下实现俄罗斯方块游戏,俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。课程中就是灵活利用C语言中的知识,掌握对于结构体,数组,指针等变量的用法,以及掌握对于函数的嵌套调用,在本次课程中掌握对于编写程序的格式以及模块化,能够使得整体看上去更加简洁。二、程序功能介绍(一)俄罗斯方块游戏需要解决的问题包括:⑴按任意键开始游戏,随机产生方块并自动下移⑵用Esc键退出游戏。⑶用↑键变换方块⑷用←键和→键左右移动方块⑸用↓键使方块加速下移⑹用空格键使方块直接下移⑺能正确判断满行并消行、计分、定级别⑻能正确计时⑼设定游戏为不同级别,级别越高难度越大重点:*游戏面包的数据结构:二维数组*7种形状方块的数据结构:结构体保存每种形状方块的坐标、颜色(二)俄罗斯方块游戏需要设计的功能函数包括:(1)声明俄罗斯方块的结构体(2)函数原型的声明(3)制作游戏窗口数学与信息科学系2016届学生课程报告3(4)制作俄罗斯方块(5)判断方块是否可以下移,左移,右移。(6)判断是否可以消除(7)判断是否满格三、开发环境及工具开发环境:windows7系统工具:codeblocks四、程序数据结构设计(一)从配置文件获取方块数据数学与信息科学系2016届学生课程报告4(二)游戏初始化控制typedefstructTetrisManager//这个结构体存储游戏相关数据{uint16_tpool[28];//游戏池int8_tx;//当前X坐标,此处坐标为方块左上角坐标int8_ty;//当前方块Y坐标int8_tblock_type[3];//当前,下个,和下下个方块类型int8_torientation[3];//当前,下个,和下下个方块旋转状态unsignedscore;//得分unsignederased_count[4];//消行数unsignederased_count_total;//消行总数unsignedtetris_count[7];//个方块数unsignedtetris_count_total;//方块总数booldead;//挂数学与信息科学系2016届学生课程报告5}TetrisManager;voidinitGame(TetrisManager*manager,TetrisControl*control){CONSOLE_CURSOR_INFOcursorInfo={1,FALSE};//光标信息g_hConsoleOutput=GetStdHandle(STD_OUTPUT_HANDLE);//获取控制台输出句柄SetConsoleCursorInfo(g_hConsoleOutput,&cursorInfo);//设置光标隐藏SetConsoleTitleA(俄罗斯方块);restartGame(manager,control);}(三)显示游戏池边界voidGameInterface(){signedchary;SetConsoleTextAttribute(hOut,0xFF9);for(y=ROW_BEGIN;yROW_END;++y)//不显示顶部4行和底部2行{数学与信息科学系2016届学生课程报告6MoveXY(10,y-3);printf(%2s,);MoveXY(23,y-3);printf(%2s,);}MoveXY(10,y-3);//底部边界printf(%28s,);}数学与信息科学系2016届学生课程报告7(四)显示游戏提示信息结点voidPromptInformation(){SetConsoleTextAttribute(hOut,0xF);MoveXY(0,2);数学与信息科学系2016届学生课程报告8printf(◆游戏规则:);MoveXY(0,6);printf(□向左移动:←A4);MoveXY(0,8);printf(□向右移动:→D6);MoveXY(0,10);printf(□向下移动:↓S2);MoveXY(0,12);printf(□顺时针转:↑W8);MoveXY(0,14);printf(□逆时针转:0);MoveXY(0,16);printf(□直接落地:空格);MoveXY(0,18);printf(□暂停游戏:回车);MoveXY(0,23);printf(FROMME。);}数学与信息科学系2016届学生课程报告9(五)运行游戏信息结点voidrunGame(TetrisManager*manager,TetrisControl*control){clock_tclockLast,clockNow;clockLast=clock();//计时printTetrisPool(manager,control);//显示游戏池数学与信息科学系2016届学生课程报告10while(!manager-dead)//没挂{while(_kbhit())//有键按下{keydownControl(manager,control,_getch());//处理按键}if(!control-pause)//未暂停{clockNow=clock();//计时//两次记时的间隔超过0.45秒if(clockNow-clockLast0.45F*CLOCKS_PER_SEC){clockLast=clockNow;keydownControl(manager,control,80);//方块往下移}}}}数学与信息科学系2016届学生课程报告11(七)是否重玩游戏信息结点boolifPlayAgain(){intch;SetConsoleTextAttribute(g_hConsoleOutput,0xF0);gotoxyWithFullwidth(15,10);printf(游戏结束);gotoxyWithFullwidth(13,11);printf(按Y重玩,按N退出);do{ch=_getch();if(ch=='Y'||ch=='y'){returntrue;数学与信息科学系2016届学生课程报告12}elseif(ch=='N'||ch=='n'){returnfalse;}}while(1);}五、程序设计储存设计程序存储是存在硬盘上,分三个文件存储。俄罗斯放方块信息数据存储在definefile中,游戏操作信息数据存储在gamefile,游戏界面显示信息数据存储在displayfile。打开方式是ab+,每次打开用FILE*fp=fopen();语句,从硬盘中读取出来从而显示。六、程序流程设计如图1所示游戏系统运行大概运行过程:函数初始化、显示各界面、如游戏池界面、按键控制提示界面、成绩统计界面、方块统计界面等,游戏开始运行,再判断是否结束,判断是结束后再判断是否要重新开始游戏,然后循环。图1程序流程图七、程序运行效果图程序运行效果图见图2所示数学与信息科学系2016届学生课程报告13图2八、程序测试结果图游戏系统运行大概运行过程:加载游戏,函数初始化、显示各界面、如游戏池界面、按键控制提示界面、成绩统计界面、方块统计界面等,游戏开始运行,再判断是否结束,判断是结束后再判断是否要重新开始游戏,然后循环。数学与信息科学系2016届学生课程报告14程序测试结果图见图3所示数学与信息科学系2016届学生课程报告15图3九、程序存在的不足及改进的方法(一)不足之处:(1)没有做一个或多个通用的函数,没有做排序的函数,导致输出的信息不能依次排序。(2)俄罗斯方块的类型在程序中写死了,不好添加修改方块的类型。(3)对于程序的细节内容没有去添加,整个程序显得太繁琐。(二)改进方法:(1)正确使用指针指向下个结点,使查询和编辑连续操作。(2)利用一个配置文件把所需要的方块类型添加进去,然后在源程序中调用生成相应的数值,这样只要在配置文件中修改方块的参数就可以得到所需要的方块类型。(3)用一个或多个函数分解出来,这样可以实现同一个函数的多次调用,大大数学与信息科学系2016届学生课程报告16减少代码的数量。十、程序设计心得体会这次课程设计,在一周的上课中,我一直都处于模糊的状态,对C语言没有足够的认识和了解。根据老师的讲解,我在暑假通过书本和资料查找,慢慢的琢磨和实验操作,虽然还不能通透这尔罗斯方块游戏程序,但通过这次学习终于让我更加了解课本知识,对C语言中的知识学会了一些应用,加深了对C语言知识的了解,以及对指针、结构体的操作,能够根据自己的需求而去构建需要的函数,在处理问题时学会了先整体分析,在细化处理其他内容。在编程时,只有大的框架做好了才可以去优化,才有时间去完善自己想要做的功能。在有些类似的问题处理时学会互相调用函数,以简化繁琐而重复的代码。这次课程设计教会了我相当的基础知识,让我对C语言有了更进一步的认识,为以后的学习有了不一样的铺垫,在以后的学习中,还是需要不断的探索和实验,这样才能把书本上的东西真正的掌握成为自己的东西。同事,感谢这次的C课程,也感谢老师的指导,在以后的学习中我会更加努力。
本文标题:C课程设计报告
链接地址:https://www.777doc.com/doc-6751067 .html