论坛: 编程破解 标题: 设计课题三:遨游太空(C语言)! 复制本贴地址    
作者: 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号