原创 c图形模式

2009-10-11 11:20 2822 5 4 分类: FPGA/CPLD

1>
#include <graphics.h>
int main()
{
int gdriver,gmode;     //定义图形驱动器变量和图形模式变量
detectgraph(&gdriver,&gmode);    //检测图形模式,或者 gdriver="DETECT";//设置图形驱动器自动检测
initgraph(&gdriver,&gmode,"d:\\tc3");//初始化图形模式
line(100,100,200,200);
getch();
closegraph();          //关闭图形模式
return 0;
}




2>独立图形模式方法
1.在c编译器目录下(要求bgiobj.exe和bgi文件都在这个目录下)
输入命令 : BGIOBJ EGAVGA
2.在c编译器目录下输入TLIB LIB\GRAPHICS.LIB+EGAVGA
3.在1>的程序中initgraph()函数调用前加上一句:
registerbgidriver(EGAVGA_driver);
该哈数告诉连接程序在连接时巴萨EGAVGA的驱动程序装入到用户的程序中
改进后成为独立图形的程序
#include <graphics.h>
int main()
{
int gdriver="DETECT",gmode;
registerbgidriver(EGAVGA_driver);//把图形驱动程序装入到执行程序中
initgraph(&gdriver,&gmode,"d:\\tc3");
line(100,100,200,200);// 画线例子
getch();
closegraph();
return 0;
}
总结步骤:(1)将驱动程序EGAVGA.BGI转换成EGAVGA.OBJ的目标文件
   (2)将EGAVGA.OBJ的目标块装入GRAPHICS.LIB库文件中
   (3)在调用initgraph()函数之前先调用registerbgidriver()函数
   通知链接程序把图形驱动程序加入到程序中





3>动画实现
1,异或实现动画(主要函数setwritemode(XOR_PUT);//设置画线为异或模式)
例如代码段:
setwritemode(XOR_PUT);
line(100,100,200,200);
getch();    //按下键原位置线消失
line(100,100,200,200);
getch();    //再按键结束
例子程序


void main()
{
int x="10";
int i="0";
int gdriver="DETECT",gmode;
registerbgidriver(EGAVGA_driver);
initgraph(&gdriver,&gmode,"d:\\tc3");

setcolor(GREEN);
line(x,100,x,200);
delay(300);



while(i<100)
{
   setwritemode(XOR_PUT);
   line(x,100,x,200);
   //delay不能放在这里!!
  
   x+=10;i++;
  



   setwritemode(COPY_PUT);
   line(x,100,x,200);
   delay(300); // delay函数必须放到第二次setwritemode之后
}


closegraph();
}







4>游戏循环控制



(1)检测键盘函数kbhit,在conio.h中
利用kbhit和getch函数可以在不影响主程序执行的情况下
检测键盘输入和读取键值
注意:在kbhit调用之后,如果是按下普通健(有ASII值),只需调用一次getch(),返回ASII码
                     如果是按下功能键,则要调用2次getch(),第一次返回低位0,第二次返回高位的扫描码
例如:
#include <graphics.h>
#include <conio.h>
int main()
{
int i;//存放低位ASII码
int j;//存放高位扫描码
while(1)
{
   if(kbhit()!=0)
   {
    i="getch"();//接受低位ASII码
    if(i=='q') exit(0);
    if(i==0) //如果低位为0,则表明是扫描码
    {
     j="getch"();//接受高位扫描码
     printf("this is function key!\n");
    }
    else
     printf("you pressed %c,j=%d\n",i,j);
   }
   delay(200);
   printf("the game is running!\n");
  
}
}
(2)键盘接口函数bioskey

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
5
关闭 站长推荐上一条 /3 下一条