- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言综合实验教程(有关画图,声音,硬件等操作)
C大型程序设计 序言
本课程面向有一定C语言基础的学员,可以实现用C语言编写比如贪吃蛇,俄罗斯方块等小游戏,建议可以先学习本网站C语言(做超链接)部分的课程。当然需要指出的是,本课程仅用C语言实现,由于用TC(Turbo C 2.0)制作, 它是非常早期的编程软件,因此效果比较差,用到的许多内容早已淘汰。但是作为学习底层的一些编程技术,作为C语言的深入学习,是很有帮助的。(有关TC无法和WIN7兼容,部分双核的电脑不支持TC等相关问题请参照附录1(做超链接),有关TC的环境设置及相关设置和操作请看附录2)
第一章 编程技术实现
本章内容简介:本章主要介绍如何实现键盘和鼠标的输入,图形图像技术,动画技术,发声技术,汉字显示技术,精确的时间控制技术。是编写大型程序的基本功。虽然每个技术所涉及的内容很少,所提及的函数也很少,但是当它们组合在一起的时候,就可以编写大型程序。
一、键盘:
首先有必要介绍一下计算机是如何来处理键盘输入的数据的
键盘里面有一个微处理器,用来扫描和检测每个键的按下或者抬起的状态,然后向主机传送一个字节的键盘扫描码,键盘扫描码翻译成对应的ASCⅡ码(ASCⅡ的名词解释可以在本网站的《计算机基础》课程里搜索到(做超链接))。
作为编程来说,只要知道每个按键都有对应的ASCⅡ码。由于ASCⅡ码不能将键盘上所有的按键全部包括,因此有些控制键如Ctrl、Alt、End、Home和Del等用扩充的ASCⅡ码表示。至于每个按键所对应的ASCⅡ码到底是什么,这里介绍一个函数可以实现该功能:
int bioskey int cmd
该函数声明在bios.h头文件中,所以调用之前需要在程序开始的位置写上 #include ,(以后如果第一次碰到的函数可以在TC根目录下的include文件夹中的头文件中查找,可以用记事本打开。)
参数 cmd 用来确定该函数的三个功能,具体如下表1-1所示
表1-1
参数cmd的具体数值 实现的功能 0 bioskey 0 返回按键的键值——两个字节的整型数据。若没有键按下,该函数一直等待,直到有键按下(这种情况有时会影响效率,在之后的例2中会看到有一种方法可以实现:在一定时间内没有按键就去执行下面的代码)。
当按下时,返回该键所对应的ASCⅡ码或其扩展的ASCⅡ码。具体请看例1; 1 bioskey 1 查询是否有键按下。 若没有键按下,返回0;若有键按下,返回非零值 2 bioskey 2 将返回一些控制键是否被按过,按过的状态由该函数返回的值来表示,具体请看表2 如选参数cmd为2时,当某位为1时,表示相应的键已按,或相应的控制功能已有效,若key值为0x09, 那么从表1-2中可以得知右Shift键和Alt键被按下,因为只有0x01和0x08相加和为0x09。 若该函数还是无法理解也不影响最后编小游戏,故此处不做详细介绍。
表1-2
字节位 对应的16进制数 含义 字节位 对应的16进制数 含义 0 0x01 右Shift键被按下 4 0x10 Scroll Lock已打开 1 0x02 左Shift键被按下 5 0x20 Num Lock已打开 2 0x04 Ctrl键被按下 6 0x40 Caps Lock已打开 3 0x08 Alt键被按下 7 0x80 Inset 已打开
例1:
#include
int main int key; key bioskey 0 ;
printf “%x”,key ; /* 该例子中,若按下键盘上的UP (↑)键,屏幕会显示4800(16进制),用 16进制是一种习惯, 在上表2中也体现了这种习惯的合理性。*/
例2
#include
#include
int main 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”); 这种方法对于最后编小游戏非常有用,在最后的吃豆子放炸弹(超链接)例子中会再次提到 */
最后再介绍一个函数:
int kbhit void ; 该函数声明在conio.h头文件中,所以调用之前需要在程序开始的位置写上 #include
若按了键盘,该函数返回1,否则返回
文档评论(0)