C语言图形编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
C的图形编程
一、屏幕显示模式
1、文本模式
在文本模式又称字符模式。在此模式下整个屏幕被划分成(25行,80列),共25*80个文本单元,每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字符的颜色和强度。
坐标原点在屏幕的左上角。如下图所示:
在
(1)定义一个文本窗口
void window(int left, int top, int right, int bottom);
如要定义一个窗口左上角在屏幕(20, 5)处, 大小为30列15行的窗口可写成:
window(20, 5, 50, 25);
(2)文本窗口颜色的设置
void textbackground(int color); //设置背景颜色:
void textcolor(int color); //设置字符颜色:
有关颜色的定义见表1。
(3)光标定位
void gotoxy(int x, int y);
(4)清屏
void clrscr(void);
(5)其它函数
一、窗口内文本的输出函数
int cprintf("<格式化字符串>", <变量表>);
int cputs(char *string);
int putch(int ch);
cprintf()函数输出一个格式化的字符串或数值到窗口中。它与printf() 函数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函数的输出为整个屏幕。
cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样, 只是受窗口大小的限制。
putch()函数输出一个字符到窗口内。
二、窗口内文本的输入函数
int getche(void);
getche()函数从键盘上获得一个字符, 在屏幕上显示的时候, 如果字符超过了窗口右边界, 则会被自动转移到下一行的开始位置。
例1:下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。
#include
#include
void main(void)
{ int i;
char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED", "MAGENTA", "BROWN", "LIGHTGRAY"};
textbackground(0); /* 设置屏幕背景色*/
clrscr(); /* 清除文本屏幕*/
cputs(c[0]);
for(i=1; i<8; i++)
{ window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口*/
textbackground(i); /* 定义窗口背景色*/
clrscr();
cputs(c[i]); /* 清除窗口*/
}
getch();
}
表1. 有关颜色的定义
━━━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数数值含义字符或背景
───────────────────────────
BLACK 0 黑两者均可
BLUE 1 兰两者均可
GREEN 2 绿两者均可
CYAN 3 青两者均可
RED 4 红两者均可
MAGENTA 5 洋红两者均可
BROWN 6 棕两者均可
LIGHTGRAY 7 淡灰两者均可
DARKGRAY 8 深灰只用于字符
LIGHTBLUE 9 淡兰 只用于字符
LIGHTGREEN 10 淡绿 只用于字符
LIGHTCYAN 11 淡青 只用于字符
LIGHTRED 12 淡红 只用于字符
LIGHTMAGENTA 13 淡洋红 只用于字符
YELLOW 14 黄 只用于字符
WHITE 15 白 只用于字符
BLINK 128 闪烁 只用于字符
━━━━━━━━━━━━━━━━━━━━━━━━━━━
例2:捕获键盘按键。
键盘扫描码:
每个键都有一个两字节的扫描码,其格式:
#define ESC 0x011B
#define UP 0x4800
#define DOWN 0x5000
#define LEFT 0x4B00
#define RIGHT 0x4D00
#define ENTER 0x1C0D
在头文件
int bioskey(int mode); //此函数声明于 bios.h
mode 为1时,如有按键盘,则记录其扫描码至缓冲区,并返回其扫描
码;无按键则返回0; 不清除缓冲区。
mode
为0时,从键盘缓冲区取出按键,并清除缓冲区。若没有的话,
则等待。
如:ESC
UP
DOWN
LEFT
RIGHT
F1
F2
A
Z
a
z
#include
#inlcude
union keyTest
{
int c;
char ch[2];
};
void main(void)
{ union keyTest k;
while(1)
{
while(bioskey(1)= =0);
/* function 1 returns 0 until a key is pressed */
k.c = bioskey(0);
/* function 0 returns the key that is waiting */
printf(“High=[%d],Low=[%d]\n ”,k.c,k .ch[1],k .ch[0]);
}
}
例3:C 提供的随机函数:
void randomize(); //初始化随机数发生器
int random(int ubound); //返回范围在0到ubound - 1之间的一个随机整数。
2、图形模式
不同的显示器适配器(显卡)有不同的图形分辨率。即是同一显卡, 在
不同模式下也有不同分辨率。因此, 在屏幕作图之前, 必须根据显卡种类将显示器设置成为某种图形模式。
VGALO 0 16色 640*200
VGA VGAMED 1 16色 640*350
VGAHI 2 16色 640*480