C语言产品计划报告书_第1页
C语言产品计划报告书_第2页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 / 151C 语言弹弹乐产品计划报告书设计名称:弹弹乐专业:软件工程班 级:1418姓 名:XX学 号:14621418XX指导老师:王若慧2 / 1511)选题背景与意义2)需求分析3)开发环境4)总体设计5)源代码6)心得体会3 / 151一、选题背景与意义随着编程语言的不断发展, 游戏发展速度越来越快, 游戏已 经成为现在人生活娱乐,打发时间,缓解压力的一项不可或缺的 项目。而一个优秀的游戏离不开游戏画面、程序脚本以及后期音 效的共同作用。因此,越来越多有着引人入胜的剧情,丰富有趣 的画面,好听难忘的音乐的小游戏在互联网上被越来越多的玩家 喜爱和分享。当这些兼具艺术性与流行性的元素都

2、由一个游戏组 合到一起,人们可以从中得到娱乐和放松, 同时有得到一些对生 活对人生的启发,让人会心一笑。而创作者也可以选择不同的风 格,不同的手法用计算机的一系列数码艺术创作手法实现自己的 创意,然后在一些交流互动网站上发表,供他人娱乐或者借鉴, 同时也可以得到广大互联网用户的意见,从而提高自身的创作水品。由此可见,游戏设计的意义就在于:集合不同的艺术门类,把艺术与技术相结合。从而让人可以在游 戏中的到美的享受。给广大的互联网用户提供了一个娱乐,休闲,放松身心的地方。 让设计师之与玩家之间产生交流,从而完善游戏。操作便捷,文件携带方便,无需安装,符合了现在很多快餐式的 生活要求便于大众随时的下

3、载,游戏。有丰富的图像,画面不受软件的限制。富有创意,风格多变。是 其他4 / 151电子游戏没有的。国内外研究现状及分析:目前利用开发出5 / 151了许多夸平台的网络游戏,甚至可以匹敌大型 MMOF 在 3G 时代到 来以后,我们很快可以在手机上玩到大型网络游戏,现有的制作网络游戏有:SLG 类(热血三国),体育类(热血球球),RPG 类(凡人 修真),桌面(德州扑克),TD 类(保卫家园)等等.在日本和美国,动画和游戏这一类的技术超出国内比较多,日本的动漫位居世界前列是众所周知的。二、需求分析1 功能的需求弹弹乐游戏是个简单的小游戏能让游戏者的身心得到娱乐从而能够更好地投入到学习或工作当

4、中虽然现在市面上出来这各种各样的游戏版本可是弹弹乐这类的小游戏其市场还是相当大的因为它玩法简单易行不论是手机还是小游戏机都能很顺利的运行对于在外忙碌的人不可能花费大量时间在娱乐上大型游戏是行不通的这样的小游戏刚好迎合了他们的需求。2:操作方法2.1 进入游戏2.2 游戏界面6 / 1512.3 游戏操作2.4 游戏结束三、开发环境7/ 1511:设计任务与需要的知识点1)通过编写弹弹乐游戏程序掌握结构化模块块化程序设计 的思想培养解决实际问题的能力2)有同步播放动画声音效果2:具体完成设计内容 本次课程设计需要掌握和运用如下的知识点:1 数组的应用2 全局变量的使用3 按键处理4 结构体的应用

5、5 图形音乐和动画的有关知识四、总体设计4.1 设计思路三、开发环境8/ 151这里我们首先构建一个游戏框架, 然后再编写各个模块, 后组成一个完整的游戏4.2 框架9 / 151五、源代码#i nclude 10 / 151#include #include #include #include #include #include #pragma comment(lib,winmm.lib)#define LEFT 1#define RIGHT 30#define TOP 1#define BUTTON 22/=/ 自定义结构体11 / 151typedef struct POINT / 点i

6、nt x;int y;Point;struct BALL / 球int x;int y;int x_Speed;int y_Speed;int mode; /0- 普通; 1- 实心; 2- 冰霜;Ball3;int x;int y;int length; / / 长度Bord;struct TREASURE / 宝石int x;int y;int type;Treasure;enum color green,blue,red ;9 / 151struct BORD/ 板13 / 151enum mode run_Game,creat_Map ;/=/ 自定义函数的声明 void gotoxy

7、(int x, int y);int mainGame(); / 主函数void initGame(int mode);/ 初始化游戏void runGame();/ 运行游戏void creatMap();/ 制作地图void helpGame();/ 游戏帮助void selectMap();/ 选择地图void playGame(); / 游戏完成时 int checkComplete(); / 检测游戏是否完成void PrintBord();/ 绘制木板和小球14 / 151void PrintLev(); / 初始化相关关卡void MoveBord(int orientation

8、); / 移动木板void MoveBall(int index); / 移动小球void removeDiamond(int index,int direction); 除方块void removeColor(enum color,Point diamond); 决颜色void showTreasure(int intRand,Point point_diamond); / 宝物void move_Treasure(); / 移动宝石void get_Treasure(); / 获得宝石void time_Treasure(); / / 宝石失效/ 移/ 解15 / 151/ 自定义全局变量

9、、全局常量HANDLE g_hConsoleOutput; / 获取控制台输出句柄short potVal4030;/ /0 空白, 1 1 级方块, 2 2 级方块, 33 级方块, 4围墙int live=1; / 生命int stop=0; /0- 不暂停, 1- 暂停int speed=1000; / 速度int intGrade=0; / 分数int intTreasure=0;/ 宝石数int getTreasure=0;/ 获得宝石int level_Now=0;/ 当前关卡int level_Max=0;/ 关卡数量16 / 151char fileName10020; / 目

10、前设置最高地图容量为 100 个char game_Map20; / 游戏地图clock_t treaTime_Last,treaTime_Now; / / 宝物持续时间static con st char* BALL_SHAPE=O,;/ 主菜单int main()g_hConsoleOutput =GetStdHandle(STD_OUTPUT_HANDLE); / 获取控制台输出句柄SetConsoleTitleA( 弹弹乐 -By : shw);17 / 151/ char chVolume256;/ long lVolume;/ mciSendString(status movie

11、volume,chVolume,255,0);/ lVolume=strtol(chVolume,NULL,10);mciSendString(play musicbg_music.mp3 repeat ,NULL,0,NULL); / 背景音乐mciSendString (setaudio musicbg_music.mp3 volume to100,NULL,0,NULL); / 设置音量doCONSOLE_CURSOR_INFO cursorInfo = 1, FALSE ;/ 光标信息SetConsoleCursorInfo(g_hConsoleOutput,&cursorIn

12、fo); / 设置光标隐藏18 / 151switch(mainGame() / 游戏选项case 0:playGame();break;case 1:creatMap();break;case 2:helpGame();break;case 3:selectMap();19 / 151playGame();break;while(1);system(pausenul);return 0;/ 主菜单int mainGame()FILE *fMap;int ch,index=0;20 / 151static const char *modeItem= 开始游戏 , 制 作关卡 ,游戏帮助 , 选

13、择关卡 ;system(cls);SetConsoleTextAttribute(g_hConsoleOutput,FOREGROUND_GREEN|FOREGROUND_INTENSITY);gotoxy(15, 5);printf(|- 1);gotoxy(15, 6);printf( | %2s%s%2S, , 弹弹乐 , );gotoxy(15, 7);printf(1-1);SetConsoleTextAttribute(g_hConsoleOutput, 0 xF0);gotoxy(16, 14);printf(%2s%s%2s, , modeItem0, );21 / 151Se

14、tConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 16);printf(%2s%s%2s, , modeItem1, );SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 18);printf(%2s%s%2s, , modeItem2, );SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 20);printf(%2s%s%2s, , modeItem3, );if(fMap=fopen(

15、mapsMapInfo.dat,r)=NULL)gotoxy(LEFT+4,TOP+2);printf( 打开地图信息文件发生错误 !);gotoxy(LEFT+4,TOP+4);printf( 请查看 MapInfo.dat 文件是否存在 !);exit(0);22 / 151while(fgets(fileNamelevel_Max,20,fMap)!=NULL)if(fileNamelevel_Maxstrlen(fileNamelevel_Max)-1=n)fileNamelevel_Maxstrlen(fileNamelevel_Max)-1=023 / 151level_Max+;

16、fclose(fMap);level_Now=0; / 默认第一个地图doch = getch();switch (ch)case s: case S: case2: case 80: /if(index=0)index = 1;SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);24 / 151gotoxy(16, 14);printf(%2s%s%2s, , modeItem0,);SetConsoleTextAttribute(g_hConsoleOutput, 0 xF0);gotoxy(16, 16);printf(%2s%s%2s, ,

17、 modeItem1,);else if(index = 1)index = 2;SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 16);printf(%2s%s%2s, , modeItem1, );SetConsoleTextAttribute(g_hConsoleOutput, 0 xF0);25 / 151gotoxy(16, 18);printf(%2s%s%2s, , modeItem2, );else if(index=2)index = 3;SetConsoleTextAttribute(g_hConsol

18、eOutput, 0 xF0);gotoxy(16, 20);printf(%2s%s%2s, , modeItem3, );SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);26 / 151gotoxy(16, 18);printf(%2s%s%2s, , modeItem2, );else if(index=3)index = 0;SetConsoleTextAttribute(g_hConsoleOutput,gotoxy(16, 14);printf(%2s%s%2s, , modeItem0, );SetConsoleTextAttri

19、bute(g_hConsoleOutput,gotoxy(16, 20);printf(%2s%s%2s, , modeItem3, );break;0 xF0);0 x0F);case w: case W: case 8: case 72: /上27 / 151if(index=0)index = 3;SetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 14);printf(%2s%s%2s, , modeItem0, );SetConsoleTextAttribute(g_hConsoleOutput, 0 xF0);go

20、toxy(16, 20);printf(%2s%s%2s, , modeItem3, ); else if(index = 1)index = 0;SetConsoleTextAttribute(g_hConsoleOutput, 0 xF0);28 / 151gotoxy(16, 14);printf(%2s%s%2s, , modeItem0,nnSetConsoleTextAttribute(g_hConsoleOutput, 0 x0F);gotoxy(16, 16);printf(%2s%s%2s, , modeItem1,);else if(index=2)index = 1;Se

21、tConsoleTextAttribute(g_hConsoleOutput,29 / 151gotoxy(16, 16);printf(%2s%s%2s, , modeItem1, );SetConsoleTextAttribute(g_hConsoleOutput,gotoxy(16, 18);printf(%2s%s%2s, , modeItem2, );else if(index=3)index = 2;SetConsoleTextAttribute(g_hConsoleOutput,gotoxy(16, 18);printf(%2s%s%2s, , modeItem2, );0 xF

22、0);0 x0F);0 xF0);SetConsoleTextAttribute(g_hConsoleOutput,30 / 1510 x0F);gotoxy(16, 20);printf(%2s%s%2s, , modeItem3, );break;case : case 13:return index;break;while(1);31 / 151/ 以全角定位到某点void gotoxy(int x, int y)static COORD cd;cd.X = (int)(x 1);cd.Y = y;SetConsoleCursorPosition(g_hConsoleOutput, cd

23、);/=/ 运行主程序void playGame() / 游戏完成时32 / 151char ch;dorunGame(fileNamelevel_Now);if(level_Nowlevel_Max & checkComplete()level_Now+;gotoxy(LEFT+2,BUTTON-3);printf( 恭喜你已经成功过关! );gotoxy(LEFT+2,BUTTON-2);printf(是否继续游戏?);33 / 151elsebreak; while(ch=_getch()=13);/=/ 开始游戏void runGame()int ch;clock_t cloc

24、kLast, clockNow;/ 游戏主进程clock_t treasureLast,treasureNow;/ 宝物下落过程34 / 151clockLast = treasureLast =clock(); /initGame(run_Game);PrintLev(); / 绘制游戏方块while(live)while(!stop & live)while (_kbhit() /ch = _getch();switch(ch)case 27:return;计时有键按下35 / 151break;case a:case A:case 4: case 75:MoveBord(1);b

25、reak;case d: case D: case 6: case 77:MoveBord(2);break;case 32:stop=1;clockNow = clock(); / 计时/ 两次记时的间隔超过 0.45 秒36 / 151if (clockNow - clockLast 0.2F *speed)clockLast = clockNow;MoveBall(0);if(intTreasure=1)treasureNow=clock();if (treasureNow - treasureLast 0.5F *CLOCKS_PER_SEC)treasureLast = treasu

26、reNow;move_Treasure();printf(%2s,);37 / 151if(getTreasure=1)treaTime_Now=clock();if(treaTime_Now-treaTime_Last 1.0F *CLOCKS_PER_SEC)if(treaTime_Now-treaTime_Last 1.1F *CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+27,BUTTON-2);2.1F * CLOCKS_PER_SEC)else if(treaTime_Now-t

27、reaTime_Last printf(%2s,);38 / 151SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+26,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last 3.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+25,BUTTON-2);4.1F * CLOCKS_PER_SEC)else if(treaTime_Now-treaTim

28、e_Last printf(%2s,);39 / 151SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+24,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last 5.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+23,BUTTON-2);6.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsole

29、Output,0 x0F);else if(treaTime_Now-treaTime_Last printf(%2s,);40 / 151gotoxy(LEFT+22,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last 7.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+21,BUTTON-2);8.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput

30、,0 x0F);gotoxy(LEFT+20,BUTTON-2);else if(treaTime_Now-treaTime_Last printf(%2s,);41 / 151printf(%2s,);else if(treaTime_Now-treaTime_Last 9.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+19,BUTTON-2);10.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0

31、F);gotoxy(LEFT+18,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last printf(%2s,);42 / 151else if(treaTime_Now-treaTime_Last 11.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+17,BUTTON-2);12.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);g

32、otoxy(LEFT+16,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last printf(%2s,);43 / 151else if(treaTime_Now-treaTime_Last 13.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+15,BUTTON-2);14.1F * CLOCKS_PER_SEC)SetConsoleTextAttribute(g_hConsoleOutput,0 x0F);gotoxy(LEFT+14,BUTTON-2);printf(%2s,);else if(treaTime_Now-treaTime_Last 15.1F * CLOCKS_PER_SEC)else if(tre

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论