C语言——弹跳小球

目录

一、弹跳小球介绍

二、弹跳小球的代码

三、弹跳小球代码的解析

1、我们需要一个小球(大写的 'O')

2、在一个指定的位置将小球 'O' 打印出来

3、弹跳小球的重点当然是弹跳二字了,我们来实现小球的弹跳

清屏函数system("cls")

4、让小球在指定范围内跳动

5、用 scanf() 来输入小球的初始位置和跳动范围

scanf(“输入控制符”, 输入参数);

四、总结


一、弹跳小球介绍

其实也没有什么可介绍的,就是一个小球(用大写的 'O' 代替)在一定区域内反复横跳。

二、弹跳小球的代码

这里我先把代码放出来:(运行效果的话就自己试试了)

#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i, j;

    // 小球的初始位置
    int x, y;
    printf("输入小球的初始位置(行 列):");
    scanf("%d%d", &x, &y);

    // 小球的跳动边界
    int top, bottom, left, right;
    printf("输入小球的跳动范围(上 下 左 右):");
    scanf("%d%d%d%d", &top, &bottom, &left, &right);

    // 小球的跳动速度
    int speed_x, speed_y;
    printf("输入小球的跳动速度(横向 纵向):");
    scanf("%d%d", &speed_x, &speed_y);

    // 小球跳动
    while (1)
    {
        // 判断小球是否到达边界
        if (y > bottom || y < top)
        {
            speed_y = -speed_y;
        }
        if (x < left || x > right)
        {
            speed_x = -speed_x;
        }

        // 小球的跳动
        x -= speed_x;
        y -= speed_y;

        // 清除上一个小球,防止出现重影
        system("cls");

        // 小球的具体位置
        for (j = 0; j < y; j++)
        {
            printf("\n");
        }
        for (i = 0; i < x; i++)
        {
            printf(" ");
        }
        printf("O\n");
    }

    return 0;
}

三、弹跳小球代码的解析

接下来我会对这段代码一一解析。

1、我们需要一个小球(大写的 'O')

printf("O\n");

2、在一个指定的位置将小球 'O' 打印出来

这里我让行 Y 和列 X 都为10

    int x = 10;
    int y = 10;

 接下来就是打印小球了

        首先我们将光标移动到需要打印的行 (利用 for 循环以及换行符 '\n')

            for (j = 0; j < y; j++)
            {
                printf("\n");
            }

        接着我们将光标到小球需要打印的位置之间用 "空格" 占掉,以此来达到将小球打印在指定的列而前面不出现别的东西,然后打印小球。

            for (i = 0; i < x; i++)
            {
                printf(" ");
            }

            printf("O\n");

3、弹跳小球的重点当然是弹跳二字了,我们来实现小球的弹跳

        先来向上跳一行(将原来用来表示小球在第几行的变量 Y - 1 来表示弹跳一行后的小球在第几行)

        y--;
        for (j = 0; j < y; j++)
        {
            printf("\n");
        }

        for (i = 0; i < x; i++)
        {
            printf(" ");
        }

        printf("O\n");

这样我们就让小球向上跳了一行。 

        接下来我们就让小球持续的向上跳一行(使用 while(1) 死循环来让小球向上跳)

    while (1)
    {
        y--;
        for (j = 0; j < y; j++)
        {
            printf("\n");
        }

        for (i = 0; i < x; i++)
        {
            printf(" ");
        }

        printf("O\n");
    }

当我们运行后会发现,我们得到了一列小球。这个时候我们就需要用到  system("cls");  了

清屏函数system("cls")

  • 该函数使用时需要添加stdlib.h函数库,即添加#include <stdlib.h>。
  • 作用:该函数可以在清空画面。

我们添加这个函数 

    while (1)
    {
        system("cls");
        y--;
        for (j = 0; j < y; j++)
        {
            printf("\n");
        }

        for (i = 0; i < x; i++)
        {
            printf(" ");
        }

        printf("O\n");
    }

这样我们就看到小球向上移动了。但是我们又发现一个问题,就是小球直接没了。这个时候我们就要让小球跳回来了。

4、让小球在指定范围内跳动

        我们先要设置小球到哪会跳回来(我设置的是 top = 1)

int top = 1;

        然后我们用 if 来判断小球有没有到我们设置的位置 (有的话就让小球向下跳 y++)

        if (y < top)
        {
            y++;
        }

同理我们可以定义小球的下边界(bottom),左边界(left),右边界(right)。

    int top = 1;
    int bottom = 10;

    int left = 0;
    int right = 50;

这样我们就可以让小球在一定范围内跳动。

当然我们也可以定义小球的跳动速度(速度就自己定了)

    int speed_x = 1;
    int speed_y = 1;

同时也可以让小球在指定的范围内更好地更改跳动方向(只需添加 '-' 就可以了)

        //判断小球是否到达边界
        if (y > bottom || y < top)
        {
            speed_y = -speed_y;
        }
        if (x < left || x > right)
        {
            speed_x = -speed_x;
        }

判断小球是否到达边界,到达后只需将跳动的增加量改为负数就可以了

好了弹跳小球就到这里结束了(这个时候就可以看到小球在我们规定的范围内反复横跳了) 

5、用 scanf() 来输入小球的初始位置和跳动范围

scanf(“输入控制符”, 输入参数);

        功能:将从键盘输入的字符转化为“输入控制符”所规定格式的数据,然后存入以输入参数的值为地址的变量中。

    // 小球的初始位置
    int x, y;
    printf("输入小球的初始位置(行 列):");
    scanf("%d%d", &x, &y);

    // 小球的跳动边界
    int top, bottom, left, right;
    printf("输入小球的跳动范围(上 下 左 右):");
    scanf("%d%d%d%d", &top, &bottom, &left, &right);

    // 小球的跳动速度
    int speed_x, speed_y;
    printf("输入小球的跳动速度(横向 纵向):");
    scanf("%d%d", &speed_x, &speed_y);

四、总结

我们用到了基本的输入函数scanf,输出函数printf,for循环,while循环,if语句,还有清屏函数system("cls");

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!关于c语言编写斜着弹跳的小,可以按照以下步骤进行: 1. 定义小的初始位置、速度和加速度等参数。 2. 使用while循环模拟小的运动轨迹,每隔一段时间更新小的位置和速度。 3. 判断小是否落地,若未落地则继续运动,否则结束循环。 4. 在更新小位置时,需要考虑小的弹性碰撞,即小碰到地面或墙壁时会反弹,反弹后速度方向会发生改变。 下面是一个简单的示例代码,供参考: ```c #include <stdio.h> #include <stdlib.h> #define GRAVITY 9.8 // 重力加速度 #define BOUNCE_FACTOR 0.8 // 弹性系数 int main() { double x = 0, y = 0; // 小初始位置 double vx = 10, vy = 0; // 小初始速度 double ax = 0, ay = GRAVITY; // 小加速度 double dt = 0.01; // 时间步长 double t = 0; // 时间 double ground = 0; // 地面高度 double wall = 100; // 墙壁位置 while (1) { // 计算小新位置 x += vx * dt; y += vy * dt + 0.5 * ay * dt * dt; // 判断小是否碰到墙壁 if (x >= wall) { x = wall; vx = -vx * BOUNCE_FACTOR; } // 判断小是否碰到地面 if (y <= ground) { y = ground; vy = -vy * BOUNCE_FACTOR; } // 计算小新速度 vx += ax * dt; vy += ay * dt; // 更新时间 t += dt; // 输出小位置和时间 printf("time: %.2f, x: %.2f, y: %.2f\n", t, x, y); // 判断小是否落地,若落地则结束循环 if (y == ground && vy < 0) { break; } } return 0; } ``` 希望能够帮助到您!如果还有其他问题,请随时提出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开朗碳基生物

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值