0911090103于双江《泡泡龙游戏》4025824.doc
一、题目(问题)描述我这次的课程设计是用C语言做一个小游戏泡泡龙。二、功能分析通过体验并分析后得出这泡泡龙游戏中主要功能包括:1.初始化新游戏的开局功能。2.方向掌握功能。3.发射功能。4.若有3个或3个以上颜色相同就消失功能。5.自动弹出下一个颜色(随机)功能。6.若全部泡泡都没了,就下一关。7.泡泡碰到指针则失败。三、系统设计1程序总体结构程序中由主模块负责协调各功能模块的工作。 跑泡龙是一个经典的小游戏,开局后,通过你掌握方向键进行射击,尽量把颜色相同的射到一块,3个或3个以上颜色一样的泡泡在一起就会消失,重复操作,控制方向,射击,当界面上的泡泡一个也没了,那么恭喜你,闯关成功。如果你射击的泡泡越来越多,最后碰到指针,那么很遗憾你失败了。 其结构图如下:泡泡龙程序系统开局控方向消失越来越多多多过关结束射击图2 泡泡龙的总体结构图2界面设计进入该游戏界面,你可以选择start/exit来选择是否要继续,点击start就可以自动进入游戏并开始玩。然后就根据规则玩此游戏。其界面图如下:图3 泡泡龙游戏的界面3输入方式设计此游戏为dos下程序,因此简化为键盘控制。上,下,左,右键用来移动指针的方向;回车用来射击;ESC 退出游戏 4重要数据的数据结构设计1> 泡泡龙界面数据#define VK_LEFT 0x4b00 /*控制方向的左键值*/ #define VK_RIGHT 0x4d00 /*控制方向的右键值*/#define VK_DOWN 0x5000 /*控制方向的下键值*/#define VK_UP 0x4800 /*控制方向的上键值*/#define VK_ESC 0x011b /*退出游戏*/#define VK_SPACE 0x3920 /*继续进行*/#define TRUE 1 /*正确*/#define FALSE 0 /*出现错误*/2> 泡泡龙界面内部数据 public: /*定义的全局变量*/float x,y; /*确定发射泡泡的方位*/int color; /*输入泡泡的颜色*/float radius; / *输入泡泡的半径大小*/int samecolor; /*判断泡泡颜色是否相同*/int clear_init; /*颜色相同的泡泡就消失*/ int notdrop; /* 泡泡没有碰到发射针就继续*/ int drop_init; /*颜色不相同的泡泡就累加 */5函数设计文件中函数的功能图如下:文件名函数原形函数功能函数处理描述;泡泡龙程序系统.Cvoid initboard() 选择输入输入在射击时的泡泡;circle1(bub.x,bub.y,10); 循环输入重复射击操作,泡泡循环射击;printbub();输出使界面内的泡泡越来越多,射击出很多不同颜色的泡泡;switch(key);循环操作循环控制方向键来确定射击的方向;exit(1);退出游戏失败,则退出;void clearboard();输出弧线利用for循环输出不同颜色的泡泡;void dropboard();输出泡泡利用for循环使相同颜色泡泡消失,不同颜色泡泡累加;void main();程序的主函数界面泡泡全部消失,成功进下一关,反之则失败退出。四、关键技术、难点及其解决方法此程序的关键是在游戏中,下面指针会循环的射击出不同颜色的小泡泡,而且使3个或3以上颜色相同的泡泡消失,不同颜色的累加,这些的各种表示方法五、测试方法1.按键测试。检查正确的输入时,是否界面正确表现;错误输入时,是否无效。2.程序运行测试。正确运行,观察是否异常;运行时中断,程序是否正确退出。六、总结课程设计是培养学生综合运用所学知识 ,发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们的实际工作能力的具体训练和考察过程,当今计算机应用在生活中可以说得是无处不在。掌握程序开发技术是十分重要的,而C语言又是最常见,因此做好C语言课程设计是十分必要的。自从拿到题目到完成整个编程,从理论到实践,在整整一个星期的日子里,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。我做的是小游戏泡泡龙程序设计,虽然这程序不算很难,但对于我一个初学者来说,感觉很困难,也使第一次做课程设计,通过问同学,上网查资料,终于成功完成了此次课程设计。通过这次实训,使我对C语言有了更进一步的了解,也使我认识到理论与实践的结合才是最有效的。附1、使用说明1、 功能说明:泡泡龙游戏的操作非常,程序中已经定义到了,控制方向的上、下、左、右键,和控制发射的空格键。你只需要点开始进入游戏,就按照规则开是玩,通过你玩的会判断是进入下一关,还是失败退出。2、 用户手册:泡泡龙是一个简单经典的智力小游戏,手机上网上玩的人都比较多,大多是小朋友玩的比较多,有助于智力的开发,当然成年人也可以玩。附2、代码清单此文件主要包含涉及文件读写功能的函数。#include<iostream.h> #include<graphics.h> #include<conio.h> #include<dos.h> #include<bios.h> #include<stdlib.h> #include<math.h> #define VK_LEFT 0x4b00 /*上下左右键的值*/ #define VK_RIGHT 0x4d00 #define VK_DOWN 0x5000 #define VK_UP 0x4800 #define VK_ESC 0x011b #define VK_SPACE 0x3920 #define TRUE 1 #define FALSE 0 #define PI 3.141593 #define sqrt2 1.41421 #define y1 17.32051 int flag; circle1(int x,int y,float r) int i; for(i=1;i<r;i+) circle(x,y,i); return 0; class bubble public: float x,y; int color; float radius; int samecolor; int clear_init; int notdrop; int drop_init; board114; void initboard() /*/ int i,j,k; for(i=0;i<114;i+) boardi.y=i/19*2*y1+10+(i%19)/10*y1; if(i%19)/10=0)boardi.x=(i%19)*20+10; if(i%19)/10=1)boardi.x=(i%19)%10*20+20; boardi.samecolor=FALSE; boardi.clear_init=FALSE; boardi.notdrop=FALSE; boardi.drop_init=FALSE; class startbub public: float x,y; float x2,y2; int color; float v; /*bubble运动的速度*/ float radius; float angle; float moveangle; startbub() x=100.0;y=10.0+12*y1;angle=PI/2.0;moveangle=PI/2.0;v=1.0; MakeBubble(); ShowAngle(); MoveBubble(); ChangeAngle(); ClearBubble(); DropBubble(); bub; initbub() bub.x=100; bub.y=10+12*y1; return 0; printboard() /*/ int i; for(i=0;i<114;i+) if(boardi.color!=0) setcolor(boardi.color); circle1(boardi.x,boardi.y,10); setfillstyle(SOLID_FILL,boardi.color); bar(boardi.x-sqrt2*4.4,boardi.y-sqrt2*4.4,boardi.x+sqrt2*4.4,boardi.y+sqrt2*4.4); else setcolor(BLACK); circle1(boardi.x,boardi.y,10); setfillstyle(SOLID_FILL,BLACK); bar(boardi.x-sqrt2*4.4,boardi.y-sqrt2*4.4,boardi.x+sqrt2*4.4,boardi.y+sqrt2*4.4); return 0; startbub:MakeBubble() /*/ color=random(6)+1; return 0; startbub:ShowAngle() /*/ setcolor(BLACK); setlinestyle(SOLID_LINE,10,10); line(100.0,10+12*y1,x2,y2); x2=100.0+30.0*cos(angle); y2=10+12*y1-30.0*sin(angle); setcolor(8); line(100.0,10+12*y1,x2,y2); setcolor(color); circle1(100.0,10+12*y1,10); return 0; printbub() setcolor(bub.color); circle1(bub.x,bub.y,10); bar(bub.x-sqrt2*5.0,bub.y-sqrt2*5.0,bub.x+sqrt2*5.0,bub.y+sqrt2*5.0); bub.ShowAngle(); return 0; clearbub() setcolor(BLACK); circle1(bub.x,bub.y,10); bar(bub.x-sqrt2*5.0,bub.y-sqrt2*5.0,bub.x+sqrt2*5.0,bub.y+sqrt2*5.0); bub.ShowAngle(); return 0; int startbub:MoveBubble() /*/ int i,j; int flag1; flag=0; float min=30000.0; float *length; /*boardi到bub的距离的平方*/ while(1) clearbub(); for(i=0;i<114;i+) lengthi=(boardi.x-x)*(boardi.x-x)+(boardi.y-y)*(boardi.y-y); if(lengthi<400.0&&boardi.color!=0)flag1=1;break; if(flag1=1)break; if(x<12)x=12;moveangle=PI-moveangle; if(x>188)x=188;moveangle=PI-moveangle; if(y<10)break; x=x+2*cos(moveangle); y=y-2*sin(moveangle); printbub(); for(i=0;i<114;i+) lengthi=(boardi.x-x)*(boardi.x-x)+(boardi.y-y)*(boardi.y-y); if(lengthi<min&&boardi.color=0)min=lengthi;flag=i; boardflag.color=color; x=100; y=20*10*y1+10; color=0; return flag; startbub:ChangeAngle() /*/ int key; int flag_1=0; bioskey(1); key=bioskey(0); switch(key) case VK_RIGHT: if(angle>PI/36.0)angle=angle-PI/72.0;moveangle=angle;ShowAngle();break; case VK_LEFT: if(angle<PI-PI/36.0)angle=angle+PI/72.0;moveangle=angle;ShowAngle();break; case VK_SPACE: MoveBubble();ShowAngle();moveangle=angle;flag_1=1;break; case VK_ESC: exit(1); return flag_1; startbub:ClearBubble() /*/ return 0; startbub:DropBubble() /*/ return 0; void clearboard() int quit=FALSE; int i,j; int sum=0; int color=boardflag.color; float m,n; boardflag.samecolor=TRUE; for(;) for(i=0;i<114;i+) if(boardi.color=color&&boardi.samecolor=TRUE&&boardi.clear_init=FALSE) break; if(i=113)quit=TRUE;break; if(quit=TRUE)break; for(j=0;j<114;j+) m=boardj.x-boardi.x; n=boardj.y-boardi.y; if(m*m+n*n<450.0&&boardj.color=color) boardj.samecolor=TRUE; boardi.clear_init=TRUE; for(i=0;i<114;i+) if(boardi.samecolor=TRUE) sum+; if(sum>=3) for(i=0;i<114;i+) if(boardi.samecolor=TRUE) boardi.color=0; void dropboard()/*/ int quit=FALSE; int i,j; int m,n; for(i=0;i<114;i+) boardi.notdrop=FALSE; boardi.drop_init=FALSE; for(i=0;i<10;i+) if(boardi.color!=0)boardi.notdrop=TRUE; for(;) for(i=0;i<114;i+) if(boardi.notdrop=TRUE&&boardi.drop_init=FALSE)break; if(i=113)quit=TRUE;break; if(quit=TRUE)break; if(boardi.notdrop=TRUE&&boardi.drop_init=FALSE) for(j=0;j<114;j+) m=boardi.x-boardj.x; n=boardi.y-boardj.y; if(m*m+n*n<450.0&&boardj.color!=0) boardj.notdrop=TRUE; boardi.drop_init=TRUE; for(i=0;i<114;i+) if(boardi.notdrop=FALSE) boardi.color=0; void main() int i; int gdriver=DETECT,gmode; initgraph(&gdriver,&gmode,"g:bc31bgi"); randomize(); initboard(); for(i=0;i<114;i+) bub.MakeBubble(); printboard(); bub.ShowAngle();printboard(); for(;bub.ChangeAngle()=0;)bub.ShowAngle();printboard(); clearboard(); dropboard(); dropboard(); initboard(); initbub();