控制台RPG开发教程5: 筹建地图工作组3


本次教程的内容:

  1. 循环指令
  2. 字符的ASCII码
  3. 条件判断指令


这是昨天的代码

# include <iostream>
# include <conio.h>
using namespace std;
int main(){
    int a;
    a= getch();
    cout << a << endl;
    a= getch();
    cout << a<< endl;
}

我们运行了几次后,会记录下来4个方向键的数据
上= 72
下= 80
左= 75
右= 77
但每次为了看一个键,都得重新运行一次,未免太麻烦了。
我们希望一直重复运行,直到我们记录下所有的必须的信息。
这里介绍第三种出现的指令类型——循环指令。
我们把代码这样修改一下。

# include <iostream>
# include <conio.h>
using namespace std;
int main(){
    int a;
    while(1){
        a= getch();
        cout << a << endl;
    }
}


我们看代码中的第6行while(1),它的含义是后面大括号内的代码将无限循环。
具体来说,当精灵执行代码到第9行的}时,它实际执行的是无条件跳转回到第6行继续执行。
第6行的本质是一个条件分支指令,它的含义是当精灵执行到第6行时,它会首先计算后面括号里的内容。
如果为真(不是0),继续运行下一句;否则,直接跳转到大括号后面的第1句。
在这里,大括号没有其他语句了,如果能跳转出来,就意味着程序的结束。
但由于我们在while的括号中写的是1,所以它永远也不可能为0,于是代码将永远运行下去。

我们注意到原来的两遍getch()现在只保留一次了,因为现在本来就是无限循环,早已不止两次了。

不用担心我们的精灵得不到休息,我们如果想停下程序,只须关闭控制台的黑窗口即可。
我们可以执行一次这个程序,试验键盘上的各种键,看看输出的是什么。

我们会注意到如果大写锁关闭时,我们点击a,b,c,d...等字母键会出现97,98,99...等数字;当打开大写锁时,点击a,b,c,d...等字母键,相当于我们实际输入的是A,B,C,D...屏幕上会显示出65,66,67...等数字;当我们点击0,1,2,3...等数字键时,我们看到屏幕上显示出的是48,49,50...等数字。这些数字,被称为对应字符的ASCII码(读音:阿斯克码)。
我们知道计算机中实际上只有数字,字符进入计算机必须先通过一个约定,用数字代表对应的字符。ASCII正是这样一个被广泛使用的约定。

你还可以继续看其他键的ASCII码,比如+是43,-是45,等等,其中有三个键,值得我们记录一下,后面的工作中会用到。一个是ESC键,在键盘的左上角,它的ASCII值是27;一个是回车键,ASCII值是13;一个是空格键,ASCII值是32。

接下来,我们看看地图工作组的输入部门,如何在接收到不同键盘指令时,进行不同的处理。
我们引入最后一种指令类型:分支判断。
看下面的代码:

# include <iostream>
# include <conio.h>
using namespace std;
int main(){
    int a;
    while(1){
        a= getch();
        if (a==72) {
           cout << "向上移动一格" << endl;
        }
        if (a==80) {
           cout << "向下移动一格" << endl;
        }
    }
}


代码第8行的if就是典型的分支判断指令。
它的含义是,当if后面的括号中的值为真(不是0)时,执行后面大括号内的第一条指令,否则跳到大括号后面的第一条指令。
这样,当我们的程序运行时,我们会发现,除了点击方向键上和下,屏幕会有对应的输出外,其他键盘都没有反应了。
这也正符合了我们的需求。

课程小结:

这次的课程讲了字符的ASCII码,以及循环指令和分支判断指令,至此全部的指令类型都已经学过了。同学们看可以尝试修改最后的代码,支持全部的4个方向键和两个功能键:
方向键:显示对应的“向*移动一格”
ESC:显示“打开菜单”
空格/回车: 显示“确定选择”

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

圣手书生肖让

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值