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

news/2024/7/20 2:15:31 标签: 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 函数,实现更复杂的字符图像。另外,由于代码会在无限循环中运行,因此可能需要手动停止程序。


http://www.niftyadmin.cn/n/1008202.html

相关文章

【vue2+echarts】关系图谱的简单使用

前言 需要实现一种类似思维导图、拓扑图的功能 主要的需求是&#xff1a;数据中心分布、共三层数据&#xff08;不同的样式&#xff09;、数据可以点击跳转、节点使用虚线连接 方案选型 jsmind–pass:思维导图&#xff0c;样式比较简单&#xff0c;属于比较标准的思维导图。…

list<map>实现分页,排序

start第几页 length一页多少条Integer start Integer.parseInt(map.get("start").toString()); Integer length Integer.parseInt(map.get("length").toString());resultList resultList.stream().skip((start - 1) * length).limit(length).collect(Co…

IDEA、Webstorm 书签(bookmark)使用

①设置标签 ctrl shift 数字 就可以给软件设置上标签 或者 直接F11就可以添加标签 ②查看设置的标签的位置 使用shift F11 就可以标记记录的标签。

【IoT】硬件产品经理:从入门到精通(卫朋)

目录 介绍 出版过程 CSDN学院 下单方式 个人介绍 介绍 2023 年已经过去了一半。 作为阶段小目标&#xff0c;这本书也如期发布了。 先来看看封面&#xff0c;这里也要感谢编辑们的辛苦付出。 ​ 出版过程 出版本身其实是一件比较严肃的事情。 过去的一年多时间&#…

虹科分享|如何防范MOVEit transfer漏洞|高级威胁防御

美国网络安全和基础设施安全局(CISA)承认&#xff0c;它正在向几个联邦机构提供支持&#xff0c;这些机构在Progress(前身为IpSwitch)MOVEit传输解决方案中暴露出漏洞后被攻破。根据CISA发布的一份警报和网络安全公告&#xff0c;CL0P勒索软件团伙一直在积极利用漏洞进行数据外…

proteus三级管(NPN)仿真LED灯串的开关

实验里设置LED灯的导通电压为1.2V 打开仿真开关后可以看到&#xff0c;此时三极管不导通&#xff0c;LED灯亮了&#xff0c;并且电压表和电流探针有数值显示 按下按键&#xff0c;三级管导通&#xff0c;LED灯灭

「SQL面试题库」 No_112 矩形面积

&#x1f345; 1、专栏介绍 「SQL面试题库」是由 不是西红柿 发起&#xff0c;全员免费参与的SQL学习活动。我每天发布1道SQL面试真题&#xff0c;从简单到困难&#xff0c;涵盖所有SQL知识点&#xff0c;我敢保证只要做完这100道题&#xff0c;不仅能轻松搞定面试&#xff0…

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四

English Learning - L3 作业打卡 Lesson7 Day54 2023.6.29 周四 引言&#x1f349;句1: I daydreamed like I did as a little girl and I imagined myself walking gracefully, helping other people through my journey and snowboarding again.成分划分连读爆破语调 &#x…