更多课程 选择中心

C/C++培训
达内IT学院

400-996-5531

C++Dos游戏设计——弹跳小球

  • 发布:C++培训
  • 来源:资料库
  • 时间:2017-10-10 13:58

作为一种由如数据类型、命令符等人自己创造的各种规定的集合,C++像法律。用C++编程像是运用法律。学习C++语法像背法律,好像很枯燥。当学完语法开始上机后,初学者练习C++编程通常又是做各种计算题,总觉更加枯燥。为了让学习C++入门语法的过程有趣一些,在此介绍C++Dos游戏设计,希望在写游戏代码的过程中学习C++能让入门者的学习更加开心。

这次带来的项目是弹跳小球,其游戏规则是:小球在墙壁间运动,若碰到墙壁或挡板则反弹,击中砖块可得分。玩家控制一个挡板,如果小球越过挡板,游戏结束。

本文将以循序渐进的方法引导读者完成项目。先实现一个会跳的小球,关于控制挡板、计分、画墙壁等内容将在以后发布。对于所需语法知识的学习请多查阅课本。制作本项目前所需知识:集成开发环境CodeBlock的初步用法(如新建项目、调试)

1、 显示一个静止的小球

所需语法知识:标识符、变量、常量、运算符与表达式、cout、for语句的用法。

目的:在控制台的第5行第10个字符位画出小球“o”。

思路:先输出4个换行符,再输出9个空格,再输出“o”,最后输出换行符(为什么?)。

代码:自己想。。。。。。

2、 显示一个下落的小球

所需语法知识:1所需的、清屏函数

清屏函数:实现清屏功能,包含在头文件stdlib.h下,使用时写下语句system(“cls”)即可。

目的:让一个小球从控制台的第10个字符位,从第1行掉到第9行。

思路:先清屏后重画,在每次重画前让小球出现行数加1。

#include <iostream>

#include <stdlib.h>

using namespace std;

int main()

{

int y,x = 5;

int high = 20;

int i,j;

for(y=1;y<10;y++)//从第1行掉到第9行

{

system("cls");

for(i=0;i<y;i++)

cout<<endl;//输出到球那一行之前的行

for(j=0;j<x-1;j++)

cout<<' ';//输出空格

cout<<'o'<<endl; //输出一颗球

while(i<10000000) //减慢速度

i++;

}

return 0;

}

3、 显示一个上下弹跳的小球

所需语法知识:2所需的

目的:让一个小球在控制台的第10个字符位的第1行到第9行间来回移动。

思路:先清屏后重画。在每次重画前,计算小球位置。若小球下落,在每次重画前让小球出现行数加1;若小球上升,在每次重画前让小球出现行数减1。

4、 显示一个斜着弹跳的小球

所需语法知识:2所需的

目的:让一个小球在一定的区域内来回移动,当小球到达一个矩形边界后反弹。

思路:先清屏后重画。在每次重画前,计算小球位置。将斜向运动分解为横向运动和纵向运动,由3可类比出计算原理。

以上便在控制台实现一个会跳的小球。3、4及完整版的代码可以在百度网盘上下载:https://pan.baidu.com/s/1dE7OKal

5、用函数重构程序

所需语法知识:函数

目的:用函数进行逻辑模块化

思路:将main函数改为

int main()

{

startup();

while(1)

{

show();

updateWithoutInput();

updateWithInput();

}

return 0;

}

现在正式开始介绍游戏算法。描述算法的方式是程序框图和伪代码。程序框图高中已经学习,因此先介绍伪代码。

伪代码

伪代码是程序框图与实际代码的中间体,它有类似代码的格式,但为了方便不会按如C++的具体语言的语法来组织。如上篇的2就可以写成下列的伪代码。

x=10,y=1

for y from 1 to y

清屏 //用缩进表示循环体

for I from 1 to y

cout<<endl

for j from 1 to x

cout<<‘ ‘

cout<< ‘o’<<endl

wait for a minute

伪代码的作用是描述算法,不考虑实现所有细节,只考虑部分细节,所以出现了“wait for a minute”“清屏”等语句。同时因为大家在学C++,所以用了些C++中的语句来表意,如输出换行用“cout<<endl”而不用C语言里的“printf("\n")”

一言蔽之,伪代码写得别人看得懂,能表述自己的算法就行了。

弹跳小球算法

我们的任务是在控制台的某个位置输出已决定的字符,然后从整体上看起来是个游戏的画图及决定输出字符的位置,使画的图能按照游戏规则与玩家交互。

程序的流程图如下:

程序开始先定义些参数,如游戏区域、球、砖头、挡板的位置、球的速度、分数、击球数。然后便进入画图和更新的循环,如果满足游戏失败条件则结束程序。我们的游戏计算机并不理解,它只是一个能进行逻辑运算和四则运算的计算器而已。要在计算机上实现游戏程序,必然是把游戏转换成计算题去实现。

下面介绍定位及更新的原理。定位用的是坐标法思想,即通过数对确定球、挡板、砖头等各个对象的位置等参数。

程序开始后的初始化过程如果用伪代码来表示,即是:

Startup()

ballX=5,ballY=10 球的初始位置

ballvx=1,ballvy=1 速度,分运动思想

high=20,width=25 游戏区域

score=0 分数

ballNumber=0 击球数

blockX=10,blockY=1 砖块的位置

positionX=width/2,positionY=high

ridus=5

left=positionX-ridus

right=positionX+ridus 挡板

画图的原理如下,其方法是一行一行扫描。

Show()

清屏

for I from 1 to high+1

for j from 1 to width

If(i=ballX&&j=ballY)

cout<<’o’

else if(I=width)

cout<<’|’

else if(j=high+1)

cout<<’_’

else if(i=positionY&&

j>=left&&

j<=right)

cout<<’*’

else if(i=blockY&&

j=blockX)

cout<<'B'

else cout<<' '

更新的流程图如下:

更新可分为与玩家输入无关的更新及与玩家输入有关的更新,若用伪代码表示,即是:

updateWithoutInput()

if(ballY=high-1)

if (ballX>=left&&ballX<=right)

ballNumber++ //击中挡板

else cout<<”GameOver”

<<endl

按一下键

exit

if(ballX=blockX&&ballY=blockY)

score++ //击中砖块

blockX=0~width-1的随机数

ballX +=ballvx //球移动

ballY+=ballvy

if(ballX =0||ballX=width-1)

ballvx = -ballvx 球反弹

if(ballY=0||ballY=high-1)

ballvy=-ballvy

wait for a minute 降低难度

下面介绍有输入的更新

updateWithInput()

if(按键)

input=按键

if (input=”a”)

positionX-- 向左移动挡板

left=positionX-ridus

right=positionX+ridus

if(input=’d’) 向右移动挡板

positionX++

left=positionX-ridus

right=positionX+ridus

至此项目结束,可能对于初学者来说这个项目有点难。但是这包括了程序设计的大部分:先是设计算法,即用流程图初步表示算法,然后用伪代码描述算法细节。后是实现算法,即用具体的编程语言来实现算法。后续的项目还有飞机大战、flappy bird、贪吃蛇。做完这些项目,再写写计算题,这么水的C++课想不考好,依我看,有点难。

预约申请免费试听课

填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!

上一篇:C++中引用(&)的用法和应用实例
下一篇:教你如何养成良好的C++开发代码风格

超全的C语言标识符知识

C指针——指针类型转换

C指针——指针和结构类型的关系

C指针——数组和指针的关系

Copyright © 2023 Tedu.cn All Rights Reserved 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有

选择城市和中心
黑龙江省

吉林省

河北省

湖南省

贵州省

云南省

广西省

海南省