?? sun.c
字號(hào):
#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]; /* 背景星星 上次坐標(biāo) */
int lsty[10];
int stx[50]; /* 背景星星 上次坐標(biāo) */
int sty[50];
double pl = 3.14159;
void initgr(void) /* BGI初始化 */
{
int gd = DETECT, gm = 0;
registerbgidriver(EGAVGA_driver); /* 注冊(cè)BGI驅(qū)動(dòng) */
initgraph(&gd, &gm, "");
}
void toyrd(int ra,int rb,double alp) /* 橢圓上的一個(gè)點(diǎn) */
{
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() /* 生成隨即星星坐標(biāo) */
{
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() /* 開轉(zhuǎn) */
{
double dz[9],nw[9];
int i,j=6000,key; /* 6000是各行星周期的公倍數(shù) */
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();
/* 程序主體結(jié)束 */
getch(); /* 暫停 */
closegraph(); /* 恢復(fù)TEXT屏幕模式 */
return 0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -