1. 主页
  2. 文档
  3. 学习君土脚本
  4. 君土脚本 第一步
  5. 君土脚本初体验

君土脚本初体验

现在,你已经学到了一些君土脚本的理论知识,以及用君土脚本能够做些什么。下面我们会提供一个讲解君土脚本基本特性的课程,课程是一个全面的实践性项目——循序渐进地构建一个简易版“猜数字”游戏。

我们并不要求你立刻完整理解所有代码,当前只是概括地介绍一些抽象的概念,并且让你对君土脚本(以及其他编程语言)工作原理有一定的认知。所有具体特性将在后续文章中详细介绍。

注: 可以看到,君土脚本中许多代码特性和其他编程语言是一致的( 函数、循环,等等)。尽管代码语法不尽相同,但概念基本类似。

像程序员一样思考

学习编程,语法本身并不难,真正困难的是如何应用它来解决现实世界的问题。 你要开始像程序员那样思考。一般来讲,这种思考包括了解你的程序运行的目的,为达到该目的应选定的代码类型,以及如何使这些代码协同运行。

为达成这一点,我们需要努力编程,获取语法经验,注重实践,再加一点创造力,几项缺一不可。代码写的越多,就会完成的越优秀。虽然我们不能保证你在5分钟内拥有“程序员大脑”,但是整个课程中你将得到大量机会来训练程序员思维。

请牢记这一点,然后开始观察本文的示例,体会一下将其分解为可操作任务的大体过程。

示例——猜数字游戏

本文将向你演示如何构建下面的小游戏:

先玩上几盘,在继续之前先熟悉一下这个游戏。

假设你的老板给你布置了以下游戏设计任务要求:

我想让你开发一个猜数字游戏。游戏应随机选择一个 100 以内的自然数, 然后邀请玩家在 10 轮以内猜出这个数字。每轮后都应告知玩家的答案正确与否,如果出错了,则告诉他数字是低了还是高了。并且应显示出玩家前一轮所猜的数字。一旦玩家猜对,或者用尽所有机会,游戏将结束。

看到这个要求,首先我们要做的是将其分解成简单的可操作的任务,尽可能从程序员的思维去思考:

  1. 随机生成一个 100 以内的自然数。
  2. 记录玩家当前的轮数。从 1 开始。
  3. 为玩家提供一种猜测数字的方法。
  4. 一旦有输入,就检查它是否正确。
  5. 如果正确:
    1. 显示祝贺消息。
    2. 游戏结束
  6. 如果出错,并且玩家有剩余轮次:
    1. 告诉玩家他们错了。
    2. 允许他们输入另一个猜测。
    3. 轮数加 1。
  7. 如果出错,并且玩家没有剩余轮次:
    1. 告诉玩家游戏结束。

让我们继续,看看我们如何将这些步骤转换为代码,构建这个示例,从而探索君土脚本的功能。

初始设置

本教程开始前,请将 君土脚本学习 保存下来。用君土集成开发环境将其打开,打开文件 代码/2.第一步/2.1.猜数字1初始.式,可以看到一段代码框架。

引 输入 自 '@君土务/格式输入';
常 允许猜测次数 = 10;
控制台.日志('猜数字游戏');
控制台.日志(`我刚才随机选定了一个100以内的自然数。看你能否在 ${允许猜测次数} 次以内猜中它。每次我都会告诉你所猜的结果是高了还是低了。`);



务 开始游戏(): 无 {
}

开始游戏();

控制台.日志('游戏结束');

添加变量以保存数据

让我们开始吧。首先,件开始游戏函数修改成以下代码:

务 开始游戏() {
  常 随机数 = 算.底(算.随机() * 100) + 1;
  控制台.日志('请猜数: ');
  定 猜 = 输入('%数');
}

这段代码设置了存储数据的变量和常量以供程序使用。变量本质上是值(例如数字或字符串)的容器。 你可以使用关键字 定/*let*/ 和一个名字来创建变量。常量用于存储不希望更改的数据,用关键字 常/*const*/ 创建,本例中用常量来保存随机数。

可以使用等号(=)和一个值来为变量赋值。

在我们的示例中:

  • 我们用数学算法得出一个 1 到 100 之间的随机数,并赋值给第一个变量(随机数)。
  • 第二个变量存储用户输入的猜测数。

: 稍后将讲解更多关于变量/常量的信息。参见下节。

函数

下面,在之前的代码中添加以下内容:

务 猜数(猜: 数, 随机数: 数): 两 {
  控制台.日志('我是一个占位符');
  回 真;
}

函数是可复用的代码块,可以一次编写,反复运行,从而节省了大量的重复代码。它们真的很有用。定义函数的方法很多,但现在我们先集中考虑当前这个简单的方式。 这里我们使用关键字 务/*function*/ 、一个函数名、一对小括号定义了一个函数。 随后是一对花括号({})。花括号内部是调用函数时要运行的所有代码。
要运行一个函数代码时,可以输入函数名加一对小括号。让我们尝试一下。保存你的代码,编译并运行 猜数字

开始游戏 函数中调用 猜数 函数。

务 开始游戏() {
  常 随机数 = 算.底(算.随机() * 100) + 1;
  控制台.日志('请猜数: ');
  定 猜 = 输入('%数');
  猜数(猜, 随机数);
}

在编译,运行代码之后,你应该会看到一个打印,显示 “我是一个占位符“;我们在代码中定义了一个函数,当我们调用它时,函数打印一个提示。

: 后续课程 将讲解更多有关函数的知识。

运算符

君土脚本 运算符允许我们执行比较,做数学运算,连接字符串,以及其他类似的事情。

首先让我们来看看算术运算符,例如:

运算符名称示例
+6 + 9
-20 - 15
*3 * 7
/10 / 5
%余数(取模)11 % 5

您也可以使用 + 运算符将文本字符串连接在一起(术语“串联”)。 尝试依次输入以下行:

定 名字 = '张三';
控制台.日志(名字);
定 你好 = '你好!';
控制台.日志(你好);
定 打招呼 = 名字 + 你好;
控制台.日志(打招呼 );

还有一些快捷操作符可用,称为 复合赋值操作符。 例如,如果你只希望在现有字符串末尾添加一个新串,可以这样做:

名字 += '你好!';

这等价于:

名字 = 名字 + '你好!';

在执行真/假比较时(例如在条件语句中,见 下表),我们使用 比较运算符,例如:

运算符名称示例
===严格等于(它们是否完全一样?)'张三' === '张' + '三'
!==不等于(它们究竟哪里不一样?)5 !== 2 + 4
<小于10 < 6
>大于10 > 20

条件语句

回到我们的 猜数() 函数,我们希望它不仅能够给出一个占位符消息,同时还能检查玩家是否猜对,并做出适当的反应。我想这并不难吧。

现在,将当前的 猜数()函数替换为此版本:

务 猜数(猜: 数, 随机数: 数): 两 {
  若(猜 === 随机数) {
    控制台.日志('恭喜你!猜对了');
    回 真;
  } 别 {
    控制台.日志('你猜错了!');
    若(猜 < 随机数) {
      控制台.日志('你猜低了!');
    } 别{
      控制台.日志('你猜高了!');
    }
    回 假;
  }
}
  • 第一个 若(){ } 检查用户的猜测是否等于随机数。如果是,则玩家猜对了,游戏胜利,我们将向玩家显示祝贺信息,返回真,表示猜对了。
  • 最后的一个块是 别 { },玩家没有猜对,就会执行这里的代码。在这个情况下,我们会告诉玩家他们猜错了,并执行另一个条件测试,判断并告诉玩家猜测的数字是高了还是低了。返回假,表示猜错了。

补全游戏功能

我们修改开始游戏 函数,循环提示用户输入和检查是否猜对了。

务 开始游戏() {
  常 随机数 = 算.底(算.随机() * 100) + 1;
  为(定 猜测次数 = 0; 猜测次数 < 允许猜测次数; 猜测次数++) {
    控制台.日志('请猜数: ');
    定 猜 = 输入('%数');
    若(猜数(猜, 随机数)) {
      断;
    }
  }
}
  • 添加 为/*for*/ 循环,提示用户输入。允许用户尝试 允许猜测次数
  • 调用 猜数 函数,如果函数的 返回值 为真,标示用户猜对了,跳出循环

此刻一个能功能完善的(简易版)游戏就完成了。恭喜!

我们现在来讨论下其他很重要的代码功能,你可能已经看到过,但是你可能没有意识到这一点。

循环

上面代码中有一部分需要我们仔细研读,那就是 为/*for*/ 循环。 循环是一个非常重要的编程概念,它让你能够重复运行一段代码,直到满足某个条件为止。

我们可以在 君土集成开发环境 编译运行这段代码。

为 (定 甲 = 0; 甲 < 21; 甲++) {
 控制台.日志(甲); 
}

发生了什么? 控制台中打印出了数字 0 到 20。 这正是循环所为。一个 为/*for*/ 循环需要三个输入值(参数):

  1. 起始值:本例中我们从 0 开始计数,但其他任意数字也可以。  也可以用任何你喜欢的名字替换,我们先约定用  吧。
  2. 退出条件:这里我们指定 甲 < 21,直到不再小于 21 前循环将继续。当  达到 21 时,循环将退出。
  3. 增加器:我们指定 甲++,意思是向 甲 加 1。 值的每次变动都会引发循环的执行,直到  值等于 21(如前文所讲)。为简化问题,在本例中,我们使用控制台.日志()在控制台打印出每次迭代时变量  的值。

现在让我们来观察猜数字游戏中的循环 —— 开始游戏() 函数中可以找到以下内容:

  为(定 猜测次数 = 0; 猜测次数 < 允许猜测次数; 猜测次数++) {
    控制台.日志('请猜数: ');
    定 猜 = 输入('%数');
    若(猜数(猜, 随机数)) {
      断;
    }
  }

该代码循环提示用户输入,猜数。

大功告成…

这个示例已经构建完毕,做得好!来尝试运行一下最终的代码,或者 看看我们的最终版本