本程序利用动画方式展示了地球绕太阳旋转,月亮绕地球旋转的天文现象,其动画的实现方式为边画边擦。
#include <graphics.h>
#include <math.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
double Earthx,Earthy,Circlex,Circley; /*Earthx,Earthy)表示地球的当前圆心,(Circlex,Circley)表示运行物得当前圆心*/
void drawnrun(int x,int y,double i,int r,int runr,int color) /*画星球*/
{
setcolor(color);
setfillstyle(SOLID_FILL,color);
i=(i*1.74444)/100; /*3.14/180=1.74444e-2*/
Circlex=runr*cos(i)+x;
Circley=runr*sin(i)+y;
fillellipse(Circlex,Circley,r,r);
}
void eraserun(int x,int y,double i,int r,int runr) /*擦除星球*/
{
setfillstyle(SOLID_FILL,BLACK);
i=(i*1.74444)/100;
Circlex=runr*cos(i)+x;
Circley=runr*sin(i)+y;
setcolor(BLACK);
fillellipse(Circlex,Circley,r,r);
}
void putstar(void) /*在天空画星星*/
{
int i,dotx,doty,h,w,color;
w=640;
h=480;
for(i=0;i<150;i++)
{
dotx=random(w-1);
doty=random(h-1);
color=random(16);
putpixel(dotx,doty,color); /*小星星*/
circle(dotx+1,doty+1,1); /*大星星*/
}
}
main()
{
int gd=DETECT,gm;
int Circlex1,Circley1,r;
int i,j,k,ks;
initgraph(&gd,&gm," ");
Circlex1=getmaxx()/2;
Circley1=getmaxy()/2;
cleardevice();
setcolor(BLUE);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,2);
outtextxy(1,1,"Sun,Earth,Moon");
setfillstyle(SOLID_FILL,YELLOW);
fillellipse(Circlex1,Circley1,35,35); /*画太阳*/
setcolor(RED);
outtextxy(Circlex1-16,Circley1-10,"SUN"); putstar();
for(j=1;j<3;j++) /*地球一共转3圈*/
{
ks=0;
for(i=0;i<=360;i++)
{
delay(200);
drawnrun(Circlex1,Circley1,i,20,180,LIGHTBLUE); /*画地球*/
Earthx=Circlex;
Earthy=Circley;
for(k=1;k<12;k++)
{
ks+=1;
drawnrun(Earthx,Earthy,ks,5,50,WHITE); /*画月亮*/
if(kbhit()) break;
else delay(800);
eraserun(Earthx,Earthy,ks,5,50); /*擦月亮*/
}
eraserun(Circlex1,Circley1,i,15,180); /*擦地球*/
if(kbhit()) break;
}
}
getch();
closegraph();
}
在编完以上程序后,我本想改一改,但遇上了一些困难,如:如何让月亮周期盈亏;若加上其他行星,又如何处理他们的多卫星。。。。
希望有人给与帮助。
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |