作为一种由如数据类型、命令符等人自己创造的各种规定的集合,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

#include

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

cout<

for(j=0;j

cout<

cout<

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<

for j from 1 to x

cout<

cout<< ‘o’<

wait for a minute

伪代码的作用是描述算法,不考虑实现所有细节,只考虑部分细节,所以出现了“wait for a

minute”“清屏”等语句。同时因为大家在学C++,所以用了些C++中的语句来表意,如输出换行用“cout<

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

弹跳小球算法

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

程序的流程图如下:

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

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

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

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<

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<

else cout<

更新的流程图如下:

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

updateWithoutInput()

if(ballY=high-1)

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

ballNumber++ //击中挡板

else cout<

<

按一下键

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++Dos游戏设计——弹跳小球相关推荐

  1. C语言程序设计学习笔记:P1-程序设计与C语言

    本系列博客用于记录学习浙江大学翁恺老师的C语言程序设计,系列笔记链接如下: C语言程序设计学习笔记:P1-程序设计与C语言 C语言程序设计学习笔记:P2-计算 C语言程序设计学习笔记:P3-判断 C语 ...

  2. c语言程序设计 猜数字,猜数字游戏c语言编程,c语言编程 编一个猜数字游戏

    c语言编程 编一个猜数字游戏 #include #include #include #include void main()/*主函数*/ { int a,b,times=0,i,j,guess=0, ...

  3. 电子英汉词典c语言程序设计报告,英汉电子词典设计报告_设计_C语言_C语言程序设计.doc...

    英汉电子词典设计报告_设计_C语言_C语言程序设计 课程设计 课程名称 :C语言程序课程设计 题目名称 :电子英汉词典 学生学院 :电气信息学院 专业班级 :自动化1101 学 号 :20110102 ...

  4. c语言图形学彩球上浮,计算机图形学程设计 弹跳的彩球动画.doc

    计算机图形学程设计 弹跳的彩球动画 课程设计任务书 题目: 弹跳的彩球动画 课程设计任务书及成绩评定 课程设计的内容和具体要求 1.设计内容: 弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦 ...

  5. c语言图形学彩球上浮,计算机图形学课程设计--- 弹跳的彩球动画.doc

    课程设计任务书及成绩评定 课程设计的内容和具体要求 1.设计内容: 弹跳的球体:一个着色的三维球体,沿着一条给定的轨道(正弦衰弱曲线)不断弹跳并同时翻滚,要求按ESC停止转动翻滚按↑加快弹跳速度,按↓ ...

  6. 汉诺塔游戏c 语言程序,〖C语言程序设计〗汉诺塔游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序执行 当输入10时(搬十个盘子) Input the munber of diskes: 10 The step to moving 10 diske ...

  7. 河内塔c语言编程,〖C语言程序设计〗汉诺塔游戏

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 程序执行 当输入10时(搬十个盘子) Input the munber of diskes: 10 The step to moving 10 diske ...

  8. 使用C语言gtk编程一个贪吃蛇游戏设计与实现

    使用C语言以及gtk编程设计一个贪吃蛇游戏. 功能需求: (1)窗口界面设计:创建各种窗口和按钮标签等: (2)小蛇移动控制:按键盘上的上下左右键控制小蛇上下左右移动: (3)游戏进程控制:若小蛇碰到 ...

  9. 酷跑游戏C语言,毕业设计(论文)-跑酷游戏设计(源程序).doc

    重庆理工大学毕业设计论文跑酷游戏 毕业设计(论文) 题目 跑酷游戏 二级学院 计算机科学与工程 专 业 软件工程 班 级 学生姓名 学号 指导教师 职称 时 间 2014.5.20 目 录 TOC \ ...

  10. 数据结构c语言程序设计报告,数据结构与算法课程设计报告模版.doc

    数据结构与算法课程设计报告模版.doc 数据结构与算法课程设计报告题 目本科生导师制问题与家族关系查询系统院 (系) 信息科学与工程 专业班级 计算机应用技术1301班 学生姓名 顾 泉 学 号 20 ...

最新文章

  1. zabbix 乱码的问题
  2. linux摄像头 sdl,Linux音视频(SDL与YUV)
  3. mac 下搭建 php + apache + mysql 服务器(cool)
  4. 容器退出时我丢失了数据
  5. python迅雷远程下载页面_【教程】Chrome浏览器添加迅雷下载支持
  6. 万亿级日志与行为数据存储查询技术剖析——Hbase系预聚合方案、Dremel系parquet列存储、预聚合系、Lucene系...
  7. 客户端突如其来的“白屏”等待该如何解决?
  8. 更改android模拟器sdcard文件夹的权限
  9. xuggler 中文开发_Xuggler开发教程
  10. jQuery的name选择器 模糊匹配
  11. 一个WordPress站点绑定多个域名
  12. 物体检测的过去、现在和未来
  13. 查看Linux下端口占用情况的命令
  14. Windows10 热点(WIFI)配置教程
  15. Mac OSX Android 开发环境 模拟器报错
  16. nginx http重定向https 无效_Golang设置https访问,以及http如何重定向到https
  17. 详细解说Java 技术的新纪元
  18. Matlab数据拟合-----使用polyfit 和polyval函数
  19. python实现——视频转桌面壁纸
  20. 微型计算机原理与接口技术第三版答案

热门文章

  1. python怎么检查页面边距_Matplotlib页边距
  2. Latex --- 加三级子标题,解决没有编号问题(已解决)(加头文件即可)
  3. 机器学习sklearn-逻辑回归
  4. Android ProfileOwner 应用的能力
  5. 交通信号管理服务器,矿下交通信号控制系统
  6. 花花公子推荐伤感qq日志:乖不哭,我拜你
  7. IDEA如何新建一个source folder
  8. win10查询计算机显卡,windows10系统电脑查看显卡型号的两种方法
  9. html爱心特效代码教程
  10. 怎样在oblog中添加音乐播放器