为了避免被编程语言固有的复杂性所困扰,有一个被称为卡雷尔(Karel)机器人的微型世界(microworld)的简化环境,可以让编程初学者从中学习理解编程的基本概念,而不必掌握大量无关的细节,让编程初学者更容易理解编程的要点和思维方式。
先看一个效果
Karel 是一个非常简单的教学编程机器人,是斯坦福大学的研究生理查德·帕蒂(Richard Pattis)研制的编程语言教学机器人,可以通过一组指令指挥 Karel 在它的世界里执行某些任务。Karel 的编程语言的规则与其他更复杂的语言类似。不同之处在于 Karel 的编程语言非常小,复杂度较低,你可以通过学习编程解决问题的本质。
本文介绍在Windows PC上如何下载和运行JavaScript版本的卡雷尔(JSKarel)。
JSKarel的安装要点
JSKarel依赖Java,因此需要在计算机上安装JDK。
进入cs106j网站http://cs106j.stanford.edu 点击Software(软件)链接。
您将看到JDK的两个链接(针对32位版本或64位版本)。您应该单击适合您的Windows版本的版本。
因为我的PC安装的是64位的Windows10操作系统,因此选用64-bit版本JDK,执行典型安装,并按照给出的其余说明完成安装。
再下载JSKarel for Windows。这个不需要安装双击打开。
JSKarel解释器窗口
双击JSKarel(JSKarel.jar)就启动了JSKarel解释器(interpreter)窗口分为四个部分,参见下图:
标题栏下,是菜单栏。
左上角,你可以看到卡雷尔的世界查看器,它可以让你看到Karel(卡雷尔)的进度。
左下侧Karel Console(Karel控制台)窗口,允许您输入函数调用并观察它们如何影响Karel(卡雷尔)的世界。
右侧是编辑器窗口,在这里您可以输入新程序并编辑现有程序。
底部包含控制条,其中包含一组图标——可称为控制按钮,允许您控制解释器的操作。
菜单栏中的一些命令项和控制条上的一些控制按钮,功能重复。
Karel 的世界
Karel 的世界由从西向东的大街(street)和从南向北的大道(avenue )所定义。大街和大道的交叉点叫作街角(corner )。Karel 只能被放置在一个街角,必须面对四个标准的罗盘方向之一(北、东、南、西)。在下面的示例世界中,Karel 在第1 大街和第1 大道的街角处,并且面向东方。
例子中可以看到Karel 的世界的其他几个组成部分。Karel 前面那个灰色的 菱形物体是一个蜂鸣器(beeper )。当Karel 和蜂鸣器在同一个街角时,才能听到这些声音。例如,图中此时,Karel 并未意识到蜂鸣器的存在,只有当Karel 移动到下一个街角时才会发现它。图中的实线是墙壁(wall )。Karel 的世界总是由边缘的墙壁包裹着,并且也可能包含内墙。
创建和编辑世界
创建和编辑世界
你需要知道的另一件事——特别是如果你计划参加卡雷尔竞赛的话——是如何创建新的世界和编辑现有的世界。
使用“编辑世界”按钮会弹出编辑调色板(palette),其中包含一堆图标,允许您编辑当前世界。
•调色板右侧的大方块包含一对数字,允许您指定世界的大小。如果你点击这个图标,你可以输入一个新的尺寸,它由两个用x隔开的整数组成。第一个整数是道(列数)的数量;第二个整数是街(行数)的数目。改变世界的大小会删除所有方块和内墙,所以你需要在编辑之前设置世界的大小。最大的世界大小为50x50。
•按钮允许您创建和删除墙壁。要创建墙壁,请选择绘制墙壁工具。如果你去地图上,点击街角之间的空间,墙壁将在这些空间创建。如果你以后需要拆除这些墙,你可以点击擦除墙工具,然后回到地图,以消除不需要的墙。
•五个蜂鸣器形状的工具允许您更改正方形上的蜂鸣器数量。空的蜂鸣器工具会在您选择的任何街角放置一个蜂鸣器。标有+和–符号的工具会添加一个蜂鸣器或从街角中删除一个。标有0和∞的工具将拐角处的蜂鸣器计数分别设置为0或无穷大。如果您选择其中一个工具,然后单击工具区域中的蜂鸣器袋图标,您可以调整Karel袋子中的蜂鸣器数量。
•四个卡Karel(卡雷尔)形状的工具允许您改变卡雷尔面对的方向。如果您需要将Karel移动到新的起始位置,请单击世界视图中的Karel并将其拖动到某个新位置。如果你需要把蜂鸣器放在Karel所在的街角,你必须先把Karel移到另一个街角,调整蜂鸣器的数量,然后把Karel移回来。
•各种颜色的方块可以让你画出卡雷尔世界的各个街角。
•当你完成后,你可以选择Save World工具将新世界保存到文件中。用 “不要保存世界”工具将更新后的世界返回给卡雷尔解释器,但不会将其保存在文件中。
Karel 的内置函数
Karel 运行程序时执行的操作称为函数(function)。Karel 的内置函数有4个:
Karel 的活动有特定的限制。如果 Karel 试图做一些非法的事情,如穿过墙壁或拾起一个不存在的蜂鸣器,则会出现错误状态(error condition)。每当出现错误时,Karel 都会显示一条消息,说明哪里出错了,并停止执行程序。
使用库函数
对于最常见的操作,以一种方便其他程序重用的方式存储它们是有意义的。在计算机科学中,有用的函数和其他程序组件的集合称为程序库或库(library)。例如,turnRight函数——向右转和同样有用的 turnAround函数——旋转 180 度,都包含在一个名为 turns 的特殊 Karel 程序库,你可以在程序开始处简单地引入一行代码:
"use turns";
学习 Karel 编程就是要弄清楚如何使用 Karel 有限的操作集来解决特定问题。
Karel 编程语言具有定义新函数的能力——用户自定义函数。当你有一个用于执行某些有用的任务(比如向右转)的操作序列时,可以给这个序列起个名称。用一个新名称封装指令序列的操作称为定义函数(defining a function)。定义函数的格式如下:
function name() {
构成函数体的一些语句
}
Karel 编程语言的控制语句(control statement)
有以下两类:
1. 条件语句(conditional statement)。条件语句指定程序中的某些语句仅在特定条件成立时才执行。在 Karel 中,使用 if 语句指定条件执行。
if (条件测试) {
当条件为真时执行的一些一句
}
或者
if (条件测试) {
当条件为真时执行的一些一句
} else {
当条件为假时执行的一些一句
}
可以被 Karel 测试的条件如下:
2. 循环语句或迭代语句(iterative statement)。循环语句指定程序中的某些语句应该重复执行,形成程序员所谓的循环(loop)。Karel 支持两种循环语句,一种是 repeat语句,它允许你按固定次数重复执行一组指令;另一种是 while 语句,它允许你只要某些条件保持不变,可以重复执行一组指令。
repeat 语句如下所示:
repeat ( 重复的次数 ) {
需要重复执行的语句
}
while 语句的通用形式如下所示:
while ( 条件测试 ) {
需要重复执行的语句
}
待续