地球 c语言实现

本文提供了一个使用C语言进行图形编程的例子,演示了如何在图形界面中绘制图像、文字和星星背景。通过定义图形模式、加载库文件、创建动态显示效果等步骤,实现了图形界面的初始化,并展示了移动图片的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 #include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <process.h>

#define TRUE 1
#define FALSE 0
#define IMAGE_SIZE 10

void draw_picture();
void move_picture();
void draw_image(int x, int y);
void putpixel_stars();

char title[]="WELLCOME TO THE";
char *move="COMPUTER WOELD!";
void *pt_addr;
int x,y,maxx,maxy,midx,midy;

int main()
{
   int driver = VGA;
   int mode=VGAHI;
   int errorcode;
   initgraph(&driver, &mode, "C://soft//TC");
   errorcode=graphresult();
   if(errorcode!=0){
     printf("Graphics error:%s/n",grapherrormsg(errorcode));
     printf("Press any key to halt:");
     getch();
     exit(1);
   }
   cleardevice();
   maxx=getmaxx();
   maxy=getmaxy()-20;
   midx=maxx/2;
   midy=maxy/2;
   x=0;
   y=midy-25;
   setbkcolor(GREEN);
   draw_picture();
   move_picture();
   free(pt_addr);
   settextstyle(DEFAULT_FONT,HORIZ_DIR,1);
   settextjustify(LEFT_TEXT,TOP_TEXT);
   restorecrtmode();
}

void draw_picture(void)
{
  unsigned int i,size;
  setlinestyle(SOLID_LINE,0,NORM_WIDTH);
  setcolor(LIGHTBLUE);
  for(i=0;i<=14;i++)
  {
    ellipse(midx,midy,0,360,108,108-8*i);
    ellipse(midx,midy,0,360,108-8*i,108);
  }
  setcolor(BLUE);
  setlinestyle(SOLID_LINE,0,THICK_WIDTH);
  ellipse(midx,midy,130,50,170,30);
  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);
  putpixel_stars();
  setcolor(DARKGRAY);
  setlinestyle(SOLID_LINE,0,THICK_WIDTH);
  rectangle(0,0,maxx,maxy);
  setfillstyle(SOLID_FILL,LIGHTGRAY);
  bar(0,getmaxy()-18,getmaxx(),getmaxy());
  outtextxy(150,getmaxy()-12,"Program for Demo in CG Lesson ,HUST");
  setlinestyle(SOLID_LINE,0,NORM_WIDTH);
  setcolor(BLUE);
  settextstyle(TRIPLEX_FONT,HORIZ_DIR,6);
  settextjustify(CENTER_TEXT,CENTER_TEXT);
  outtextxy(midx-70,70,title);
}

void move_picture(viod)
{
  char printmove[2];
  int movex;
  do{
    x=0;
    movex=midx-200;
    setcolor(6);
    while(x<=maxx)
    {
      if(kbhit())break;
      putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT);
      x=x+5;
      if(*move!='/0'&& x>movex)
      {
        *(printmove)=*(move++);
        *(printmove+1)='/0';
        outtextxy(movex,y+IMAGE_SIZE+100,printmove);
    movex+=30;
      }
      putimage(x,y-IMAGE_SIZE,pt_addr,XOR_PUT);
      delay(150000);
    }
     putimage(0,y-IMAGE_SIZE,pt_addr,XOR_PUT);
  }while(!kbhit());
}

void draw_image(int x,int y)
{
  setcolor(GREEN);
  setfillstyle(1,4);
  moveto(x+10,y);
  linerel(-3*10,2*10);
  moveto(x+10,y);
  linerel(-3*10,-2*10);
  moveto(x+25,y);
  linerel(-5*10,0);
  fillellipse(x+13,y,8,8);
}

void putpixel_stars(void)
{
  int i,seed=1958;
  int dotx,doty,h,w,color,maxcolor;
  maxcolor=getmaxcolor();
  w=getmaxx();
  h=getmaxy()-20;
  srand(seed);
  for(i=0;i<5000;++i)
  {
    dotx=1+random(w-1);
    doty=1+random(h-1);
    color=random(maxcolor);
    putpixel(dotx,doty,color);
  }
  srand(seed);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值