现在,你已经学到了一些君土脚本的理论知识,以及用君土脚本能够做些什么。下面我们会提供一个讲解君土脚本基本特性的课程,课程是一个全面的实践性项目——循序渐进地构建一个简易版“猜数字”游戏。
我们并不要求你立刻完整理解所有代码,当前只是概括地介绍一些抽象的概念,并且让你对君土脚本(以及其他编程语言)工作原理有一定的认知。所有具体特性将在后续文章中详细介绍。
注: 可以看到,君土脚本中许多代码特性和其他编程语言是一致的( 函数、循环,等等)。尽管代码语法不尽相同,但概念基本类似。
像程序员一样思考
学习编程,语法本身并不难,真正困难的是如何应用它来解决现实世界的问题。 你要开始像程序员那样思考。一般来讲,这种思考包括了解你的程序运行的目的,为达到该目的应选定的代码类型,以及如何使这些代码协同运行。
为达成这一点,我们需要努力编程,获取语法经验,注重实践,再加一点创造力,几项缺一不可。代码写的越多,就会完成的越优秀。虽然我们不能保证你在5分钟内拥有“程序员大脑”,但是整个课程中你将得到大量机会来训练程序员思维。
请牢记这一点,然后开始观察本文的示例,体会一下将其分解为可操作任务的大体过程。
示例——猜数字游戏
本文将向你演示如何构建下面的小游戏:
先玩上几盘,在继续之前先熟悉一下这个游戏。
假设你的老板给你布置了以下游戏设计任务要求:
我想让你开发一个猜数字游戏。游戏应随机选择一个 100 以内的自然数, 然后邀请玩家在 10 轮以内猜出这个数字。每轮后都应告知玩家的答案正确与否,如果出错了,则告诉他数字是低了还是高了。并且应显示出玩家前一轮所猜的数字。一旦玩家猜对,或者用尽所有机会,游戏将结束。
看到这个要求,首先我们要做的是将其分解成简单的可操作的任务,尽可能从程序员的思维去思考:
- 随机生成一个 100 以内的自然数。
- 记录玩家当前的轮数。从 1 开始。
- 为玩家提供一种猜测数字的方法。
- 一旦有输入,就检查它是否正确。
- 如果正确:
- 显示祝贺消息。
- 游戏结束
- 如果出错,并且玩家有剩余轮次:
- 告诉玩家他们错了。
- 允许他们输入另一个猜测。
- 轮数加 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*/ 循环需要三个输入值(参数):
- 起始值:本例中我们从 0 开始计数,但其他任意数字也可以。
甲
也可以用任何你喜欢的名字替换,我们先约定用甲
吧。 - 退出条件:这里我们指定
甲 < 21
,直到甲
不再小于 21 前循环将继续。当甲
达到 21 时,循环将退出。 - 增加器:我们指定
甲++
,意思是向 甲 加 1。甲
值的每次变动都会引发循环的执行,直到甲
值等于 21(如前文所讲)。为简化问题,在本例中,我们使用控制台.日志()
在控制台打印出每次迭代时变量甲
的值。
现在让我们来观察猜数字游戏中的循环 —— 开始游戏()
函数中可以找到以下内容:
为(定 猜测次数 = 0; 猜测次数 < 允许猜测次数; 猜测次数++) {
控制台.日志('请猜数: ');
定 猜 = 输入('%数');
若(猜数(猜, 随机数)) {
断;
}
}
该代码循环提示用户输入,猜数。
大功告成…
这个示例已经构建完毕,做得好!来尝试运行一下最终的代码,或者 看看我们的最终版本。