C课程设计报告.docx
- 文档编号:9833492
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:16
- 大小:451.30KB
C课程设计报告.docx
《C课程设计报告.docx》由会员分享,可在线阅读,更多相关《C课程设计报告.docx(16页珍藏版)》请在冰豆网上搜索。
C课程设计报告
赣南师范学院科技学院
C课程设计报告
教学系
数学与信息科学系
年
级2015级
专
业
计算机科学与技术
学
号1520061128
姓
名
钟莉筠
任课教师
郑志明
完成日期2016年7月6日
分数
签名
数学与信息科学系2016届学生课程报告
目
录
一、课程设计简介................................................-2-
二、程序功能介绍................................................-2-
(一)俄罗斯方块游戏需要解决的问题包括......................-2-
(二)俄罗斯方块有戏需要设计的功能函数包括..................-2-
三、开发环境及工具.............................................-3-
四、程序数据结构设计............................................-3-
(一)从配置文件获取方块数据................................-3-
(二)游戏初始化控制........................................-3-
(三)显示游戏池边界........................................-4-
(四)显示游戏提示信息结点..................................-5-
(五)运行游戏信息结点......................................-5-
(六)是否重玩游戏信息结点..................................-6-
五、程序设计储存设计............................................-7-
六、程序流程设计................................................-7-
七、程序运行效果图..............................................-8-
八、程序测试结果图..............................................-9-
九、程序存在的不足及改进的方法...............................-10-
十、程序设计心得体会...........................................-11-
0
数学与信息科学系2016届学生课程报告
一、课程设计简介
程设计中利用C语言在控制台的情况下实现俄罗斯方块游戏,俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。
课程中就是灵活利用C语言中的知识,掌握对于结构体,数组,指针等变量的用法,以及掌握对于函数的嵌套调用,在本次课程中掌握对于编写程序的格式以及模块化,能够使得整体看上去更加简洁。
二、程序功能介绍
(一)俄罗斯方块游戏需要解决的问题包括:
1按任意键开始游戏,随机产生方块并自动下移
2用Esc键退出游戏。
3用↑键变换方块
4用←键和→键左右移动方块
5用↓键使方块加速下移
6用空格键使方块直接下移
7能正确判断满行并消行、计分、定级别
8能正确计时
9设定游戏为不同级别,级别越高难度越大
重点:
*游戏面包的数据结构:
二维数组
*7种形状方块的数据结构:
结构体保存每种形状方块的坐标、颜色
(2)俄罗斯方块游戏需要设计的功能函数包括:
(1)声明俄罗斯方块的结构体
(2)函数原型的声明
(3)制作游戏窗口
1
数学与信息科学系2016届学生课程报告
(4)制作俄罗斯方块
(5)判断方块是否可以下移,左移,右移。
(6)判断是否可以消除
(7)判断是否满格
3、开发环境及工具
开发环境:
windows7系统
工具:
codeblocks
四、程序数据结构设计
(一)从配置文件获取方块数据
2
数学与信息科学系2016届学生课程报告
(2)游戏初始化控制
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;//挂
3
数学与信息科学系2016届学生课程报告
}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;y { 4 数学与信息科学系2016届学生课程报告 MoveXY(10,y-3); printf("%2s",""); MoveXY(23,y-3); printf("%2s",""); } MoveXY(10,y-3);//底部边界 printf("%28s",""); } 5 数学与信息科学系2016届学生课程报告 (四)显示游戏提示信息结点 voidPromptInformation(){ SetConsoleTextAttribute(hOut,0xF); MoveXY(0,2); 6 数学与信息科学系2016届学生课程报告 printf("◆游戏规则: "); 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。 "); } 7 数学与信息科学系2016届学生课程报告 (5)运行游戏信息结点 voidrunGame(TetrisManager*manager,TetrisControl*control){clock_tclockLast,clockNow; clockLast=clock();//计时 printTetrisPool(manager,control);//显示游戏池 8 数学与信息科学系2016届学生课程报告 while(! manager->dead)//没挂 { while(_kbhit())//有键按下 { keydownControl(manager,control,_getch());//处理按键} if(! control->pause)//未暂停 { clockNow=clock();//计时 //两次记时的间隔超过0.45秒 if(clockNow-clockLast>0.45F*CLOCKS_PER_SEC){clockLast=clockNow; keydownControl(manager,control,80);//方块往下移} } } } 9 数学与信息科学系2016届学生课程报告 (7)是否重玩游戏信息结点 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; 10 数学与信息科学系2016届学生课程报告 }elseif(ch=='N'||ch=='n'){ returnfalse; } }while (1); } 五、程序设计储存设计 程序存储是存在硬盘上,分三个文件存储。 俄罗斯放方块信息数据存储在"definefile"中,游戏操作信息数据存储在"gamefile",游戏界面显示信息数据存储在"displayfile"。 打开方式是ab+,每次打开用FILE*fp=fopen();语句,从硬盘中读取出来从而显示。 6、程序流程设计 如图1所示游戏系统运行大概运行过程: 函数初始化、显示各界面、如游戏池界面、按键控制提示界面、成绩统计界面、方块统计界面等,游戏开始运行,再判断是否结束,判断是结束后再判断是否要重新开始游戏,然后循环。 图1 程序流程图 七、程序运行效果图 程序运行效果图见图2所示 11 数学与信息科学系2016届学生课程报告 图2 8、程序测试结果图 游戏系统运行大概运行过程: 加载游戏,函数初始化、显示各界面、如游戏池界面、按键控制提示界面、成绩统计界面、方块统计界面等,游戏开始运行,再判断是否结束,判断是结束后再判断是否要重新开始游戏,然后循环。 12 数学与信息科学系2016届学生课程报告 程序测试结果图见图3所示 13 数学与信息科学系2016届学生课程报告 图3 九、程序存在的不足及改进的方法 (一)不足之处: (1)没有做一个或多个通用的函数,没有做排序的函数,导致输出的信息不能依次排序。 (2)俄罗斯方块的类型在程序中写死了,不好添加修改方块的类型。 (3)对于程序的细节内容没有去添加,整个程序显得太繁琐。 (二)改进方法: (1)正确使用指针指向下个结点,使查询和编辑连续操作。 (2)利用一个配置文件把所需要的方块类型添加进去,然后在源程序中调用生成相应的数值,这样只要在配置文件中修改方块的参数就可以得到所需要的方块类型。 (1)用一个或多个函数分解出来,这样可以实现同一个函数的多次调用,大 14 数学与信息科学系2016届学生课程报告 大减少代码的数量。 十、程序设计心得体会 这次课程设计,在一周的上课中,我一直都处于模糊的状态,对C语言没有足够的认识和了解。 根据老师的讲解,我在暑假通过书本和资料查找,慢慢的琢磨和实验操作,虽然还不能通透这尔罗斯方块游戏程序,但通过这次学习终于让我更加了解课本知识,对C语言中的知识学会了一些应用,加深了对C语言知识的了解,以及对指针、结构体的操作,能够根据自己的需求而去构建需要的函数,在处理问题时学会了先整体分析,在细化处理其他内容。 在编程时,只有大的框架做好了才可以去优化,才有时间去完善自己想要做的功能。 在有些类似的问题处理时学会互相调用函数,以简化繁琐而重复的代码。 这次课程设计教会了我相当的基础知识,让我对C语言有了更进一步的认识,为以后的学习有了不一样的铺垫,在以后的学习中,还是需要不断的探索和实验,这样才能把书本上的东西真正的掌握成为自己的东西。 同事,感谢这次的C课程,也感谢老师的指导,在以后的学习中我会更加努力。 15
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告