📄 noname.c
字号:
#include "graphics.h"
#include "stdlib.h" /*动态分配内存函数的头文件*/
#include "stdio.h"
#include "conio.h" /*有关屏幕处理函数的头文件*/
#include "math.h"
#define IMAGE_SIZE 10
#define STARTANGLE 130
#define ENDANGLE 50
#define PI 3.1415926
int maxx,maxy,midx,midy;
/*绘制飞船函数*/
void draw_image(int x,int y)
{
int arw[11]; /*用数组arw来储存飞船的形状*/
arw[0]=x+10;arw[1]=y-10;arw[2]=x+34;arw[3]=y-6;
arw[4]=x+34;arw[5]=y+6;arw[6]=x+10;arw[7]=y+10;
arw[8]=x+10;arw[10]=y-10;
moveto(x+10,y-4); /*移动画笔函数*/
setcolor(14);
setfillstyle(1,4);
linerel(-3*10,-2*8); /*画线函数*/
moveto(x+10,y+4);
linerel(-3*10,+2*8);
moveto(x+10,y);
linerel(-3*10,0);
setcolor(3);
setfillstyle(1,LIGHTBLUE);
fillpoly(4,arw); /*绘制飞船本体*/
}
/*绘制星空图形函数*/
void putstar(int seed)
{
int i,dotx,doty,h,w,color,maxcolor;
maxcolor=getmaxcolor(); /*得到当前模式下的最多的颜色数*/
w=getmaxx(); /*得到屏幕的最大坐标值*/
h=getmaxy();
srand(seed); /*初始化随机数发生器*/
for(i=0;i<250;i++)
{
dotx=1+random(w-5); /*利用随机数发生器定义星星的位置*/
doty=1+random(h-5);
if(sqrt(pow(dotx-midx,2)+pow(doty-midy,2))<=105)
continue;
color=i%2==0?YELLOW:WHITE; /*利用随机数发生器定义星星的颜色*/
setcolor(color);
putpixel(dotx,doty,color); /*用点表示小星星*/
circle(dotx+1,doty+1,1); /*用小圆表示大星星*/
}
srand(seed); /*再次初始化随机数发生器*/
}
main()
{
void *p;
int x,y,i,num=200,time=0,angle=STARTANGLE,x1,y1;
unsigned int size;
int gdriver=VGA,gmode=1,color; /*初始化图形系统*/
/*将显示器的驱动程序和字库连接到用户程序,以便程序可离开TC环境运行*/
registerbgidriver(EGAVGA_driver);
registerbgifont(triplex_font);
initgraph(&gdriver,&gmode," ");
maxx=getmaxx();
maxy=getmaxy();
midx=maxx/2;
x=1;
midy=y=maxy/2-30;
cleardevice();
setbkcolor(BLACK);
setcolor(RED);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
draw_image(x,y); /*调用画飞船子函数*/
size=imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE)-4,y+IMAGE_SIZE);
/*计算飞船图形所占的字节数*/
p=malloc(size);
getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE)-4,y+IMAGE_SIZE,p);
do
{
setvisualpage(0); /*将第0页设置为可视页*/
delay(500); /*保持图形显示500毫秒*/
setactivepage(1); /*将第1页设置为活动页*/
cleardevice();
setbkcolor(BLACK);
setcolor(WHITE); /*画白色边框*/
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
rectangle(0,0,maxx,maxy);
putstar(num=(num>30000?200:num+1)); /*调用画星星子函数*/
setcolor(YELLOW); /*设置文本输出格式*/
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,290,"AROUND THE WORLD");
for(i=0;i<=13;i++) /*画地球*/
{
setcolor(BLUE);
ellipse(midx,midy-2,0,360,100,100-8*i);
ellipse(midx,midy-2,90,270,100-8*i-time%4,100);
ellipse(midx,midy-2,270,90,100-8*i+time%4,100);
}
setcolor(time++%3!=0?BROWN:WHITE); /*作环绕地球的光环*/
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
setcolor(BLACK);
ellipse(midx,midy,130,50,160,30);
if(angle>ENDANGLE&angle<STARTANGLE) /*画卫星*/
angle=angle+5;
else
{
setcolor(RED);
setfillstyle(1,YELLOW);
x1=midx+160*cos(angle*PI/180);
y1=midy-30*sin(angle*PI/180);
circle(x1,y1,6);
floodfill(x1,y1,RED);
angle=angle>360?5:angle+2;
}
putimage(x,y-5-IMAGE_SIZE,p,COPY_PUT); /*显示内存中的图象*/
x=x>maxx-40?1:x+4; /*显示飞船下次显示的横坐标*/
setvisualpage(1); /*交换可视页与编辑页*/
delay(500);
setactivepage(0);
cleardevice();
setbkcolor(BLACK);
setcolor(WHITE);
setlinestyle(SOLID_LINE,0,NORM_WIDTH);
rectangle(0,0,maxx,maxy);
putstar(num=num<30000?200:num+1);
setcolor(YELLOW);
settextstyle(TRIPLEX_FONT,HORIZ_DIR,4);
settextjustify(CENTER_TEXT,CENTER_TEXT);
outtextxy(midx,290,"AROUND THE WORLD");
for(i=0;i<=13;i++)
{
setcolor(LIGHTBLUE);
ellipse(midx,midy-2,0,360,100,100-8*i);
ellipse(midx,midy-2,90,270,100-8*i-time%4,100);
ellipse(midx,midy-2,270,90,100-8*i+time%4,100);
}
setcolor(time++%3!=0?LIGHTMAGENTA:BLACK);
setlinestyle(SOLID_LINE,0,THICK_WIDTH);
ellipse(midx,midy,130,50,160,30);
setcolor(BLACK);
ellipse(midx,midy,130,50,160,30);
if(angle>=ENDANGLE&angle<=STARTANGLE)
angle=angle+5;
else
{
setcolor(RED);
setfillstyle(1,YELLOW);
x1=midx+160*cos(angle*PI/180);
y1=midy-30*sin(angle*PI/180);
circle(x1,y1,6);
floodfill(x1,y1,RED);
angle=angle>360?5:angle+2;
}
putimage(x,y-5-IMAGE_SIZE,p,COPY_PUT);
x=x>=maxx-40?1:x+4;
}while(!kbhit()); /*按任意键退出*/
free(p);
getch();
closegraph(); /*关闭图形系统*/
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -