h>
unionkeyTest
{
intc;
charch[2];
};
voidmain(void)
{unionkeyTestk;
while
(1)
{
while(bioskey
(1)==0);
/*function1returns0untilakeyispressed*/
k。
c=bioskey(0);
/*function0returnsthekeythatiswaiting*/
printf(“High=[%d],Low=[%d]\n”,k.c,k.ch[1],k。
ch[0]);
}
}
例3:
C提供的随机函数:
voidrandomize(); //初始化随机数发生器
intrandom(intubound);//返回范围在0到ubound—1之间的一个随机整数。
2、图形模式
不同的显示器适配器(显卡)有不同的图形分辨率。
即是同一显卡,在不同模式下也有不同分辨率。
因此,在屏幕作图之前,必须根据显卡种类将显示器设置成为某种图形模式。
VGALO 0 16色 640*200
VGA VGAMED 1 16色 640*350
VGAHI 2 16色 640*480
(1)图形模式的初始化
在屏幕作图之前,必须根据显示器适配器种类将显示器设置成为某种图形模式,在未设置图形模式之前,微机系统默认屏幕为文本模式(80列,25行字符模式),此时所有图形函数均不能工作.
设置屏幕为图形模式,可用下列图形初始化函数:
voidinitgraph(int*gdriver,int*gmode,char*path);
表2.图形驱动器、模式的符号常数及数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
图形驱动器(gdriver) 图形模式(gmode)
─────────── ─────────── 色调 分辨率
符号常数 数值 符号常数 数值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CGA 1 CGAC0 0 C0 320*200
CGAC1 1 C1 320*200
CGAC2 2 C2 320*200
CGAC3 3 C3 320*200
CGAHI 4 2色 640*200
───────────────────────────────────
MCGA 2 MCGAC0 0 C0 320*200
MCGAC1 1 C1 320*200
MCGAC2 2 C2 320*200
MCGAC3 3 C3 320*200
MCGAMED 4 2色 640*200
MCGAHI 5 2色 640*480
───────────────────────────────────
EGA 3 EGALO 0 16色 640*200
EGAHI 1 16色 640*350
───────────────────────────────────
EGA64 4 EGA64LO 0 16色 640*200
EGA64HI 1 4色 640*350
───────────────────────────────────
EGAMON 5 EGAMONHI 0 2色 640*350
───────────────────────────────────
IBM8514 6 IBM8514LO 0 256色 640*480
IBM8514HI 1 256色1024*768
───────────────────────────────────
HERC 7 HERCMONOHI 0 2色 720*348
───────────────────────────────────
ATT400 8 ATT400C0 0 C0 320*200
ATT400C1 1 C1 320*200
ATT400C2 2 C2 320*200
ATT400C3 3 C3 320*200
ATT400MED 4 2色 320*200
ATT400HI 5 2色 320*200
───────────────────────────────────
VGA 9 VGALO 0 16色 640*200
VGAMED 1 16色 640*350
VGAHI 2 16色 640*480
───────────────────────────────────
PC3270 10 PC3270HI 0 2色 720*350
───────────────────────────────────
DETECT 0 用于硬件测试
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
例子1:
使用图形初始化函数设置VGA高分辨率图形模式
#include〈graphics。
h〉
intmain()
{
intgdriver,gmode;
gdriver=VGA;
gmode=VGAHI;
initgraph(&gdriver,&gmode,"c:
\\tc");//图形模式初始化
bar3d(100,100,300,250,50,1); /*画一长方体*/
getch();
closegraph();//关闭图形模式,返回默认文本模式
return0;
}
例子2:
自动进行硬件测试后进行图形初始化
有时编程者并不知道所用的图形显示器适配器种类,或者需要将编写的程序用于不同图形驱动器,TurboC提供了一个自动检测显示器硬件后进行图形初始化的方法。
即用gdriver=DETECT语句后再跟initgraph()函数就行了。
例3:
#include〈graphics.h〉
intmain()
{intgdriver=DETECT,gmode;
initgraph(&gdriver,&gmode,c:
\\tc");
bar3d(50,50,150,30,1);
getch();
closegraph();
return0;
}
(2)退出图形状态
TurboC提供了函数closegraph(),其调用格式为:
voidfarclosegraph(void);
调用该函数后可退出图形状态而进入文本方式(TurboC默认方式),并释放用于保存图形驱动程序和字体的系统内存.
(3)屏幕颜色的设置和清屏函数
对于图形模式的屏幕颜色设置,同样分为背景色的设置和前景色的设置。
在TurboC中分别用下面两个函数。
voidfarsetbkcolor(intcolor);//设置背景色:
voidfarsetcolor(intcolor);//设置作图色:
其中color为图形方式下颜色的规定数值,对EGA,VGA显示器适配器,有关颜色的符号常数及数值见下表所示.
表3有关屏幕颜色的符号常数表
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义 符号常数 数值 含义
───────────────────────────────────
BLACK 0 黑色 DARKGRAY 8 深灰
BLUE 1 兰色 LIGHTBLUE 9 深兰
GREEN 2 绿色 LIGHTGREEN 10 淡绿
CYAN 3 青色 LIGHTCYAN 11 淡青
RED 4 红色 LIGHTRED 12 淡红
MAGENTA 5 洋红 LIGHTMAGENTA 13 淡洋红
BROWN 6 棕色 YELLOW 14 黄色
LIGHTGRAY 7 淡灰 WHITE 15 白色
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
清除图形屏幕内容使用清屏函数,其调用格式如下:
voidefarcleardevice(void);
有关颜色设置、清屏函数的使用。
例4:
#includeh〉
#include〈graphics.h〉
intmain()
{ intgdriver,gmode,i;
gdriver=DETECT;
initgraph(&gdriver,&gmode”,”");
setbkcolor(0);
cleardevice();
for(i=0;i〈=15;i++)
{ setcolor(i);
circle(320,240,20+i*10);
delay(100);
}
for(i=0;i〈=15;i++)
{
setbkcolor(i);
cleardevice();
circle(320,240,20+i*10);
delay(100);
}
closegraph();
return0;
}
(4)。
基本图形函数
基本图形函数包括画点,线以及其它一些基本图形的函数。
本节对这些函数
作一全面的介绍。
一、画点
1.画点函数
voidfarputpixel(intx,inty,intcolor);
该函数表示有指定的象素画一个按color所确定颜色的点。
对于颜色color的值可从表3中获得而对x,y是指图形象元的坐标。
对VGA适配器, 它的最高分辨率为640x480,屏幕的左上角坐标为(0,0),右下角坐标为(639,479), 关于点的另外一个函数是:
intfargetpixel(intx,inty);
它获得当前点(x,y)的颜色值.
2.有关坐标位置的函数
intfargetmaxx(void); //返回x轴的最大值。
intfargetmaxy(void);//返回y轴的最大值。
intfargetx(void);//返回光标在x轴的位置。
voidfargety(void); //返回光标有y轴的位置。
voidfarmoveto(intx,inty);
移动光标到(x,y)点,虽不是画点,在移动过程中亦画点.
voidfarmoverel(intdx,intdy);
移动光标从当前位置(x,y)移动到(x+dx,y+dy)的位置,移动过程中不画点。
二、画线
1.画线函数
TURBOC提供了一系列画线函数,下面分别叙述:
voidfarline(intx0,inty0,intx1,inty1);
画一条从点(x0,y0)到(x1,y1)的直线。
voidfarlineto(intx,inty);
画一从当前光标到点(x,y)的直线.
voidfarlinerel(intdx,intdy);
画一条从当前光标(x,y)到按相对增量确