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
文章评论(0条评论)
登录后参与讨论