- 1、本文档共19页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
这节主要讲NES中字符(串 )的输入。
在正式讲之前,我再添加几个和手柄输入相关的内容。
上一节我们定义了两各和按键状态相关的宏:
#define presskey(k) (key (k))
#define iskey(k) (key == (k))
要求我们要判断的按键值是存放在变量key中,所以我们一般可以把key定义为全局变量,这样一来我们在要求手柄输入的函数中就不用再定义key了,而且可以节省一部分内存,要知道在NES中内存是十分有限的,能省则省嘛(可能是这久闹干旱,省的观念有所加深)。。。
还有,十分发现在有些游戏中某种动作(或事件)是只在我们按下按钮时发生的,如果我们一直按着它也不会再发生,只有当我们松开按钮再按下去时才会再次发生。我们约定这种事件叫做downkey(),它和presskey()、iskey()是一样的。
下面我们来完成downkey():
聪明的你也许会发现了,要判断按键是不是刚按下而不是刚才就一直按着的话我们还需要一个保存上一次判断时按键的键值,我们再约定这个变量是okey,它是oldkey的简写(以后你会发现用于保存上一次值的变量我一般都是用o 开头的),同样它和key一样可以声明为全局变量。
下面是实现的代码:
#define downkey(k) (okey!=key (k)key) //okey不等于key并且当前按下了按钮k
同样我们可以实现按钮释放的判断:
#define upkey(k) (okey!=key (k)okey) //okey不等于key并且当前没按下k
下面来做一个简单的应用,我们只用来测试按键A,代码如下:
#include conio.h
#include nes.h
#include stdio.h
typedef unsigned char u8;
#define address(add) (*(u8 *)(add))
#define button_A 0x80
#define button_B 0x40
#define button_SELECT 0x20
#define button_START 0x10
#define button_UP 0x08
#define button_DOWN 0x04
#define button_LEFT 0x02
#define button_RIGHT 0x01
#define presskey(k) (key (k))
#define iskey(k) (key == (k))
#define downkey(k) (okey!=key (k)key)
#define upkey(k) (okey!=key (k)okey)
u8 key=0,okey=0; //定义全局变量key和okey
u8 read_joystick_1() //读手柄1
{
u8 n=8,joy_state=0;
address(0x4016)=01;
address(0x4016)=00;
while(n){
joy_state=(joy_state1)|address(0x4016)1;
--n;
}
return joy_state;
}
void main() //主函数
{
int i;
while(1){
key=read_joystick_1(); //读取手柄一的键值
if(presskey(button_RIGHT))i++; //presskey()事件
if(presskey(button_LEFT))i--;
if(downkey(button_UP))i++; //downkey()事件
if(downkey(button_DOWN))i--;
if(upkey(button_A))i++; //upkey()事件
if(upkey(button_B))i--;
gotoxy(1,1);
cprintf(i=%d ,i); //输出i
okey=key; //刷新okey的值,方便下一次判断
}
}
编译,运行,没错误的话会得到如下运行结果:
当你按下或松开不同的按钮时会i的值会发生不同的变化:
按下UP或DOWN时,i值增加或减少1
按着LEFT或RIGHT不动时,i值连续变化
松开A或B时,i值变化1
如果你理解了这个程序那说明你对这几个事件是理解了。
下面是这几个按钮事件的宏定义:
#define presskey(k) (key (k))
#define iskey(k) (key == (k))
#define downkey(k) (okey!=key (k)key)
#define upke
您可能关注的文档
- (机械专业)大学生职业生涯规划书范文三篇6046196.doc
- 《职业生涯规划》教案3.doc
- 【2011财务管理资料】职业生涯规划范文走出属于自己人.doc
- 311英语1班 赖杏梅 职业规划(已打印).doc
- 2012职业发展规划考试试题.docx
- 2014上海英语高考新题型.doc
- C# 大量函数.doc
- LCD1602 44key UART小程序.doc
- LUA TABLE 遍历数组的应用.docx
- Unit 4 Don't eat in class 单元导学案(6课时).doc
- Excel数据获取与处理_全套PPT课件.pptx
- Office 2010办公应用立体化教程(微课版)全套PPT课件.pptx
- 办公自动化技术(Windows10+WPSOffice)全套PPT课件.pptx
- 应用文写作教程(慕课版)全套PPT课件.ppt
- Web前端开发任务教程(HTML+CSS+JavaScript+jQuery)全套PPT课件.ppt
- 新媒体运营实战技能(第3版慕课版)全套PPT课件.pptx
- 财经基本技能与出纳实务(第2版)全套PPT课件.ppt
- 企业财务会计(微课版)全套PPT课件.pptx
- 财务管理(微课第3版)全套PPT课件.pptx
- 新网络营销:新工具 新思维 新方法-全套PPT课件.pptx
文档评论(0)