斯坦福JSKarel编程机器人使用介绍

news2024/12/26 11:13:49

斯坦福JSKarel编程机器人使用介绍

为了避免被编程语言固有的复杂性所困扰,有一个被称为卡雷尔(Karel)机器人的微型世界(microworld)的简化环境,可以让编程初学者从中学习理解编程的基本概念,而不必掌握大量无关的细节,让编程初学者更容易理解编程的要点和思维方式。

斯坦福Karel是一门面向初学者的教学编程语言。先看一个效果:

一、Karel简介

Karel 是一个非常简单的编程机器人,最早由是斯坦福大学的研究生理查德·帕蒂(Richard Pattis)研制推出,帕蒂以捷克剧作家卡雷尔·恰佩克(KarelČapek)的名字命名他的机器人为 Karel。可以通过一组指令指挥 Karel 在它的世界里执行某些任务。Karel 的编程语言的规则与其他更复杂的语言类似。不同之处在于 Karel 的编程语言非常小,复杂度较低,你可以通过它学习编程解决问题的本质。

本文介绍在Windows PC上如何下载和运行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世界或编辑已存在的Karel世界。保存的文件扩展名为.w。

左下侧Karel Console(Karel控制台)窗口,允许您输入函数调用并观察它们如何影响Karel(卡雷尔)的世界。这是一个交互式窗口,在>提示符后,输入指令回车JSKarel解释器立即执行。

右侧是编辑器窗口,在这里您可以输入新程序并编辑现有程序。保存的程序文件扩展名为.k。世界文件的名称(以.w为扩展名)与程序文件(以.k为扩展名)的名称相匹配

底部包含控制条,其中包含一组图标——可称为控制按钮,允许您控制解释器的操作。

菜单栏中的一些命令项和控制条上的一些控制按钮功能重复。

二、JSKarel的使用

Karel 的世界

Karel  的世界由从西向东的大街(street)和从南向北的大道(avenue )所定义。大街和大道的交叉点叫作街角(corner )。Karel 只能被放置在一个街角,必须面对四个标准的罗盘方向之一(北、东、南、西)。在下面的示例世界中,Karel 在第1 大街和第1 大道的街角处,并且面向东方。

例子中可以看到Karel  的世界的其他几个组成部分。Karel 前面那个灰色的 菱形物体是一个蜂鸣器(beeper )。当Karel 和蜂鸣器在同一个街角时,才能听到这些声音。例如,图中此时,Karel 并未意识到蜂鸣器的存在,只有当Karel 移动到下一个街角时才会发现它。图中的实线是墙壁(wall )。Karel  的世界总是由边缘的墙壁包裹着,并且也可能包含内墙。

创建和编辑世界

你需要知道的另一件事——特别是如果你计划参加卡雷尔竞赛的话——是如何创建新的世界和编辑现有的世界。

使用“编辑世界”(Edit World)按钮会弹出编辑调色板(palette),其中包含一堆图标,允许您编辑当前世界。

•调色板右侧的大方块包含一对数字,允许您指定世界的大小。如果你点击这个图标,你可以输入一个新的尺寸,它由两个用x隔开的整数组成。第一个整数是道(列数)的数量;第二个整数是街(行数)的数目。改变世界的大小会删除所有方块和内墙,所以你需要在编辑之前设置世界的大小。最大的世界大小为50x50。

按钮允许您创建和删除墙壁。要创建墙壁,请选择绘制墙壁工具。如果你去地图上,点击街角之间的空间,墙壁将在这些空间创建。如果你以后需要拆除这些墙,你可以点击擦除墙工具,然后回到地图,以消除不需要的墙。

•五个蜂鸣器形状的工具允许您更改正方形上的蜂鸣器数量。空的蜂鸣器工具会在您选择的任何街角放置一个蜂鸣器。标有+和–符号的工具会添加一个蜂鸣器或从街角中删除一个。标有0和∞的工具将拐角处的蜂鸣器计数分别设置为0或无穷大。如果您选择其中一个工具,然后单击工具区域中的蜂鸣器袋图标,您可以调整Karel袋子中的蜂鸣器数量。

•四个卡Karel(卡雷尔)形状的工具允许您改变卡雷尔面对的方向。如果您需要将Karel移动到新的起始位置,请单击世界视图中的Karel并将其拖动到某个新位置。如果你需要把蜂鸣器放在Karel所在的街角,你必须先把Karel移到另一个街角,调整蜂鸣器的数量,然后把Karel移回来。

•各种颜色的方块可以让你画出卡雷尔世界的各个街角。

•当你完成后,你可以选择Save World工具将新世界保存到文件中。用 “不要保存世界”工具将更新后的世界返回给卡雷尔解释器,但不会将其保存在文件中。保存的文件名扩展名为.w。

上面介绍了控制条上“编辑世界”(Edit World)按钮的功能,下面介绍其他按钮的功能。

Reset按钮,完成Karel Console(Karel控制台)的重置。

控制条左侧的按钮是Load按钮,它会弹出一个对话框,允许您选择要编辑的程序。装载.k扩展名的程序文件,也会自动加载.w扩展名的世界文件。世界文件的名称(以.w为扩展名)与程序文件(以.k为扩展名)的名称相匹配。

控制条右端的Compile按钮触发编译过程。编译过程发现存在问题时,将突出显示这一行,并弹出错误对话框,例如:

这种类型的错误被称为语法错误,因为您所做的事情违反了语法规则。语法错误通常很容易发现,因为JSKarel解释器会帮您找到它们。

保存程序,可用Save按钮

在尝试运行程序之前,保存文件以便将更改记录在文件系统中。

运行程序

有两种方法可以在程序编译成功后运行它。

第一种方法是使用控制台窗口输入主函数的名称,后面跟着指示函数调用的空括号。

第二种方法通过单击Run按钮获得相同的结果。

在运行时,可能发生错误,称为逻辑错误。例如:

与语法错误不同,编译器对逻辑错误提供的帮助相对较少。你写的程序是完全合法的——遵循了语言的语法规则,只是没有做正确的事情——不能正确解决问题。

调试(Debugging

由于程序员的某些逻辑错误而不能给出正确结果的程序被称为有bug。消除这些错误的过程称为调试。调试是一种只有通过实践才能掌握的技能。在试图找到程序错误时,了解程序正在做什么比了解程序没有做什么重要得多。

通过观察程序的运行,就可以获得关于程序正在做什么的大量信息。“速度”按钮包括一个类似速度表的指针,您可以在按钮中拖动它来更改速度。如果你把拨盘向左转,卡瑞尔就会跑得更慢。如果你把它向右转,它会跑得更快。放慢卡雷尔的速度可能会有所帮助,这样你就可以更仔细地观察程序的运行情况。

一个更有用的调试策略是让Karel解释器一步一步地运行程序,这样你就可以看到它在做什么。单击编辑器窗口左侧的灰色区域,可以在某一特定行停止程序。如果该行对应于程序语句,Karel编辑器将在该行上放置一个断点(您可以通过再次单击来清除现有断点),这将迫使解释器在程序中遇到该行时停止。这时,您可以使用两种工具中的任何一种来逐步完成您的程序。

Step按钮使卡雷尔解释器前进一步,如果当前行是Karel的原始命令(primitive commands)之一,那么Karel只是执行它并等待下一个命令。如果当前行是您定义的函数,Karel会启动调用该函数的过程,然后在执行第一行之前再次停止。

Step Over按钮使卡雷尔解释器执行突出显示的行,如果当前行是Karel的原始命令(primitive commands)之一,则此按钮的行为与Step按钮完全相同。如果当前行是您定义的函数,那么Karel会在停止之前执行整个函数调用。其特性(feature)允许您一次执行整个函数。

Karel Console(Karel控制台)的使用

JSKarel程序设计

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 ( 条件测试 ) {

  需要重复执行的语句

}

待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100755.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GaussDB for openGauss部署形态

前言 华为云数据库GaussDB是华为自主创新研发的分布式关系型数据库,具有高性能、高可用、高安全、低成本的特点,本文带你详细了解GaussDB数据库的部署形态。 1、GaussDB部署形态三种类型 GaussDB部署形态:单机 独立部署是将数据库组件部署…

10.17课上(七段显示器,递归异或与电路)

异或的递归与数电实现 用二选一选择器实现异或函数 在异或当中,如果有一项为0,就可以把那一项消掉;如果有一项为1,就是把剩下的所有项运算完的结果取反 (由此在算法当中可以采用递归解决) 当w1为0时&…

电脑蓝牙与ESP32蓝牙连接,让电脑发现ESP32

win11蓝牙默认只查看常见蓝牙设备。ESP32创建的蓝牙很有可能是看不到的。 再蓝牙设备发现一栏选择高级&#xff0c;才能查看所有蓝牙设备。 只要下面几行代码&#xff0c;就能让PC发现ESP32 #include <BLEDevice.h> // 引入相关库void setup() {BLEDevice::init("…

使用 PDB Alignment Tool 对 PDB 中多个蛋白结构进行比对

0. 说明&#xff1a; 利用 PDB 提供的在线工具 PDB Alignment Tool (https://www.rcsb.org/alignment) 对 PDB 中多个蛋白进行结构比对&#xff0c;并将比对结果输出&#xff0c;用于后续计算不同链上氨基酸之间的距离。 1. 步骤&#xff08;以 3GBM_A, 3FKU_A 和 2FK0_A 为例…

Linux学习——进程状态

目录 一&#xff0c;进程状态 1&#xff0c;进程状态的分类 2.状态的本质 3.进程状态详解 1.运行状态 2.阻塞状态 3.挂起状态 4.Linux内核中的状态分类 一&#xff0c;进程状态 1&#xff0c;进程状态的分类 如下图&#xff1a; 在计算机中我们的状态的分类便如下图所示…

16-k8s-configMap配置管理中心

文章目录 一、相关概念二、基于目录创建configMap三、基于文件创建configMap四、基于自定义参数创建configMap五、configMap使用六、configMap热更新 一、相关概念 简介 为了解决传统容器中配置的挂载、变更、管理等问题&#xff0c;在k8s中引入了一个叫做configmap的资源对象&…

采用医疗AI、自然语言处理技术的java智能导诊导医系统源码

一套java智能导诊导医系统源码&#xff08;演示自主版权商业项目应用&#xff09; 随着人工智能技术的快速发展&#xff0c;语音识别与自然语言理解技术的成熟应用&#xff0c;基于人工智能的智能导诊导医逐渐出现在患者的生活视角中&#xff0c;智能导诊系统应用到医院就医场景…

同为科技TOWE智能PDU引领数据中心机房远控用电安全高效

随着数据中心的环境变得更加动态和复杂&#xff0c;许多数据中心都在对数据中心管理人员施加压力&#xff0c;要求提高可用性&#xff0c;同时降低成本&#xff0c;提升效率。新一代高密度服务器和网络设备的投入使用&#xff0c;增加了对更高密度机架的需求&#xff0c;并对整…

《持续交付:发布可靠软件的系统方法》- 读书笔记(五)

持续交付&#xff1a;发布可靠软件的系统方法&#xff08;五&#xff09; 第二部分——部署流水线第 5 章 部署流水线解析5.1 引言5.2 什么是部署流水线5.3 部署流水线的相关实践5.3.1 只生成一次二进制包5.3.2 对不同环境采用同一部署方式5.3.3 对部署进行冒烟测试5.3.4 向生产…

vcpkg manifest 的使用

最近项目上要使用 CMakeLists 管理&#xff0c;由于 Windows 版本有依赖到 vcpkg 提供的库&#xff0c;所以需要使用 vcpkg manifest 来统一设置库的版本&#xff0c;方便后续维护 推荐一个文章&#xff0c;介绍的可以说是非常全面了 VCPKG 特性 - Versioning 不过里面也有一些…

『C++ - STL』之优先级队列( priority_queue )

文章目录 前言优先级队列的结构优先级队列的模拟实现仿函数 最终代码 前言 什么是优先级队列&#xff0c;从该名中可以知道他一定有队列的一定属性&#xff0c;即先入先出(LILO)&#xff0c;而这里的优先级则可以判断出它的另一个特点就是可以按照一定的条件将符合该条件的先进…

Debian衍生桌面项目SpiralLinux12.231001发布

导读SpiralLinux 是一个从 Debian 衍生出来的桌面项目&#xff0c;其重点是在所有主要桌面环境中实现简洁性和开箱即用的可用性。 spiral Linux 是为刚接触 Linux 世界的人们量身定制的发行版。这是 GeckoLinux 开发人员的创意&#xff0c;他更喜欢保持匿名。尽管他不愿透露姓…

图文详解!带你认识 ancert:硬件兼容性标准实现工具!| 龙蜥技术

编者按&#xff1a;大家都知道 OS 其实是硬件设备资源利用的抽象&#xff0c;所以 OS 和各个硬件设备之间是否兼容&#xff0c;对 OS 的稳定性是非常关键。今天&#xff0c;龙蜥社区硬件兼容性 SIG Maintainer 吴朝峰为大家介绍龙蜥社区硬件兼容性认证的步骤和流程&#xff0c…

python项目之大学生就业信息管理系统设计与实现

项目简介 大学生就业信息管理系统实现了以下功能&#xff1a; 管理员功能&#xff1a;权限认证&#xff0c;职位管理&#xff0c;企业管理&#xff0c;留言管理&#xff0c;用户管理&#xff0c;投递管理。用户功能&#xff1a;首页&#xff0c;招聘会&#xff0c;留言板&…

5.Vue-在Vue框架中实现Vue的增删改查

题记 在vue框架中实现vue的增删改查&#xff0c;以下是具体操作流程和代码 编写TestView.vue文件 TestView.vue文件如下&#xff1a; <template> <div id"app"> <h1>学生列表</h1> <input type"text" v-model"searchQue…

Nodejs原型链污染学习

文章目录 前置知识JavaScript数据类型prototype原型同步和异步child_process模块 原型链污染利用条件 前置知识 JavaScript数据类型 let和var关键字的区别 使用var或let关键字可以定义变量 let和var的区别如下&#xff1a; var是全局作用域&#xff0c;let 只在当前代码块内…

掌握Go编程中的错误处理和日志记录

构建稳健可靠应用的全面指南 错误处理是编写可靠和稳健软件应用的重要方面。在任何编程语言中&#xff0c;错误是不可避免的&#xff0c;如何处理错误会极大地影响代码的质量和稳定性。在本文中&#xff0c;我们将探索Go中的错误处理世界&#xff0c;理解其重要性&#xff0c;…

修炼k8s+flink+hdfs+dlink(五:安装dockers,cri-docker,harbor仓库)

一&#xff1a;安装docker。&#xff08;所有服务器都要安装&#xff09; 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…

通过商品链接查询淘宝商品详情数据,可以拿到商品标题,商品价格,商品库存,商品销量,商品sku数据等,淘宝API接口

通过商品链接查询淘宝商品详情数据可以参考以下步骤&#xff1a; 打开手机淘宝或者PC端&#xff0c;复制需要查询的商品链接。打开浏览器&#xff0c;输入商品链接&#xff0c;点击搜索。点击搜索结果中的商品链接&#xff0c;进入商品详情页面。点击鼠标右键&#xff0c;选择…

【前段基础入门之】=>CSS3新特性 3D 变换

导语 在上一章节中&#xff0c;我们分享了2D 变换的效果&#xff0c;也分享了一些案例&#xff0c;同时&#xff0c;既然有2D 变换&#xff0c;那么也就肯定有 3D 变换 那么本章节&#xff0c;就为大家带来有关3D 变换的分享. 文章目录 开启3D空间设置景深透视点位置3D 位移3D …