1、含源代码北邮程序设计实践第二章消灭星星俄罗斯方块改进实验报告程序设计实践实验二:俄罗斯方块改进之消灭星星设计报告 课题名称: 俄罗斯方块改进之消灭星星学生姓名: 班 级: 班内序号: 学 号: 日 期: 目录一、课题概述二、系统设计三、程序设计亮点展示(新增功能) 四、 运行结果分析五、遇到的难题与解决方法 六、总结参考文献一、课题概述 1.1课题目标和主要内容主要内容:根据控制台编程的相关知识,改进俄罗斯方块游戏。目标:以培养学生动手实践能力为目的,重点是在学习C+程序设计和数据结构的基础上,使学生从实践中学习如何综合运用C+和数据结构的相关知识解决实际应用中的问题,了解程序设计的基本思想在
2、具体实际应用中的体现,掌握分析问题、解决问题的方法,从而提高学生的编程能力,达到编程熟练、会调试、代码书写规范的基本要求,具备简单应用程序的设计、实现能力。平台:Visual studio 2013 API平台。 1.2系统的主要功能改进俄罗斯方块游戏之消灭星星。在俄罗斯方块游戏的基础上做一些改进,加强游戏可玩性,难度和美观性2. 系统设计 程序流程图及描述 主要源文件头文件主要实现功能由这些函数分别实现游戏中各种功能void Init();/初始化工作 void Turn(int a4,int w,int h,int *x,int y); /方块转动bool IsAvailable(int
3、a,int x,int y,int w,int h); /判定是否能放下/bool IsThesame(int Num,int nextNum /*mMAPW, int a, int x, int y, int w, int h*/); /判定是否颜色相同void DrawBlocks(int a,int w,int h,int x,int y,WORD wColors,int nColors);void ClearSquare(int a,int w,int h,int x,int y);void GameOver();void DeleteLine(int mMAPW,int row);
4、/消除一行/void ChangeSquare(int *a, int w, int h, int x, int y);/void DrawOthers(int a, int w, int h, int x, int y, WORD wColors, int nColors); 3、程序设计亮点展示亮点一:新增一些按键功能,增加了游戏可玩性#define KEY_BACKSPACE 8#define KEY_ENTER 0xD#define KEY_SPACE 32#define KEY_ALT 18#define KEY_HOME 36如space按键,调用系统函数增加暂停游戏功能:case
5、 KEY_SPACE: textout(handle, 7 + dx, 10 + dy, wColors, 1, 暂停游戏); system(pause); if (_kbhit() textout(handle, 7 + dx, 10 + dy, wColors, 1, ); break;如tab按键,可使星星有炸弹功能:case KEY_TAB: Num = 1; break;如Backspace按键向上撤回方块:case KEY_BACKSPACE: ClearSquare(&a00, 4, 4, x, y); y-; wColors0 = SQUARE_COLORNum; DrawBl
6、ocks(&a00, 4, 4, x, y, wColors, 1); /*if (score % 10 & score != 0) DrawOthers(&a00, 4, 4, x, y, wColors, 1); else DrawBlocks(&a00, 4, 4, x, y, wColors, 1); */ break;亮点二:新增炸弹功能if (Num = 1) WORD wColors1 = FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY ; textout(handle, 3 + dx, 8 + dy, wColo
7、rs, 1, 白色小方块是炸弹); textout(handle, 3.5 + dx, 9 + dy, wColors, 1, 落下后消去一行); _sleep(1500); textout(handle, 3 + dx, 8 + dy, wColors, 1, ); textout(handle, 3.5 + dx, 9 + dy, wColors, 1, ); if (i min(y + 4, MAPH - 1) DeleteLine(map, i); score+; bomb+; textout(handle, 26 + dx, 17 + dy, wColors, 1, itoa(bom
8、b, string, 10);亮点三:新增高难度星星/11种不同形状的方块int b1144 = 0, 1 , 1, 1, 1 , 2 , 3,3,0,3,3, 0,0,4,4,4,4, 0,5,5,5,5, 6,6,6,6, 7,7,7,7, 8,0,8,8,0,8, 9,9,0,9, 0,10,10,0, 10,0,0,10, 11 , 11, 11, 11 , ;WORD SQUARE_COLOR11 = FOREGROUND_RED|FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | F
9、OREGROUND_INTENSITY, FOREGROUND_BLUE|FOREGROUND_INTENSITY, FOREGROUND_RED|FOREGROUND_INTENSITY, FOREGROUND_RED|FOREGROUND_BLUE|FOREGROUND_INTENSITY, FOREGROUND_GREEN|FOREGROUND_BLUE|FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY, FOREGROUND_BLUE | FOREGROUND_INTENSITY,
10、 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY, FOREGROUND_GREEN | FOREGROUND_INTENSITY, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY, ; 四、 运行结果分析运行效果:在经典游戏俄罗斯方块上的改进使消灭星星游戏更加有可玩性,友好用户交互界面。新增星星加强了游戏的挑战性,炸弹功能和转化炸弹功能又一定程度加强了可玩性。5、遇到的难题与解决方法难题一:如何增加炸弹功能?解决方式在主函数放
11、下方块之后的语句加一个判断,如果落下的是指定炸弹方块,调用消行函数,并且输出语句。特别是为了避免输出语句显示太短使系统sleep一段时间难题二:如何能使系统暂停?查阅资料后调用系统函数system(pause);解决。难题三:如何能使新加的星星形状正常运行?在经过一次次尝试后发现某些形状的星星并不适用于turn这个函数,所以选定了最后这三个难题四:如何撤回下落的方块?类比于方块下落时的擦除和重新画,只需修改坐标变化即可六、总结本次课题相对上次的课题难度加大不少,特别是要做出一个完整的可以操作的游戏,还需要复习大一学习的c+内容,查阅不少资料。在同学们一次又一次的讨论摸索下,渐渐摸索出来了一步有一步。 通过这次游戏的编程,让我又学会了一种更复杂的逻辑编译办法。在学习编程过程中,锻炼了自己独立思考和解决问题的能力得,也会影响到以后各科的学习,甚至是终生有益。五、参考文献1徐惠民等,C+高级语言程序设计案例与实践辅导,北京:人民邮电出版社,20122徐雅静等,数据结构与stl,北京:北京邮电大学,20113徐惠名等,C+高级语言程序设计,北京,人民邮电出版社,2012