c语言课程设计俄罗斯方块游戏的设计大学论文.docx
《c语言课程设计俄罗斯方块游戏的设计大学论文.docx》由会员分享,可在线阅读,更多相关《c语言课程设计俄罗斯方块游戏的设计大学论文.docx(27页珍藏版)》请在冰豆网上搜索。
c语言课程设计俄罗斯方块游戏的设计大学论文
学号
10212816207
武汉华夏理工学院
课程设计
课程名称C语言课程设计
题目俄罗斯方块游戏的设计
课程设计任务书
设计题目:
俄罗斯方块的设计
要求完成的主要任务:
1.任务描述
俄罗斯方块是一款风靡全球的掌上游戏机和PC游戏,它造成的轰动与创造的经济价值可以说是游戏史上的一件大事。
相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。
现在,要求你自己编程,使用自己亲手编写的俄罗斯方块游戏。
2.本课程涉及的知识点
数组、结构体、绘图、时钟中断等,通过本程序的训练,进一步加深对C语言的了解,掌握游戏开发基本原理,为开发出高质量的游戏软件打下坚实基础。
3.要求完成的任务
完成整个规定任务的设计及调试,且一定要画出程序流程图,最后得出正确结果,并经教师检查及答辩;
写出规范的课程设计说明书;
课程设计结束后交设计说明书等文档和设计内容:
从2月27日起,学生每天至少要到设计教室半天以上;
设计报告撰写格式要求:
设计报告的主要内容是详细写出在设计过程中所用到的主要技术或方法;
课程设计报告按国际通用格式书写,具体格式要求请见资料:
“课程设计说明书的书写内容与格式”
时间安排:
第一天:
学生先在实验室集中,由指导教师介绍课程设计的目的、布置任务后选题;
第二天-第四天:
学生在实验室完成设计,经教师检查并回答提问,确认设计完成;
第五天:
教师在计算机上先检查设计报告、学生修改后打印提交
指导教师签字:
2017年2月24日
系主任签字:
2017年2月24日
目录
1.设计题目2
2.开发环境4
3.开发工具4
4.完成时间4
5.设计思想4
6.设计过程及设计步骤5
7.测试运行7
8.评价与修订10
8.1算法上的优点10
8.2功能上的优点10
8.3程序的缺点10
9设计体会11
10.参考文献12
●
1设计题目
⏹俄罗斯方块设计
●2开发环境
⏹硬件环境:
微机系列,内存在1G以上,软件环境:
MicrosoftWindowsXP
●3开发工具
⏹TC、Win-tc或者VisualC++6.0
●4完成时间
⏹2017-2–27----2017.3.3
●5设计思想
先设计出6大类19种状态变化的俄罗斯方块,制作游戏窗口,制作俄罗斯方块与状态判断图形是否可动,随机产生俄罗斯方块类型的序号打印俄罗斯方块清除俄罗斯方块的痕迹判断是否满行并删除满行的俄罗斯方块。
●6设计过程及设计步骤
■制定游戏的边框大小,与方块的中心落下位置,按照设计思想做出来,加上难度随下落个数每次增加下落速度,不懂的程序上网搜索(这也增强了对C++的了解)。
附图下一面(图1.1)
俄罗斯方块排序流程图(图1.1)
是
否
否
是
程序源代码头文件
俄罗斯方块程序
#include
#include
#include
#include
做俄罗斯方块形状与变化用了数组(如下相应程序源代码为17种形状之一的Z字形)
case8:
//Z字方块
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x+2][tetris->y+1]=b[3];
break;
}
case9:
//Z字顺时针转90度方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y]=b[2];
a[tetris->x-2][tetris->y+1]=b[3];
break;
}
case10:
//Z字顺时针转180度方块
{
a[tetris->x][tetris->y-1]=b[1];
a[tetris->x-2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;
}
case11:
//Z字顺时针转270度方块
{
a[tetris->x][tetris->y+1]=b[1];
a[tetris->x+2][tetris->y-1]=b[2];
a[tetris->x+2][tetris->y]=b[3];
break;}
●7测试运行
⏹附图1.2与1.3
程序游戏开始图(1.2)程序运行图(1.3)
●8评价与修订
自己参考了很多先人最初做的程序,虽然许多东西不是很会,但大致看得懂,自己修改了别样的方块,但自己加不进去颜色,图中那个加颜色的程序命令不知道怎么运行不了,以后可以优化背景颜色与方块颜色。
这个做出来比较卡顿,希望下次会更流畅一些。
●9设计体会
总算把课程设计给完成了,这是一个坚苦而又漫长的过程,。
是啊,读了那么多年的书,课程设计可是第一次。
看着劳动成果,很欣慰!
虽然这不是我一个人做的,是和另一个的共同努力得来的。
“这怎么可能完成的了!
”4个天前我们这样说,现在我们可以说:
“哈哈,完成啦”!
刚开始,可以说是没有头绪,于是就去图书馆找资料,找到了一些关于画图方面的,可是这点小进展远远不够,这只是一个小小的开始。
下一步是上网查,找到了些与我们题目相似的,那时我们每个人都很高兴,可是那还不是我们要的,于是又上网查到了些有关的函数等等,终于在我们大家的努力下,完成了这个程序。
虽然对着电脑做程序,有点累有点热,可是当看到劳动成果时,真是别有一番滋味在心头啊!
世上无难事,只怕有心人,的确如此。
做完这个程序最大的收获就是感受到了集体的力量,当然个人的智慧也是很重要的哦!
尽管不是自己独立完成,但仍然很高兴,因为在设计的过程中,让我了解到要设计一个大型程序,查找资料是至关重要的,在他人的基础上,再根据自己所学进行修改与调试,最后设计出自己想要的程序,这过程艰辛,但只要你持之以恒,成功指日可待。
另外平时扎实的基础也很关键,因为如果你平时学得就不怎么样,那么你面对这么一个比较有难度的程序,你可能会望而却步,看他人的程序都是个难点,更别说让你自己去设计。
为了解决此。
●10参考文献
(1)罗伟坚《VisualC++经典游戏程序设计》
(2)刘长明《VisualC++实践与提高—多媒体篇》
(3)王晓峰《VisualC++实践与提高ActiveX篇》
设计过程中现场提问(或答辩)记载:
问:
这个俄罗斯方块程序运用了什么程序做出来的?
答:
运用了数组、结构体、绘图、时钟等。
问:
运行起来有什么毛病没?
答:
有点卡顿,可能是我下落速度设定的有点过快,游戏进城过快导致卡顿。
问:
如果再要你优化你的游戏你该怎么做?
答:
运用system("pause");加上颜色,优化后游戏设定有选择难度选项界面,游戏修改相应部分更加流畅。
指导教师评语:
成绩评定等级:
指导教师(签名):
2017年3月6日
俄罗斯方块程序
#include
#include
#include
#include
//游戏窗口
#defineFrameX4//游戏窗口左上角的X轴坐标
#defineFrameY4//游戏窗口左上角的Y轴坐标
#defineFrame_height20//游戏窗口的高度
#defineFrame_width18//游戏窗口的宽度
//定义全局变量
inti,j,temp,temp1,temp2;//temp,temp1,temp2用于记住和转换方块变量的值
inta[80][80]={0};//标记游戏屏幕的图案:
2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
intb[4];//标记4个"口"方块:
1表示有方块,0表示无方块
//声明俄罗斯方块的结构体
structTetris
{
intx;//中心方块的x轴坐标
inty;//中心方块的y轴坐标
intflag;//标记方块类型的序号
intnext;//下一个俄罗斯方块类型的序号
intspeed;//俄罗斯方块移动的速度
intcount;//产生俄罗斯方块的个数
intscore;//游戏的分数
intlevel;//游戏的等级
};
//函数原型声明
//光标移到指定位置
voidgotoxy(HANDLEhOut,intx,inty);
//制作游戏窗口
voidmake_frame();
//随机产生方块类型的序号
voidget_flag(structTetris*);
//制作俄罗斯方块
voidmake_tetris(structTetris*);
//打印俄罗斯方块
voidprint_tetris(HANDLEhOut,structTetris*);
//清除俄罗斯方块的痕迹
voidclear_tetris(HANDLEhOut,structTetris*);
//判断是否能移动,返回值为1,能移动,否则,不动
intif_moveable(structTetris*);
//判断是否满行,并删除满行的俄罗斯方块
voiddel_full(HANDLEhOut,structTetris*);
//开始游戏
voidstart_game();
voidmain()
{
//制作游戏窗口
make_frame();
//开始游戏
start_game();
}
/******光标移到指定位置**************************************************************/
voidgotoxy(HANDLEhOut,intx,inty)
{
COORDpos;
pos.X=x;//横坐标
pos.Y=y;//纵坐标
SetConsoleCursorPosition(hOut,pos);
}
/******制作游戏窗口******************************************************************/
voidmake_frame()
{
HANDLEhOut=GetStdHandle(STD_OUTPUT_HANDLE);//定义显示器句柄变量
gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);//打印游戏名称
printf("俄罗斯方块");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);//打印选择菜单
printf("**********下一个方块:
");
gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
printf("**********");
got