JSKarel教学编程机器人使用介绍

news2024/12/23 5:56:27

JSKarel教学编程机器人使用介绍

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

先看一个效果

一、Karel简介

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(卡雷尔)的世界。

右侧是编辑器窗口,在这里您可以输入新程序并编辑现有程序。

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

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

二、JSKarel解释器的使用

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

  需要重复执行的语句

}

待续

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

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

相关文章

【JAVA-Day44】Java常用类StringBuffer解析

Java常用类StringBuffer解析 Java常用类StringBuffer解析一、什么是StringBuffer类二、StringBuffer类的方法2.1 append方法2.2 insert方法2.3 delete方法2.4 replace方法2.5 reverse方法2.6 toString方法2.7 capacity方法2.8 length方法 三、StringBuffer类的应用场景深入了解…

SGX 研究进展

目录 SGX 应用支持技术研究进展(笔记)SGX 整体架构SGX安全机制隔离执行认证密封 SGX管理机制SGX 内存管理机制EPC 页驱逐(eviction)SGX SDK SGX 应用现状及瓶颈问题SGX 应用安全防护技术TCB最小化TCB 安全风险分析最小化 TCB 的安全方案 对外接口最少化E…

【Axure高保真原型】3D柱状图_中继器版

今天和大家分享3D柱状图_中继器版的原型模板,图表在中继器表格里填写具体的数据,调整坐标系后,就可以根据表格数据自动生成对应高度的柱状图,鼠标移入时,可以查看对应圆柱体的数据……具体效果可以打开下方原型地址体验…

3.DApp-Metamask登录不了解决方法

题记 当遇到metamask登录不了,加载一直转圈圈,可以用以下的方法解决。 切换网络 切换成Linea Mainnet测试网络: 输入密码 输入登录密码登录metamask 重新选择自定义网络 选择自己本地自定义的网络: 后记 觉得有用可以收藏或点…

【源码分析】Java中的lambda表达式会生成内部类吗?是如何生成的?

文末附结论 分析 以该程序为例子 public class LambdaTest {public static void main(String[] args) {Thread t1 new Thread(() -> {System.out.println("asdwerwerwe");});t1.start();System.out.println("end!!!");} }调用javap -c -p LambdaTest…

C/C++陷阱——临时变量的产生和特性

C/C陷阱——临时变量的产生和特性 在学习C常引用时,有这样一段代码引起了我的注意: int a 1; double& b a;当我编译这段代码时,竟然报错了: 按理来说,初始化引用时不能涉及权限的放大(如用const in…

黑群晖自动调整cpu模式

DS918 黑群晖好像是不支持cpu动态频率,导致cpu一直在最高频率运行,导致功耗比较高,但是某些版本的系统不支持设置为自动根据cpu负载动态调整频率,自己写了个脚本,支持自动根据cpu使用率调整cpu模式 脚本下载链接如下 …

朴实无华的三天每日一题

leetcode八分钟补完三天的每日一题哈哈哈哈 主打一个求同存异 import java.util.Arrays;class Solution {public int singleNumber(int[] nums) {Arrays.sort(nums);int ans 0;for (int i 0; i < nums.length; ) {try {if (nums[i] nums[i 1]) {i 2;} else {ans nums…

讲解 CSS 过渡和动画 — transition/animation (很全面)

前言 由于用户越来越注重 Web应用 的使用体验&#xff0c;随之而来的是 Web应用 需要提供了更加完善的 Web 动画 效果来实现以平滑的状态贯穿于用户的整个使用过程中。现在&#xff0c;这已经是司空见惯了&#xff0c;用户潜意识是希望可以获得更快的反馈响应和更友好的用户界…

2023年全球新能源云母材料市场发展展望分析:储能云母市场规模快速增长[图]

云母作为电气设备的基础材料&#xff0c;下游应用领域涉及高温冶炼、电力等传统行业&#xff0c;并在近几年逐步扩展到新能源汽车、电化学储能等新兴行业。2022年&#xff0c;全球云母材料市场规模保持稳定增长至180.0亿元&#xff0c;期间年复合增长率约为13.2%。预计未来&…

React TreeSelect设置默认展开项的方法

需要实现TreeSelect组件的onTreeExpand、treeExpandedKeys方法。 代码样例如下&#xff1a; 1.TreeSelect标签部分 render() {const {codeselect} this.props;const {treeExpandedKeys} this.state ................<TreeSelectshowSearch{false}dropdownStyle{{ maxHei…

day06_面向对象基础

今日内容 1 复习 2 面向对象编程介绍 3 面向对象 类,属性,方法 ,创建对象,使用对象内存关系 一、复习 周一: jdk,配置环境变量,idea,HelloWorld 变量,基本数据类型 周二: 运算符,if,if-else 周三: if-elseif-elseif-else,循环(while,dowhile,for) 周四: 方法设计(参数,返回值),…

vue3学习(六)--- 插槽slot

文章目录 匿名插槽具名插槽作用域插槽渲染作用域 动态插槽 插槽就是&#xff1a;子组件中的提供给父组件使用的一个占位符&#xff0c;用<slot></slot> 表示&#xff0c;父组件可以在这个占位符中填充任何模板代码&#xff0c;如 HTML、组件等&#xff0c;填充的内…

C++项目实战——基于多设计模式下的同步异步日志系统-⑫-日志宏全局接口设计(代理模式)

文章目录 专栏导读日志宏&全局接口设计全局接口测试项目目录结构整理示例代码拓展示例代码 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计划导师&#xff0c;阿里云专家博主&#xff0c;C…

安全典型配置(三)使用ACL禁止特定用户上网案例

【微|信|公|众|号&#xff1a;厦门微思网络】 安全典型配置&#xff08;一&#xff09;使用ACL限制FTP访问权限案例_厦门微思网络的博客-CSDN博客本例中配置的本地用户登录密码方式为irreversible-cipher&#xff0c;表示对用户密码采用不可逆算法进行加密&#xff0c;非法用…

VulnHub lazysysadmin

一、信息收集 1.nmap扫描开发端口 开放了&#xff1a;22、80、445 访问80端口&#xff0c;没有发现什么有价值的信息 2.扫描共享文件 enum4linux--扫描共享文件 使用&#xff1a; enum4linux 192.168.103.182windows访问共享文件 \\192.168.103.182\文件夹名称信息收集&…

YOLO目标检测——抽烟吸烟数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;公共场所监管、健康风险评估、戒烟干预数据集说明&#xff1a;YOLO目标检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富。使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo(txt)三…

mask-R-CNN

前言 代码 论文 # Mask-rcnn 算法在 torch vision 中有直接实现&#xff0c;可以直接引用使用在自己的工作中。 import torchvision model torchvision.models.detection.maskrcnn_resnet50_fpn(weightsMaskRCNN_ResNet50_FPN_Weights.DEFAULT)Mask R-CNN&#xff08;Mask R…

uni-app实现拍照功能

直接些这样的组件代码 <template><view><button click"takePhoto">拍照</button><image :src"photoUrl" v-if"photoUrl" mode"aspectFit"></image></view> </template><script&g…

Web(3)网络扫描与window,Linux命令

NMAP各种选项的使用 三种情况修改IP地址总结&#xff1a; 1.为漏洞环境配ip地址 注&#xff1a;1.打开metasploitable后&#xff0c;用mafadmin/msfadmin登录后&#xff0c;重新设置密码&#xff0c;su root登录; 为此创建一个ip地址&#xff0c;命令&#xff1a;ifconfig et…