题 目:涂鸦跳跃
专 业:计算机科学与技术
班 级: 14级八班
姓 名: 罗兴
学 号:2014141462158
- 1 -
1. 绪论 2. 语言特点
3. 课程设计的实验环境 4. 课程设计主要内容
5. 程序中的主要方法、变量和函数 3.3 课程设计的预备知识 3.4 课程设计主要内容 5.课程设计内容
5.1 程序中的主要方法、变量和函数 5.2程序具体设计 5.3游戏主窗口 6.设计体会与小结
- 2 -
绪论
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
科学计算
在科学计算领域,FORTRAN是使用最多的语言之一。但是C++凭借先进的数值计算库、泛型编程等优势在这一领域也应用颇多。
网络软件
C++拥有很多成熟的用于网络通信的库,其中最具有代表性的是跨平台的、重量级的ACE库,该库可以说是C++语言最重要的成果之一,在许多重要的企业、部门甚至是军方都有应用。
操作系统
在该领域,C语言是主要使用的编程语言。但是C++凭借其对C的兼容性,面向对象性质也开始在该领域有一席之地。 语言特点
语言特点
支持数据封装和数据隐藏
在C++中,类是支持数据封装的工具,对象则是数据封装的实现。C++通过建立用户定义类支持数据封装和数据隐藏。
在面向对象的程序设计中,将数据和对该数据进行合法操作的函数封装在一起作为一个类的定义。对象被说明为具有一个给定类的变量。每个给定类的对象包含这个类所规定的若干私有成员、公有成员及保护成员。完好定义的类一旦建立,就可看成完全封装的实体,可以作为一个整体单元使用。类的实际内部工作隐藏起来,使用完好定义的类的用户不需要知道类是如何工作的,只要知道如何使用它即可。
支持继承和重用
在C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。它可以从父类那里继承所有非私有的属性和方法,作为自己的成员。
- 3 -
支持多态性
采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。在这个树中的每个子类可以接收一个或多个具有相同名字的消息。当一个消息被这个树中一个类的一个对象接收时,这个对象动态地决定给予子类对象的消息的某种用法。多态性的这一特性允许使用高级抽象。
继承性和多态性的组合,可以轻易地生成一系列虽然类似但独一无二的对象。由于继承性,这些对象共享许多相似的特征。由于多态性,一个对象可有独特的表现方式,而另一个对象有另一种表现方式。
课程设计的实验环境
C++2008程序设计语言及相应的集成开发环境
课程设计主要内容
●设计理念
这是一款益智类,考验反应力和决断力的游戏,游戏名叫Doodle Jump。玩家控制小人,小人是不断往上跳的,玩家需要控制它不让它掉落下去,并找板子让小人跳的更高。跳的越高得分越多,但越到后面板子越稀少,同时还有怪物会阻挡小人的前进,变的更难,但考验了玩家的反应能力。每次会记录玩家的最高分,玩家可以一次次挑战自己的成绩,获得更高分,有可玩性和挑战性。
●原理
使用VC++进行可视化编程,调用了操作系统提供的API,VC6.0编译通过,在Windows系统上运行。
●功能
可以通过菜单选择不同的模式进行游戏,游戏中会有特殊的板子和道具,可以帮助玩家得更多的分。
●创新点
提供了特殊的模式,如无限火箭和无限竹蜻蜓道具,可以帮助那些玩的不好的玩家,得分较低的玩家体验迅速得分,超越更高分的快感。特殊模式的得分不覆盖普通模式的游戏记录,要想打破记录就要努力挑战,玩家可以突破自我,游戏可玩性高。
涂鸦跳跃游戏是在c++环境下编程的游戏,其中包括对涂鸦移动策略的编写、涂鸦射击策略的编写、变态模式策略的编写、构造函数的编写等等。游戏主要实现的功能有: (1).涂鸦可以根据键盘方向键移动;
(2).涂鸦可以根据键盘空格键射击敌方怪物; (3).涂鸦可以使用道具; (4).砖块有多种模式;
- 4 -
程序中的主要方法、变量和函数
Doodle() Block() MONSTER() UI() 定义水平方向的重力加速度和速度 定义垂直方向的重力加速度和速度 砖块和道具种类 道具状态 砖块破碎标识 砖块移动坐标 怪兽种类 怪兽生命值 接口种类 是否显示UI 贴背景:
for(i=0;i<3;i++) { sprintf(s,\"BK%d\ Bkg[i].hbm=LoadBitmap(hinstance,s); GetObject(Bkg[i].hbm,sizeof(BITMAP),(LPVOID)&Bkg[i].bm); }
方块种类
绿色方块: Green.hbm=LoadBitmap(hinstance,\"GREEN\"); Green.chm=LoadBitmap(hinstance,\"CGREEN\"); GetObject(Green.hbm,sizeof(BITMAP),(LPVOID)&Green.bm); 蓝色方块: Blue.hbm=LoadBitmap(hinstance,\"BLUE\"); Blue.chm=LoadBitmap(hinstance,\"CBLUE\"); GetObject(Blue.hbm,sizeof(BITMAP),(LPVOID)&Blue.bm); 灰色方块: Gray.hbm=LoadBitmap(hinstance,\"GRAY\"); Gray.chm=LoadBitmap(hinstance,\"CGRAY\"); GetObject(Gray.hbm,sizeof(BITMAP),(LPVOID)&Gray.bm); 白色方块: White.hbm=LoadBitmap(hinstance,\"WHITE\"); White.chm=LoadBitmap(hinstance,\"CWHITE\"); GetObject(White.hbm,sizeof(BITMAP),(LPVOID)&White.bm); 脆弱方块: for(i=0;i<4;i++) { sprintf(s,\"BROWN%d\
- 5 -
Brown[i].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CBROWN%d\ Brown[i].chm=LoadBitmap(hinstance,s); GetObject(Brown[i].hbm,sizeof(BITMAP),(LPVOID)&Brown[i].bm); }
时限方块: for(i=0;i<8;i++) { sprintf(s,\"TIME%d\ Time[i].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CTIME%d\ Time[i].chm=LoadBitmap(hinstance,s); GetObject(Time[i].hbm,sizeof(BITMAP),(LPVOID)&Time[i].bm); }
主角
for(i=0;i<5;i++) for(j=0;j<2;j++) { sprintf(s,\"DUCK%d%d\ Duck[i][j].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CDUCK%d%d\ Duck[i][j].chm=LoadBitmap(hinstance,s); GetObject(Duck[i][j].hbm,sizeof(BITMAP),(LPVOID)&Duck[i][j].bm); }
Attack.hbm=LoadBitmap(hinstance,\"ATTACK\"); Attack.chm=LoadBitmap(hinstance,\"CATTACK\");
GetObject(Attack.hbm,sizeof(BITMAP),(LPVOID)&Attack.bm); Bullet.hbm=LoadBitmap(hinstance,\"BULLET\"); Bullet.chm=LoadBitmap(hinstance,\"CBULLET\");
GetObject(Bullet.hbm,sizeof(BITMAP),(LPVOID)&Bullet.bm);
道具
for(i=0;i<5;i++) { sprintf(s,\"TPROP%d\ Prop_take[i].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CTPROP%d\ Prop_take[i].chm=LoadBitmap(hinstance,s); GetObject(Prop_take[i].hbm,sizeof(BITMAP),(LPVOID)&Prop_take[i].bm);
if(i==4)
- 6 -
break; j=i%2; k=i/2;
sprintf(s,\"HPROP%d%d\
Prop_help[k][j].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CHPROP%d%d\
Prop_help[k][j].chm=LoadBitmap(hinstance,s);
GetObject(Prop_help[k][j].hbm,sizeof(BITMAP),(LPVOID)&Prop_help[k][j].bm);
}
怪兽
for(i=0;i<7;i++) { sprintf(s,\"MONSTER%d\ Monster[i].hbm=LoadBitmap(hinstance,s); sprintf(s,\"CMONSTER%d\ Monster[i].chm=LoadBitmap(hinstance,s); GetObject(Monster[i].hbm,sizeof(BITMAP),(LPVOID)&Monster[i].bm);
}
快速向上飞行时背景拉动的处理代码
if(duck.time) { k=duck.v0; for(i=0;i 跳动时背景拉动的处理代码 if(BKmove) { for(i=0;i - 8 - Bn--; i--; } } for(i=0;i } 子弹运动代码 for(i=0;i - 9 - Ln--; i--; } } 砖块产生代码段 if(Num) p.y=H; else p.y=500; k=Score/6000+4; if(k>25) k=25; while(p.y>=40) { p.x=50; h=1; while(p.x<=370) { for(i=0;i - 10 - } } mstr[Mn].pt=p; mstr[Mn].kind=1; mstr[Mn].life=1; Mn++; break; 玩家移动代码段 if(life) { if(duck.v1<30&&duck.v1>-30) duck.v1+=duck.a1; duck.pt.x+=duck.v1; if(duck.pt.x<20) duck.pt.x=390; else if(duck.pt.x>390) duck.pt.x=20; } if(life&&duck.v0<=0) { if(duck.v0==0) { Score+=level-duck.pt.y; level=duck.pt.y; for(i=0;i mstr[j]=mstr[j+1]; Mn--; break; } } k=-1; if(i==-1) { for(k=Num-1;k>=0;k--) if(duck.pt.x>=block[k].pt.x-50&&duck.pt.x<=block[k].pt.x+45&&duck.pt.y+85<=block[k].pt.y+7&&duck.pt.y-duck.v0+85>=block[k].pt.y) { duck.pt.y=block[k].pt.y-85; break; } } if(i==-1&&k==-1) { duck.pt.y-=duck.v0; duck.v0-=duck.a0; } else if(k!=-1) { switch(block[k].kind) { case 0: case 1: case 2: if(block[k].prop&&block[k].prop<=2&&duck.pt.x>=block[k].pt.x-30&&duck.pt.x<=block[k].pt.x+20) { block[k].b=1; duck.time=6-block[k].prop; duck.v0=50; } else duck.v0=40; break; case 4: duck.v0=40; break; case 3: - 12 - duck.v0=40; for(j=k;j if(duck.pt.y>=600) life=0; 画子弹 SelectObject(hdcm,Bullet.chm); BitBlt(hdcmem,bt[i].pt.x,bt[i].pt.y,Bullet.bm.bmWidth,Bullet.bm.bmHeight,hdcm,0,0,SRCAND); SelectObject(hdcm,Bullet.hbm); BitBlt(hdcmem,bt[i].pt.x,bt[i].pt.y,Bullet.bm.bmWidth,Bullet.bm.bmHeight,hdcm,0,0,SRCPAINT 游戏主窗口 游戏主窗口 - 13 - - 14 - 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务