c语言键盘操作Word格式文档下载.docx

上传人:b****1 文档编号:3646717 上传时间:2023-05-02 格式:DOCX 页数:145 大小:537.10KB
下载 相关 举报
c语言键盘操作Word格式文档下载.docx_第1页
第1页 / 共145页
c语言键盘操作Word格式文档下载.docx_第2页
第2页 / 共145页
c语言键盘操作Word格式文档下载.docx_第3页
第3页 / 共145页
c语言键盘操作Word格式文档下载.docx_第4页
第4页 / 共145页
c语言键盘操作Word格式文档下载.docx_第5页
第5页 / 共145页
c语言键盘操作Word格式文档下载.docx_第6页
第6页 / 共145页
c语言键盘操作Word格式文档下载.docx_第7页
第7页 / 共145页
c语言键盘操作Word格式文档下载.docx_第8页
第8页 / 共145页
c语言键盘操作Word格式文档下载.docx_第9页
第9页 / 共145页
c语言键盘操作Word格式文档下载.docx_第10页
第10页 / 共145页
c语言键盘操作Word格式文档下载.docx_第11页
第11页 / 共145页
c语言键盘操作Word格式文档下载.docx_第12页
第12页 / 共145页
c语言键盘操作Word格式文档下载.docx_第13页
第13页 / 共145页
c语言键盘操作Word格式文档下载.docx_第14页
第14页 / 共145页
c语言键盘操作Word格式文档下载.docx_第15页
第15页 / 共145页
c语言键盘操作Word格式文档下载.docx_第16页
第16页 / 共145页
c语言键盘操作Word格式文档下载.docx_第17页
第17页 / 共145页
c语言键盘操作Word格式文档下载.docx_第18页
第18页 / 共145页
c语言键盘操作Word格式文档下载.docx_第19页
第19页 / 共145页
c语言键盘操作Word格式文档下载.docx_第20页
第20页 / 共145页
亲,该文档总共145页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

c语言键盘操作Word格式文档下载.docx

《c语言键盘操作Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《c语言键盘操作Word格式文档下载.docx(145页珍藏版)》请在冰点文库上搜索。

c语言键盘操作Word格式文档下载.docx

bioskey

(2)将返回一些控制键是否被按过,按过的状态由该函数返回的值来表示,具体请看表2

 

如选参数n为2时,当某位为1时,表示相应的键已按,或相应的控制功能已有效,若key值为0x09,那么从表1-2中可以得知右Shift键和Alt键被按下,因为只有0x01和0x08相加和为0x09。

若该函数还是无法理解也不影响最后编小游戏,故此处不做详细介绍。

表1-2 

字节位

对应的16进制数

含义

0x01

右Shift键被按下

4

0x10

ScrollLock已打开

0x02

左Shift键被按下

5

0x20

NumLock已打开

0x04

Ctrl键被按下

6

0x40

CapsLock已打开

3

0x08

Alt键被按下

7

0x80

Inset已打开

例1-1:

#include<

intmain()

{

intkey;

key=bioskey(0);

printf(“%x”,key);

}

/*该例子中,若按下键盘上的UP(↑)键,屏幕会显示4800(16进制),用16进制是一种习惯,在上表2中也体现了这种习惯的合理性。

*/

例1-2:

stdio.h>

intmain(){

int 

i,s;

for(i=0;

i<

5000;

i++){

delay

(1);

/*delay()函数用于延时,即使同样的参数会根据不同的实际情况的 

不同而延时不同的时间,精确的时间控制请参阅《精确的时间控制》(超链接)一章*/

if(bioskey

(1)!

=0){

s=1;

break;

}

printf(“hello”);

/* 

该例中用了一个5000次的循环,每次延时1,每次去判断是否有按键被按下,如果有,则跳出循环,马上去执行printf(“hello”);

若5000次循环里面都没有按键按下,在循环结束后,执行printf(“hello”);

这种方法对于最后编小游戏非常有用,在最后的吃豆子放炸弹(超链接)例子中会再次提到 

*/

最后再介绍一个函数:

intkbhit(void);

该函数声明在conio.h头文件中,所以调用之前需要在程序开始的位置写上 

conio.h>

若按了键盘,该函数返回1,否则返回0;

C语言也可以实现鼠标的操作,但由于这种方法效率低,现在的面向对象的编程都不是用C语言的鼠标操作手段。

并且,本课程的一些例子中,也可以不用鼠标的操作,一般只用键盘就可以实现所需要的功能,因此,这里就不做介绍。

第二章文本与图像的显示

第一节 

硬件基础

由于本课程的重点在于让大家体会C语言的进一步用法,所以对于硬件部分的知识(有兴趣的话可以到硬件概论学习硬件知识),本人会在非讲不可的情况下给大家做一介绍,就本人经历而言,没有掌握硬件知识也不影响C语言的应用,但为了知识的完整性,本人就文字图像显示所涉及的硬件知识做一介绍。

对于TC而言,如果想利用C的库函数在屏幕上显示图像,它所支持的显卡类型如下表2-1所示:

表2-1

分辨率

颜色数

显卡类型

320×

200

CGA

640×

16

EGA

350

480

VGA

表格说明:

表中所出现的显卡类型有:

CGA(彩色图形适配器)

EGA(增强型图形适配器)

VGA(视频图形阵列适配器)

之后将介绍TC所支持的模式

第二节文本显示方式

这里所涉及的函数有:

文本窗口大小的设定,窗口颜色的设置,窗口文本的清除和输入输出等函数,在之后会对这些函数做详细介绍。

这些函数包含在conio.h头文件中。

1.voidtextmode(intnewmode)函数

该函数用来定义文本方式,具体如下表所示:

表3-2

显示方式

行×

列颜色

数值

符号常量

40×

25黑白

BW40

25彩色

C40

80×

BW80

C80

25单色

MONO

上一次的显示方式

-1

LASTMODE

表格解释:

该函数设置之后才能用上面所提到的一些文本显示方式下的函数。

当然如果不用该函数,TC会认为是缺省定义,也就是说,它会默认一种模式:

25。

在调用函数时,参数用数值或者用符号常量是一样的,比如textmode(0);

和textmode(BW40);

等效。

2.voidwindow(intleft,inttop,intright,intbottom);

该函数定义屏幕上一个矩形的区域作为窗口。

(left,top)是窗口的左上角坐标,(right,bottom)是窗口右下角坐标,这样一个矩形就唯一确定了。

对于屏幕上的坐标需要解释一下,如下图3-1:

如果屏幕是640×

480分辨率,则坐上角为坐标(0,0),右下角是(640,480)

图3-1:

注意:

该函数中的坐标如果超过了屏幕坐标,TC不会编译报错,但是该函数无效了。

窗口定义之后,用有关的窗口输入输出函数就可以只在此窗口内进行操作而不超出窗口界限。

3.voidtextbackground(intcolor) 

voidtextcolor(intcolor)函数

前者用来设置背景颜色,后者用来设置字符函数。

具体应用会在之后的例子给出

有关颜色参数color的取值具体如下表3-3所示:

表3-3:

适用于前景色或背景色

颜色

前景色,背景色

BLACK

BLUE

绿

GREEN

GYAN

RED

洋红

MAGENTA

BROWN

淡灰

LIGHTGRAY

前景色

深灰

8

DARKGRAY

淡蓝

9

LIGHTBLUE

淡绿

10

LIGHTGREEN

淡青

11

LIGHTGYAN

淡红

12

LIGHTRED

淡洋红

13

LIGHTMAGENTA

14

YELLOW

15

WHITE

闪烁

128

BLINK

另外有函数voidtextattr(intattr)可以同时设置文本的字符和背景颜色。

如要求黄底蓝字:

textattr(BLUE+(YELLOW<

<

4));

<

表示移位运算,在C课程中有介绍(超链接)再如:

要求蓝底黄字并且要闪烁:

textattr(128+YELLOW+(BLUE<

4));

使用时只要根据这两个的框架并结合表2-3就可以自己定义。

最后说明下:

textbackground()和textcolor()函数设置了之后,要用 

clrscr()函数清除窗口,这样才能显示出所设置的颜色。

clrscr()函数会在下一文章具体解释(超链接)。

4.窗口内文本输入输出函数

4.1文本输入函数

窗口定义好之后,文本输入可以采用getch()或getche()函数。

这两个函数定义在stdio.h头文件中。

函数原型分别是:

intgetch(void) 

intgetche(void) 

(void表示没有参数)

它们的区别是:

getch():

读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。

getche():

读入一个字符,键盘输入的时候,屏幕显示所输入的字符。

遇到窗口最右端会自动换行。

4.2文本的输出函数:

intcprintf(char*format,表达式表);

括号中内容的格式跟printf()函数相同(pirnf()在C语言中将诶少超链接),比如cprintf("%d",a)。

intcputs(char*str);

该函数类似于puts()函数(puts()在C语言中介绍超链接),输出一个字符串到窗口。

 

intputch(intch);

输出一个字符到窗口。

这里要解释下,TC虽然可以在屏幕上画多个窗口,但是每次只能处理一个窗口,所以这些函数在都是在当前窗口进行操作,而要对别的窗口操作,需要将定义那个窗口的函数重新调用一次,则那个窗口就成了当前窗口。

以上三个函数都定义在conio.h头文件中。

conio.h是一个C标准库中的头文件。

conio是ConsoleInput/Output(控制台输入输出)的简写,其中定义了通过控制台进行数据输入和数据输出的函数,主要是一些用户通过按键盘产生的对应操作。

5有关窗口或文本整体的操作

voidclrscr(void);

该函数清除窗口中的文本,并将光标移到当前窗口的左上角。

voidclreol(void);

该函数清除当前光标到光标所在行的结尾的所有字符,不改变

标位置。

voiddelline(void);

该函数删除光标所在行的一行字符。

voidgotoxy(intx,inty);

光标定位到坐标(x,y)处,若坐标超出窗口就不起作用了。

intmovetext(intx1,inty1,intx2,inty2,intx3,inty3)

该函数把左上角(x1,y1),右下角(x2,y2)的矩形整体拷贝到左上角为(x3,y3)的一个新矩形内。

原窗口仍保留。

intgettext(intx1,inty1,intx2,inty2,void*buffer) 

;

该函数把左上角(x1,y1)到右下角(x2,y2)的窗口内的文本全部存到buffer指针(指针的内容在C语言课程中介绍,超链接)。

其中的坐标是指屏幕的绝对坐标。

intputtext(intx1,inty1,intx2,inty2,void*buffer) 

相对应于上面这个函数,该函数把指针buffer中的内容拷贝到左上角(x1,y1)到右下角(x2,y2)的窗口内。

下面一个例子是对以上的几个函数的运用。

该例子实现了绘制左右两个窗口,用Tap键切换光标。

可以在光标所在窗口输入文本,ESC键退出。

例子3-1:

#include<

charleftbuf[40*25*2];

/*切换时保存左窗口文本*/

charrightbuf[40*25*2];

/*切换时保存右窗口文本*/

intleftx,lefty;

/*切换时保存左窗口当前坐标*/

intrightx,righty;

/*切换时保存右窗口当前坐标*/

voiddraw_left_win();

/*重绘左边窗口*/

voiddraw_right_win();

/*重绘右边窗口*/

intmain()

intturn;

textmode(C80);

/*采用之前提及的80×

25彩色显示模式*/

textbackground(0);

textcolor(WHITE);

clrscr();

/*清屏,也使得以上三个函数起作用*/

/*以下4句话定义右边窗口为绿色背景,红色前景*/

window(41,2,79,24);

textbackground

(2);

textcolor(4);

/*清屏,也使得以上三个函数起作用,单步调试可以发现,未执行该函数,屏幕不会出现右窗口*/

gettext(41,2,79,24,rightbuf);

/*用rightbuf指针存放右窗口文本*/

window(2,2,40,24);

/*左边窗口为蓝色背景,白色前景*/

textbackground

(1);

textcolor(15);

gettext(2,2,40,24,leftbuf);

turn=0;

/*初始激活左窗口*/

for(;

{

if(key==0x11b) 

/*ox11b是ESC键的ASCII码,如果按下ESC键,退出*/

exit(0);

/*获取窗口输入的文本的ASCII码值*/

if(key==0xf09)/*ox11b是tap键的ASCII码,如果按下tap键,切换窗口*/

if(turn==0) 

/*切换到左窗口*/

leftx=wherex();

lefty=wherey();

draw_right_win();

turn=1;

elseif(turn==1) 

/*切换到右窗口*/

rightx=wherex();

righty=wherey();

draw_left_win();

else

putch(key);

/*当前光标处显示新输入的文本字符*/

voiddraw_right_win()

puttext(41,2,79,24,rightbuf);

gotoxy(rightx,righty);

voiddraw_left_win()

puttext(2,2,40,24,leftbuf);

gotoxy(leftx,lefty);

第三节图形显示方式

TC有一个图形库文件(graphic.lib),提供了许多有用的图形函数,这些函数均包含在graphics.h头文件中。

TC所支持的图形模式如下表所示(和文本显示类似,表格就不具体介绍了):

表4-1:

适配器

模式

CGAC0

CGAC1

CGAC2

CGAC3

CGAHI

EGALO

EGAHI

VGALO

VGAMED

VGAHI

TC支持的都是早期的模式,自己编小游戏时也只能在差的里面挑最高的了——VGAHI

1. 

voidfarinitgraph(intfar*pdriver,intfar*pmode,charfar*path) 

该函数用来设置图形方式,也就是选择上表中一种模式。

按照习惯,该函数使用时一般先定义两个变量graphdiver,graphmode。

下面以表中最后一种模式为例,说明该函数具体的使用方法。

intgraphdiver=VGA;

intgraphmode=VGAHI;

initgraph(&

graphdiver,&

graphmode,"");

最后一个参数写作""是表示驱动程序路径就在程序文件当前所在目录,所以方便起见,一般把TC目录下的BGI文件中的所有文件(驱动程序都在里面了)都拷贝到程序文件所在目录,那么例子中的程序才可以正常运行,否则要写路径,比如"d:

\\tc\\BGI" 

此外,若设置intgraphdiver=DETECT;

那么TC会自动检测最高的显示模式,graphdiver参数不用赋值。

(如果出现BGIError:

Graphicsnotinitialized(use'

initgraph'

)错误,可能是上述路径的问题,也有可能是机子的问题,请参照附录)

一旦调用了该函数,显示器就变成了图形显示模式,而要回到上一节所说的文本显示模式,需要调用函数 

closegraph();

2. 

voidfarsetcolor(intcolor);

voidfarsetbkcolor(intcolor);

这两个函数分别用来设置前景色(画图函数所画出的图形的颜色)和背景色。

下面表4-2介绍了VGAHI模式下color参数的16种情况。

这也同样适用于EGAHI模式,其他模式的不作介绍了。

表中的所代表的颜色和第三讲文本显示模式下的表3-3相同,看英文就可以知道颜色。

表4-2:

EGA_BLACK

EGA_BLUE

EGA_GREEN

EGA_GYAN

EGA_RED

EGA_MAGENTA

EGA_BROWN

EGA_LIGHTGRAY

EGA_DARKGRAY

EGA_LIGHTBLUE

EGA_LIGHTGREEN

EGA_LIGHTGYAN

EGA_LIGHTRED

EGA_LIGHTMAGENTA

EGA_YELLOW

EGA_WHITE

3. 

voidfarsetviewport(intx1,inty1,intx2,inty2,clipflag);

和文本显示方式类似,在图形方式下,也可以利用该函数设置一个左上角(x1,y1)到右下角(x2,y2)的窗口。

clipflag参数为0时,所画图形即使超出了该窗口,仍将显示超出部分;

clipflag参数非0时(比如写作1),所画图形超出该窗口的部分将不显示。

设置窗口之后,就可以用相对坐标来定位了,也就是说图形的左上角(x1,y1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2