C++实现简易反弹小球游戏的示例代码
作者:畅游星辰大海 发布时间:2023-06-15 08:18:50
标签:C++,反弹小球,游戏
前言
我们利用printf 函数实现一个在屏幕上弹跳的小球,如图所示。弹跳的小球游戏比较简单、容易入门,也是反弹球消砖块、接金币、台球等很多游戏的基础。
完成游戏前需要掌握的语法知识:标识符、变量、常量、运算符与表达式,以及 printf、scanf、if-else、while、for 语句的用法。
正文部分我们会逐步进行讲解,前一部分是后一部分的基础,大家不要跳过阅读。
一、显示静止的小球
首先利用 printf 函数在屏幕坐标(x,y)处显示一个静止的小球字符'o',注意屏幕坐标系的原点在左上角,如图
#include<stdio.h>
int main()
{
int i,j;
int x=5;
int y=10;
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o");//输出小球
printf("\n");
return 0;
}
二、小球下落
改变小球的坐标变量,即让小球的i坐标增加,从而让小球下落。在每次显示之前使用了清屏函数system("cls"),注意需要包含新的头文件#include<stdlib.h>。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=1;
int y=10;
for(x=1;x<10;i++)
{
system("cls");//清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");
printf("o");//输出小球
printf("\n");
return 0;
}
return 0;
}
三、上下弹跳的小球
在上一步代码的基础上增加记录速度的变量 velocity,小球的新位置x=旧位置x+速度velocity。当判断小球到达上、下边界时改变方向,即改变velocity 的正负号。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=5;
int y=10;
int height=20;
int velocity=1;
while(1)
{
x=x+velocity;
system("cls");// 清屏函数
//输出小球上面的空行
for(i=0;i<x;i++)
printf("\n");
//输出小球左边的空格
for(j=0;j<y;j++)
printf(" ");//输出小球
printf("o");
printf("\n");
if(x==height)
velocity=-velocity;
if(x==0)
velocity=-velocity;
}
return 0;
}
四、斜着弹跳的小球
下面让程序更有趣,使小球斜着弹跳,主要思路是增加x、y两个方向的速度控制变量velocity_x、velocity_y,初值为1;velocity_x碰到上、下边界后改变正负号,velocity_y碰到左、右边界后改变正负号。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j;
int x=0;
int y=5;
int velocity_x=1;
int velocity_y=1;
int left=0;
int right=20;
int top=0;
int bottom=10;
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");
//
for(i=0;i<x;i++)
printf("\n");
//
for(j=0;j<y;j++)
printf(" ");
printf("o");
printf("\n");
if(x==top||x==bottom)
velocity_x=-velocity_x;
if(y==left||y==right)
velocity_y=-velocity_y;
}
return 0;
}
五、控制小球弹跳的速度
以上反弹球的速度可能过快,为了降低反弹球的速度,以使用Sleep 函数(#include<windows.h>)。比如 sleep(10)表示程序执行到此处暂停 10ms,从而控制小球弹跳的速度。
六、完整代码
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
int i,j;
int x=0;
int y=5;
int velocity_x=1;
int velocity_y=1;
int left=0;
int right=20;
int top=0;
int bottom=10;
while(1)
{
x=x+velocity_x;
y=y+velocity_y;
system("cls");
//
for(i=0;i<x;i++)
printf("\n");
//
for(j=0;j<y;j++)
printf(" ");
printf("o");
printf("\n");
Sleep(10);
if(x==top||x==bottom)
velocity_x=-velocity_x;
if(y==left||y==right)
velocity_y=-velocity_y;
}
return 0;
}
来源:https://blog.csdn.net/m0_73222051/article/details/127188725


猜你喜欢
- 先来看一个很简单的核心图片缩放方法:public static Bitmap scale(Bitmap bitmap, float scal
- springboot引入外部yml配置文件当需要在springboot中引用其他的yml文件时,需要在application.yml里配置s
- 本文实例讲述了C#装箱和拆箱操作。分享给大家供大家参考,具体如下:1. C#中的装箱C#中的装箱就是把一个值类型隐式地转换为object类型
- 1、Hutool工具简介HuTool工具(糊涂工具),第三方插件工具,简化操作,是国产的一个产品,界面简洁易懂,比较人性化。(上班可能经常用
- SpringBoot对actuator进行关闭management: endpoint: health
- 在Android studio实现简易计算器App并实现加减乘除功能,供大家参考,具体内容如下结果activity_main.xml<
- java Lock接口java.util.concurrent.locks接口Lockpublic interface Loce
- 在jdk文档中对RandomAccess接口的定义如下: public interface RandomAccess下面是jdk
- Kotlin 封装万能SharedPreferences存取任何类型详解/** * author: smart * time: 2016/1
- 一、@RequestMapping@RequestMapping注解的源码:@Target({ElementType.TYPE, Eleme
- 多文件上传就是改良一个方法把MultipartFile类换成CommonsMultipartFile类,因为上传多个文件用数组方式的话Mul
- 本篇内容主要讲述了实现基于微软账户的第三方身份验证、实现双因子身份验证、 验证码机制这3个内容。实现基于微软账户的第三方身份验证在
- 开篇:我们将前面的springboot整合H2内存数据库,实现单元测试与数据库无关性提供的Restful服务注册到spring cloud的
- 前言:在Java8支持Lambda表达式以后,为了满足Lambda表达式的一些典型使用场景,JDK为我们提供了大量常用的函数式接口。它们主要
- 本文实例讲述了C#实现的字符串转MD5码函数。分享给大家供大家参考,具体如下:/*测试环境:WinXP SP3、Visual Studio
- 实例如下:static bool CheckPowerOfTwo(ulong num){ return num > 0 &
- 在阎宏博士的《JAVA与模式》一书中开头是这样描述责任链(Chain of Responsibility)模式的:责任链模式是一种对象的行为
- startActivityForResult与startActivity的不同之处在于:1、startActivity( )仅仅是跳转到目标
- SqlSessionFactory的openSession方法正如其名,Sqlsession对应着一次数据库会话。由于数据库回话不是永久的,
- 本文实例为大家分享了java实现多个文件压缩的具体代码,供大家参考,具体内容如下需要用到的ant.jarpackage util;impor