回 帖 发 新 帖 刷新版面

主题:[原创]用C写的一个旋转的八卦图

#include<graphics.h>
#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void mysector(int x,int y,int startangle,int endangle,int rx,int ry);

main()
{
  int graphdriver=VGA,  graphmode=VGAHI  ;
  int x0=320,y0=240;
  int degree=0;
  int size=0;
  void *buffer=NULL;
  int xt=0,yt=0;
  struct palettetype palette;
  registerbgidriver(EGAVGA_driver);/*如果编译通不过,除掉此句*/
  initgraph(&graphdriver,&graphmode,"");/*引号中加入TC的目录 如c:\\tc  */
  cleardevice();
  size=imagesize(160,80,320,320);
  buffer=malloc(size);
  getimage(160,80,320,320,buffer);
  getpalette(&palette);

  while(!kbhit())
  {
  putimage(160,80,buffer,COPY_PUT);
  setcolor(15);
  circle(x0,y0,160);
  degree=(degree+10)%360;
  xt=(int)80* sin( (degree+90)*(2*M_PI)/360  ) ;
  yt=(int)80* cos( (degree+90)*(2*M_PI)/360  ) ;

  /*-----------------------------*/
  setfillstyle(1,15);
  mysector(x0,y0,  0+degree,180+degree,160,160);   /* semicircle_top */
  setfillstyle(1,0);
  mysector(x0,y0,180+degree,360+degree,160,160);   /*  semicircle_bottom */
 /*------------------------------*/
  setcolor(0);
  setfillstyle(1,0);
  mysector(x0+xt,y0+yt, 0+degree,180+degree,80,80);   /*right semicircle */

  setcolor(15);
  setfillstyle(1,15);
  mysector(x0-xt,y0-yt,180+degree,360+degree,80,80);   /*left semicircle*/
/*-----------------------------*/

  setcolor(15);
  setfillstyle(1,15);
  mysector(x0+xt,y0+yt,0,360,30,30);      /*right small circle  */

  setcolor(0);
  setfillstyle(1,0);
  mysector(x0-xt,y0-yt,0,360,30,30);       /*left small circle */

/* ------------ --------------------*/
  getimage(160,80,320,320,buffer);
 /* cleardevice();  */
}
  getch();
  closegraph();
}
/*--------------------------------------------------*/
void mysector(int x,int y,int startangle,int endangle,int rx,int ry)
{
 /* if(endangle>720) endangle=endangle-360;*/
  if(startangle<360 && endangle>360)
  {
   sector(x, y,startangle,  360,rx,ry);
   sector(x, y, 0, endangle-360,rx,ry);
   }
 else if(startangle==360)
 sector(x, y,0,endangle-360,rx,ry);
 else if(startangle>360 && endangle>360)
 sector(x,y,startangle-360,endangle-360,rx,ry);
 else sector(x,y,startangle,endangle,rx,ry);
}

回复列表 (共32个回复)

11 楼

to 10 楼:

因为你的Graphics.lib库里没有_EGAVGA_DRIVER,
你需要手动把EGAVGA.BGI这个图形驱动加到Graphics.lib里去.
这么做:
切换到你的TC目录下的 BGI\目录
执行 BGIOBJ EGAVGA
这时你得到 EGAVGA.OBJ这个文件
执行 ..\BIN\TLIB ..\LIB\GRAPHICS.LIB + EGAVGA.OBJ

然后你再重新编译一次试一试

12 楼


如果编译通不过,就除掉registerbgidriver(EGAVGA_driver);
再试试

13 楼

谢谢啦啊, 我用11楼 师兄的方法解决后  就能连接通过了  
还能多讲些 这些方面的知识吗?~

14 楼

去掉registerbgidriver(EGAVGA_driver);的方法是不正确的,这样编译出来的程序不能脱离tc的IDE运行的,不信你自己去试试,不在tc的目录里运行。


registerbgidriver(EGAVGA_driver);一句的目的就是要脱离TC的IDE运行,但编译之前需要把egavga.bgi驱动加入graphics.lib,做以下三个步骤:

1。bgiobj.exe egavga.bgi把egavga.bgi转换为egavga.obj
2。tlib graphics.lib +egavga.obj把egavga.obj加入到graphics.lib中
3。在运行initgraph()之前运行registerbgidriver(EGAVGA_driver);这一步程序里已经做了。

这样程序就能脱离tc的环境运行了。

15 楼

我用WIN-TC可以得到图象,还不错!厉害我佩服!

16 楼

我编译也通过了,可是中间两个半圆的地方怎么老是闪个不停啊?
帅呆了!!!

17 楼

和我的一个样,我的也是这样的.

18 楼

和9楼10楼一样

19 楼

编译事项:
先将egavga的驱动程序编译进库文件
D:\turboc2>bgiobj egavga
D:\turboc2>tlib lib\graphics.lib+egavga.obj

在调用initgraph前先调用 registerbgidriver(EGAVGA_driver);

运行成功 不过闪得太厉害了

20 楼

我在TC2.0下试过了,要将这句: registerbgidriver(EGAVGA_driver);去掉!

看到运行结果了,挺漂亮啊,呵呵,学习中!

我来回复

您尚未登录,请登录后再回复。点此登录或注册