C++编写的小程序,将字符图像作为宇宙天体在控制台中动态绘制

这篇具有很好参考价值的文章主要介绍了C++编写的小程序,将字符图像作为宇宙天体在控制台中动态绘制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下是一个使用C++编写的简单示例代码,将字符图像作为宇宙天体在控制台中动态绘制:

#include <iostream>
#include <vector>
#include <cmath>
#include <cstdlib>
#include <ctime>

const int SCREEN_WIDTH = 80;
const int SCREEN_HEIGHT = 24;
const int NUM_STARS = 100;

struct Body {
    double x, y;   // 位置
    double vx, vy; // 速度
    char character; // 字符
};

void updateVelocity(Body& body) {
    // 在范围[-1, 1)内生成随机速度分量
    body.vx += (2.0 * rand() / RAND_MAX) - 1.0;
    body.vy += (2.0 * rand() / RAND_MAX) - 1.0;

    // 限制速度范围在[-1, 1)
    body.vx = std::min(std::max(body.vx, -1.0), 1.0);
    body.vy = std::min(std::max(body.vy, -1.0), 1.0);
}

void updatePosition(Body& body) {
    body.x += body.vx;
    body.y += body.vy;

    // 边界处理
    if (body.x < 0) body.x = SCREEN_WIDTH - 1;
    else if (body.x >= SCREEN_WIDTH) body.x = 0;

    if (body.y < 0) body.y = SCREEN_HEIGHT - 1;
    else if (body.y >= SCREEN_HEIGHT) body.y = 0;
}

void initializeStars(std::vector<Body>& stars) {
    // 随机生成星星的位置和字符
    for (int i = 0; i < NUM_STARS; ++i) {
        Body star;
        star.x = rand() % SCREEN_WIDTH;
        star.y = rand() % SCREEN_HEIGHT;
        star.character = '*';
        updateVelocity(star);
        stars.push_back(star);
    }
}

void clearScreen() {
    // 清除控制台屏幕
    std::cout << "\033[2J";
}

void moveCursorToHome() {
    // 移动控制台光标到起始位置
    std::cout << "\033[H";
}

void drawFrame(const std::vector<Body>& bodies) {
    // 清除屏幕并绘制字符图像
    clearScreen();
    moveCursorToHome();

    std::vector<std::vector<char>> frame(SCREEN_HEIGHT, std::vector<char>(SCREEN_WIDTH, ' '));

    for (const auto& body : bodies) {
        int x = std::round(body.x);
        int y = std::round(body.y);

        if (x >= 0 && x < SCREEN_WIDTH && y >= 0 && y < SCREEN_HEIGHT) {
            frame[y][x] = body.character;
        }
    }

    for (int y = 0; y < SCREEN_HEIGHT; ++y) {
        for (int x = 0; x < SCREEN_WIDTH; ++x) {
            std::cout << frame[y][x];
        }

        std::cout << '\n';
    }

    std::cout.flush();
}

int main() {
    std::srand(std::time(nullptr));

    std::vector<Body> stars;
    initializeStars(stars);

    while (true) {
        for (auto& star : stars) {
            updatePosition(star);
            updateVelocity(star);
        }

        drawFrame(stars);
    }

    return 0;
}

这段代码创建了一个 Body 结构体,其中包含了字符天体的位置坐标、速度、以及对应的字符。代码的主要部分是在 drawFrame 函数中,它根据字符天体的坐标绘制字符图像,并将字符图像输出到控制台中。通过不断更新字符天体的位置和速度,在控制台中创建一个动态的字符图像效果。

请注意,这只是一个简单示例,字符天体仅为随机生成的星星。你可以根据实际需求修改 initializeStars 函数,实现更复杂的字符图像。另外,由于代码会在无限循环中运行,因此可能需要手动停止程序。文章来源地址https://www.toymoban.com/news/detail-522590.html

到了这里,关于C++编写的小程序,将字符图像作为宇宙天体在控制台中动态绘制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Python编写简单的小程序、成绩计算器

    成绩计算器程序需要两个分数,以百分比表示 - 一个用于项目,一个用于考试。 项目和考试都为最终评估成绩贡献了50%。 程序应从中计算出总体百分比,并使用下表中的数据计算出最终成绩: 例 项目分数 - 78%,考试分数 - 65%。 最终成绩 = 71.5% ((78 + 65)*0.5),最终成绩

    2024年02月11日
    浏览(38)
  • 基于Python编写一个B站全自动抽奖的小程序

    本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖。这样就能不错过任何一个可以暴富的机会了。需要的可以参考一下 应好友邀请,帮他写了个小程序,功能类似于实时监控自己关

    2024年01月24日
    浏览(57)
  • 使用NVMe的用户库libzbd编写和ZNS设备通讯的小程序

    libzbd是一个用户态库,用于与支持Zoned Namespace(ZNS)技术的SSD进行交互。以下是一个使用libzbd库编写向ZNS SSD写入数据并读取打印的简单程序。 请注意,该示例仅用于演示目的,并且省略了错误处理和其他细节。

    2024年02月16日
    浏览(40)
  • 小程序使用图像作为背景

    微信小程序不支持通过background-image设置背景,因此必须使用image标签来设置背景 在 uni-app 中,可以使用 background-image 属性来将一张图像作为另一张图像的背景。 以下是一个示例代码,演示如何使用 background-image 将一张图像作为另一张图像的背景: 在上面的示例中,我们在页

    2024年02月13日
    浏览(41)
  • C++ GDAL找出多时相遥感影像缺失的日期并自动生成新的全零图像作为替补

      本文介绍基于 C++ 语言的 GDAL 库,基于一个 存储大量遥感影像 的 文件夹 ,依据 每一景遥感影像 的文件名中 表示日期 的那个字段,找出这些遥感影像中 缺失的成像日期 ,并新生成多个像元值全部为 0 的栅格文件,作为这些 缺失日期当日 的遥感影像文件的方法。   

    2024年02月16日
    浏览(45)
  • C语言程序设计:编写函数,统计字符串中数字字符的个数

    题目内容: 编写函数,求给定字符串中数字字符的个数,在主函数中输入字符串及输出统计的个数。 输入格式: %s 输出格式: %d 输入样例: abc123fg 输出样例: 3 时间限制:500ms内存限制:32000kb

    2024年02月11日
    浏览(67)
  • 编写程序,输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。(while)

    编写程序,输入一行字符,分别统计其中英文字母、空格、数字和其他字符的个数。(while)

    2024年02月11日
    浏览(54)
  • 元宇宙作为风口究竟是时代的进步还是割韭菜之王

    元宇宙这个词应该是当下最火爆的话题了吧,每个资本家都在虎视眈眈的盯着这块儿蛋糕 ,那么作为我们电商或者中小型企业家能否分到这一杯羹呢,我想最近的元宇宙NFG会带给你答案。   那么首先我们一起来看看NFG是什么,它指的是非同质化代币,就像我们买房子会有房

    2024年01月23日
    浏览(64)
  • Qt编写的小软件:一个模拟按键按下和鼠标(左键)按下的小工具

    最近玩SLG游戏的时候有大量对剧情推进无意义的对话想要跳过的时候只能狂按空格键或者狂点鼠标,还好本人好歹是程序员,于是写了个小工具来处理。 下载地址:Qt编写的模拟鼠标按下和按键按下的小工具-C++文档类资源-CSDN下载 上面的资源包含打包好的程序和代码。 界面

    2024年02月11日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包