首页 > 其他分享 >基于EasyX和Raylib的星空

基于EasyX和Raylib的星空

时间:2023-01-26 14:55:07浏览次数:45  
标签:星星 star 星空 Raylib int EasyX color step include

基于 EasyX

// 程序名称:星空
// 编译环境:Visual C++ 6.0,EasyX_20200902
// 最后更新:2009-2-22
//
#include <graphics.h>
#include <time.h>
#include <conio.h>

#define MAXSTAR 200	// 星星总数

struct STAR
{
    double x;
    int y;
    double step;
    int color;
};

STAR star[MAXSTAR];

// 初始化星星
void InitStar(int i)
{
    star[i].x = 0;
    star[i].y = rand() % 480;
    star[i].step = (rand() % 5000) / 1000.0 + 1;
    star[i].color = (int)(star[i].step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮
    star[i].color = RGB(star[i].color, star[i].color, star[i].color);
}

// 移动星星
void MoveStar(int i)
{
    // 擦掉原来的星星
    putpixel((int)star[i].x, star[i].y, 0);

    // 计算新位置
    star[i].x += star[i].step;
    if (star[i].x > 640)	InitStar(i);

    // 画新星星
    putpixel((int)star[i].x, star[i].y, star[i].color);
}

// 主函数
int main()
{
    srand((unsigned)time(NULL)); // 随机种子
    initgraph(640, 480);	// 打开图形窗口

    // 初始化所有星星
    for(int i=0; i<MAXSTAR; i++)
    {
        InitStar(i);
        star[i].x = rand() % 640;
    }

    // 绘制星空,按任意键退出
    while(!_kbhit())
    {
        for(int i=0; i<MAXSTAR; i++)
            MoveStar(i);
        Sleep(20);
    }

    closegraph();    // 关闭图形窗口
    return 0;
}

基于 Raylib

除了 API 改用 raylib 外,Star 自身的修改和绘制从面向过程改为了面向对象。

// based on https://codebus.cn/yangw/starry-sky

#include "raylib.h"
#include "raylib_helper.hpp"
#include <stdlib.h>
#include <time.h>

#define WIDTH 640
#define HEIGHT 480
#define MAXSTAR 200	// 星星总数

class Star
{
public:
    double x;
    int y;
    double step;
    Color color;

    void init()
    {
        x = rand() % WIDTH;
        y = rand() % HEIGHT;
        step = (rand() % 5000) / 1000.0 + 1;
        int c = (int)(step * 255 / 6.0 + 0.5);	// 速度越快,颜色越亮
        color = make_color(c, c, c, 255);
    }

    void move()
    {
        // 擦掉原来的星星
        // putpixel((int)x, y, 0);
        DrawPixel(x, y, BLACK);

        // 计算新位置
        x += step;
        if (x > WIDTH)
        {
            init();
        }

        // 画新星星
        //putpixel((int)x, y, color);
        DrawPixel(x, y, color);
    }
};

Star star[MAXSTAR];

void startup()
{
    srand((unsigned)time(NULL));
    InitWindow(WIDTH, HEIGHT, "Starry Sky");
    SetTargetFPS(60);

    // 初始化所有星星
    for (int i = 0; i < MAXSTAR; i++)
    {
        star[i].init();
    }
}

void update()
{
    for(int i=0; i<MAXSTAR; i++)
    {
        star[i].move();
    }
}

void show()
{
    BeginDrawing();
    {
        ClearBackground(BLACK);
    }
    EndDrawing();
}

int main()
{
    startup();
    while (!WindowShouldClose())
    {
        update();
        show();
    }
    CloseWindow();

    return 0;
}

标签:星星,star,星空,Raylib,int,EasyX,color,step,include
From: https://www.cnblogs.com/zjutzz/p/17067830.html

相关文章

  • 基于EasyX和Raylib的字符阵
    字符阵是EasyX的经典样例程序:https://codebus.cn/yangw/character-matrix使用raylib替代easyx.除了常规的API替换,还需要额外调用SwapScreenBuffer().由于Dr......
  • 基于EasyX和Raylib的自由落体小球
    这个简陋的小游戏,在《C和C++游戏趣味编程》第三章,是逐次迭代写成的。这里贴出基于easyx和raylib的各自实现。基于EasyX//根据《C和C++游戏趣味编程》第二章仿......
  • 基于EasyX和Raylib的十字消除
    基于EasyX//根据《C和C++游戏趣味编程》第10章十字消除写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#inc......
  • 基于EasyX和Raylib的别碰方块
    基于EasyX//根据《C和C++游戏趣味编程》第三章别碰方块写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>//检测按下了空格键voi......
  • 基于EasyX和Raylib的推箱子
    基于EasyX//根据《C和C++游戏趣味编程》第九章推箱子写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//玩......
  • 基于EasyX和Raylib的坚持100秒
    EasyX//根据《C和C++游戏趣味编程》第12章坚持100秒写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#include......
  • 基于EasyX和Raylib的字符雨
    思路按如下顺序尝试:绘制一个字符下落绘制4个字符(一列)的下落绘制20个字符(一列)的下落,并封装其位置更新、绘制的过程为Rain类的成员函数绘制多个雨滴每个雨滴在更新......
  • 基于EasyX和Raylib的贪吃蛇
    基于EasyX//根据《C和C++游戏趣味编程》第七章贪吃蛇写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//全......
  • 每刻和金蝶云星空接口打通对接实战
    每刻和金蝶云星空接口打通对接实战接通系统:每刻3000+中大型企业在用,新一代业财税一体化解决方案提供商。旗下拥有每刻报销、每刻档案、每刻云票、每刻财务共享云平台等......
  • 马帮对接打通金蝶云星空获取订单列表接口与销售出库新增接口
    接入系统:马帮马帮ERP旗下有马帮ERP3.0、马帮ERP亚马逊专用版、马帮WMS仓储管理系统、马帮云仓、马帮TMS、跨境分销、马帮供应链SCM管理系统等产品,为跨境电商卖家提供高......