|
![]() | 作者: fatcat [xu09]
![]() |
登录 |
该程序将产生一个在繁星背景下的一个由经纬线组成的蓝色地球,并围绕有一个红色光环, 它们看起来都在转动,然后一蓝色宇宙飞船从左到右缓缓飞过,周而复始。屏幕下方写出了“Around The World”字样。 谢谢!! |
地主 发表时间: 05/20 11:25 |
![]() | 回复: dizi0774 [dizi0774] ![]() |
登录 |
用到C语言的动画技术. |
B1层 发表时间: 05/20 21:00 |
![]() | 回复: dizi0774 [dizi0774] ![]() |
登录 |
首先进入图形初始化-->再用outtextxy函数在屏幕下方显示要输出的字母--> 画出带有天线的飞船,用imagesize()求出该图形所占字节数,再用指针指向 存放该图形的缓冲区,并将飞船图形存在该缓冲区中,接着画星。-->while (!kbhit)/*没有键按下时*/ { -->画一绕地球的光环-->画地球-->飞船移动 (可用putimage(*指针名)的异或操作来实现,第一次是覆盖,第二次是输出映 象,其中第二次可以顺x轴右移几个象素来实现移动,飞船的移动可用循环处 理)--> }/*while循环结束*/-->释放缓冲区,退出图形模式,程序结束。 另:上述函数的使用方法和技巧在<<C语言写的俄罗斯方块>>中找到。 |
B2层 发表时间: 05/21 02:46 |
![]() | 回复: dizi0774 [dizi0774] ![]() |
登录 |
地球转动可以用不同长短的椭圆来画,不同的椭圆可用不同的颜色,为了有动感,可用一个变量i来控制椭圆的颜色,i为奇数时是一种颜色,为偶数时又变为背景色,这样看上去就有动感了。飞船要实现周而复始的转动就要判断飞船是否到了屏幕右边,到屏幕右边的话就先用putimage(x座标,y座标,*指针变量,XOR_PUT)在原位置覆盖原飞船,再在屏幕的左边使用同一函数输出飞船。实现了飞船周而复始的移动。 |
B3层 发表时间: 05/21 02:58 |
![]() | 回复: fatcat [xu09] ![]() |
登录 |
#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #define IMAGE_SIZE 10 void draw_image(int x,int y); void Putstar(void); main2() { int graphdriver=DETECT; int graphmode,color; void *pt_addr; int x,y,maxx,maxy,midy,midx,i; unsigned int size; registerbgifont(TRIPLEX_FONT); initgraph(&graphdriver,&graphmode,""); maxx=getmaxx(); maxy=getmaxy(); midx=maxx/2; x=0; midy=y=maxy/2; setcolor(YELLOW); settextstyle(TRIPLEX_FONT,HORIZ_DIR,4); settextjustify(CENTER_TEXT,CENTER_TEXT); outtextxy(midx,400,"AROUND THE WORLD"); setbkcolor(BLACK); setcolor(RED); setlinestyle(SOLID_LINE,0,THICK_WIDTH); ellipse(midx,midy,130,50,160,30); setlinestyle(SOLID_LINE,0,NORM_WIDTH); draw_image(x,y); size=imagesize(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE); pt_addr=malloc(size); getimage(x,y-IMAGE_SIZE,x+(4*IMAGE_SIZE),y+IMAGE_SIZE,pt_addr); Putstar(); setcolor(WHITE); setlinestyle(SOLID_LINE,0,NORM_WIDTH); rectangle(0,0,maxx,maxy); while(! kbhit()) {Putstar(); setcolor(RED); setlinestyle(SOLID_LINE,0,THICK_WIDTH); ellipse(midx,midy,130,50,160,30); setcolor(BLACK); ellipse(midx,midy,130,50,160,30); for(i=0;i<=13;i++) { setcolor(i%2==0? LIGHTBLUE:BLACK); ellipse(midx,midy,0,360,100,100-8*i); setcolor(LIGHTBLUE); ellipse(midx,midy,0,360,100-8*i,100); } putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT); x=x>=maxx? 0:x+6; putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT); } free(pt_addr); closegraph(); return; } void draw_image(int x,int y) { int arw[11]; 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[9]=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(void) { int seed=1858; int i,dotx,doty,h,w,color,maxcolor; maxcolor=getmaxcolor(); w=getmaxx(); h=getmaxy(); srand(seed); for(i=0;i<250;++i) { dotx=i+random(w-1); doty=1+random(h-1); color=random(maxcolor); setcolor(color); putpixel(dotx,doty,color); circle(dotx+1,doty+1,1); } srand(seed); } |
B4层 发表时间: 05/24 15:53 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号