⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sun.c

📁 用TURBO C 2.0 编写的小程序
💻 C
字号:
#include "Conio.h"
#include "graphics.h"
#include <math.h>
#include <time.h>

#define ESC     0x011b

int tx,ty,tvq;
int rd[] = {10,2,4,4,3,10,10,7,7};				/* 各行星半径 */
int cr[] = {14,11,14,9,4,5,6,11,3};				/* 各行星颜色 */
int vq[] = {0,1,4,6,12,80,200,500,1000};		/* 各行星周期 */
int rda[] = {0,50,80,100,120,160,200,250,300};	/* 行星轨道椭圆 半径A */
int rdb[] = {0,25,40,50,60,80,100,125,115};		/* 半径B */
int lstx[10];									/* 背景星星 上次坐标 */
int lsty[10];									
int stx[50];									/* 背景星星 上次坐标 */
int sty[50];

double pl = 3.14159;

void initgr(void)               /* BGI初始化 */
{
    int gd = DETECT, gm = 0;
    registerbgidriver(EGAVGA_driver);   /* 注册BGI驱动 */
    initgraph(&gd, &gm, "");
}

void toyrd(int ra,int rb,double alp)			/* 椭圆上的一个点 */
{
    double ax,ay;
    ax = cos(alp)*ra+320;
    ay = sin(alp)*rb+240;
    tx = (int)ax;
    ty = (int)ay;
}

void toyr(int ra,int rb,int cr)					/* 椭圆 */
{
    double a,h;
    int x,vbih;
    a = 2*pl*rb+4*(ra-rb);
    vbih = (int)(a+0.5);
    a = 2*pl/vbih;
    h = 0;
    for(x = 0;x<vbih;x++)
    {
        toyrd(ra,rb,h);
        putpixel(tx,ty,cr);
        h+=a;
    }
}
void rollstar()									/* 生成随即星星坐标 */
{
    ty = rand()%480;
    do{
        tx = rand()%640;
    }while(getpixel(tx,ty) != 0);
}
void fball(int nx,int ny,int r,int cr)			/* 画圆 */
{
    setcolor(cr);
    circle(nx,ny,r);
    setfillstyle(1,cr);
    floodfill(nx,ny,cr);
}
void background()								/*初始化背景*/
{
    int i;
    fball(320,238,rd[0],cr[0]);

    for(i = 1;i<9;i++)
        toyr(rda[i],rdb[i],7);
}
void initstar()									/*初始化星星*/
{
    int i;
    for(i = 0;i<50;i++)
    {
        stx[i] = i;
        sty[i] = 1;
    }
}
void vravr()									/* 开转 */
{
    double dz[9],nw[9];
    int i,j=6000,key;							/* 6000是各行星周期的公倍数 */
    for(i = 1;i<9;i++)
    {
        dz[i] = -pl/100;
        nw[i] = i;
    }
    dz[2] = -dz[2];
    initstar();
    while(1)
    {
        for(i = 1;i<9;i++)
        {
            if(j%vq[i] == 0)
            {
                fball(lstx[i],lsty[i],rd[i],0);
                toyr(rda[i],rdb[i],7);
                toyrd(rda[i],rdb[i],nw[i]);
                fball(tx,ty,rd[i],cr[i]);
                nw[i]+=dz[i];
                if(nw[i]>2*pl)nw[i]-=2*pl;
                lstx[i] = tx;
                lsty[i] = ty;
            }
        }
        for(i = 0;i<50;i++)
        {
            if(j%640 == stx[i])
            {
                putpixel(stx[i],sty[i],0);
                rollstar();
                stx[i] = tx;
                sty[i] = ty;
                putpixel(stx[i],sty[i],15);
            }
        }
        if(bioskey(1))
        {
            key=bioskey(0);
            if(key==ESC)exit(0);
        }
        if(j == 6000)j = 0;
        j++;
    }
}
int main(void)
{
    initgr();                   /* BGI初始化 */
    srand(time(0));
    /* 程序主体开始 */

    background();

    vravr();

    /* 程序主体结束 */
    getch();            		/* 暂停 */
    closegraph();               /* 恢复TEXT屏幕模式 */
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -