C++实现简易反弹小球游戏的示例代码

 更新时间:2022年10月10日 11:40:08   作者:畅游星辰大海  
我们利用printf 函数实现一个在屏幕上弹跳的小球。弹跳的小球游戏比较简单、容易入门,也是反弹球消砖块、接金币、台球等很多游戏的基础,感兴趣的可以了解一下

前言

我们利用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;
 }

以上就是C++实现简易反弹小球游戏的示例代码的详细内容,更多关于C++反弹小球游戏的资料请关注脚本之家其它相关文章!

相关文章

  • C++栈(stack)的模板类实现代码

    C++栈(stack)的模板类实现代码

    这篇文章主要为大家详细介绍了C++栈(stack)的模板类实现代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • VS2019调试C语言程序(监视操作)的详细步骤

    VS2019调试C语言程序(监视操作)的详细步骤

    在很多时候我们在写程序的过程中会发现一些非编程错误的问题,这样的问题很难直接分辨出来,但是我们可以用调试了一步一步的模拟程序运行的过程,来找出程序的错误,下面这篇文章主要给大家介绍了关于VS2019调试C语言程序(监视操作)的详细步骤,需要的朋友可以参考下
    2022-11-11
  • Linux环境g++编译GDAL动态库操作方法

    Linux环境g++编译GDAL动态库操作方法

    下面小编就为大家带来一篇Linux环境g++编译GDAL动态库操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • C/C++ 实现动态资源文件释放的方法

    C/C++ 实现动态资源文件释放的方法

    当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况。资源可以包括图标、位图、字符串等,它们以二进制形式嵌入到可执行文件中,这篇文章主要介绍了C/C++ 实现动态资源文件释放,需要的朋友可以参考下
    2023-12-12
  • 浅析内存对齐与ANSI C中struct型数据的内存布局

    浅析内存对齐与ANSI C中struct型数据的内存布局

    当在C中定义了一个结构类型时,它的大小是否等于各字段(field)大小之和?编译器将如何在内存中放置这些字段?ANSI C对结构体的内存布局有什么要求?而我们的程序又能否依赖这种布局
    2013-09-09
  • 使用C++和Crypto++库实现AES加密与解密

    使用C++和Crypto++库实现AES加密与解密

    在这篇博客中,我们将深入探讨如何利用C++和Crypto++库实现高效且安全的AES加密与解密机制,Crypto++是一款高度认可的免费C++类库,文中通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-01-01
  • C++实现LeetCode(647.回文子字符串)

    C++实现LeetCode(647.回文子字符串)

    这篇文章主要介绍了C++实现LeetCode(647.回文子字符串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言 操作符#与##使用方法详解

    C语言 操作符#与##使用方法详解

    在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把记号转换成字符串。##相当于连接符,它会将两边的内容连接起来,形成新的标识符,下面请看详细的教程
    2022-04-04
  • C语言的空类型指针,空指针,野指针详解

    C语言的空类型指针,空指针,野指针详解

    这篇文章主要介绍了C语言的空类型指针,空指针,野指针的详解及用法示例,介绍了其相关概念,然后分享了几种用法,具有一定参考价值。需要的朋友可以了解下。
    2021-09-09
  • 在VC中隐藏控制台程序窗口的实现代码

    在VC中隐藏控制台程序窗口的实现代码

    大家都知道,当编写一个win32 console application时,当运行此类程序的时候默认情况下会有一个类似dos窗口的console窗口,但是有的时候我们只想在程序中运行一段功能代码,不希望显示这个console窗口,让代码执行完毕之后程序自动退出
    2013-04-04

最新评论