- 游戏开发
- 教育
- 前端
- 后端
【免费下载链接】codecombat
Game for learning how to code.
导读
本文基于 CodeCombat 开源仓库中的教师课程计划文档 cs2-zh-HANS.md(对应英文原版 cs2.md),系统讲解"计算机科学 2(Computer Science 2,CS2)"课程的完整教学脉络:从 if/else 条件结构、嵌套条件结构,到函数定义与事件处理机制,最后以多人竞技场收尾。读者(尤其是编程教师、课程设计者与想理解 CodeCombat 关卡设计理念的学习者)可以从中掌握每个模块的教学目标、课堂活动脚本、Python 代码示例、书面思考题设计,以及如何结合仓库源码理解这些概念在游戏中的落地方式。
适用前提:本课程为 Python 语言设计,但文档明确指出"也能够轻松适用于 JavaScript";建议先修课程为"计算机科学导论"(CS1),课时为 4 个 45–60 分钟的编码课时段(英文原版为 6 个课时段)。在仓库课程体系中,CS2 对应的课程标识为
courseIDs.COMPUTER_SCIENCE_2(见 app/core/utils.js)。
一、课程概要:从"摆弄代码"走向"编写软件"
1. 课程定位
学生在完成 CS1(计算机科学导论)后,已掌握简单的程序结构和基本语法,具备继续进阶的基础。CS2 的核心定位是:
"计算机科学 2 会让学生从随便倒弄代码的阶段进入到真正编写软件和应用的阶段。"
课程继续强化基本语法、参数、字符串、变量、循环等基础概念,并引入第二层级的核心概念:
- If 语句:让学生能够基于战场上的不同状况采取不同的动作;
- 函数:让学生将程序组织成可重复利用的代码片段;
- 事件处理:写出基本函数之后,学生开始编写代码来处理事件——这是游戏开发、Web 开发和应用开发中经常会用到的基本编码模式。
2. 内容及学习顺序(Scope and Sequence)
| 模块 | 首关 | 授课目标 |
|---|---|---|
| 5. 条件结构 (if) | 平原森林保卫战(Defense of Plainswood) | 在执行之前判别表达式 |
| 6. 条件结构 (else) | 背靠背(Back to Back) | 执行默认代码 |
| 7. 嵌套条件结构 | 跃火林中(Forest Fire Dancing) | 将一个条件结构放到另一个条件结构之内 |
| 8. 函数 | 乡村漫游者(Village Rover) | 将具体代码留给以后 |
| 9. 事件 | 边地好伙伴(Backwoods Buddy) | 监听事件并执行代码 |
| 10. 复习 – 多人竞技场 | 力量峰值(Power Peak) | 设计和实现算法 |
3. 核心词汇表
CS2 在 CS1 词汇(对象、函数、参数、循环、变量)基础上新增了两个关键术语,是贯穿全课程的概念基石:
- 对象(Object):执行动作的角色或事物。对象是 Python 的基本组成要素。
hero是一个对象,能够执行移动动作;在hero.moveRight()中,对象就是hero。课程 2 中,学生还将使用pet对象来执行动作。 - 函数(Function):对象执行的动作。
moveRight()是一个函数,函数名后总需要跟括号。 - 参数(Argument):函数需要的额外信息,即函数后括号内的内容。在
hero.attack(enemy)中,enemy是参数。 - 循环(Loop):需要重复的代码,一种编写方式是使用关键字
while,后面跟判别真假(True/False)的表达式。 - 变量(Variable):暂时存放数据的容器。创建变量需要起变量名,然后告诉它存放什么值。
- 条件结构(Conditional):现代编程的基本组成要素。它会判别条件,基于表达式的不同值来决定执行不同动作。玩家无法确认是否会有敌人攻击、有没有可以抓取的宝石,因此需要判别这些东西是否存在;能力是否就绪、敌人是否存在都需要判别条件,以确定执行不同动作。
- 事件(Event):表示发生了某事的对象。学生可以编写代码对事件作出反应——"当这类事件发生了,执行这个函数",这叫作事件处理机制,是对无限 while 循环的有益补充。
4. 较早完成课程学生的延伸活动
- 帮助其他同学;
- 在"力量峰值"多人竞技场中完善策略;
- 编写全部流程;
- 编写对整个游戏的回顾评述;
- 为最喜欢的关卡编写通关指南;
- 设计一个新关卡。
二、模块 5:条件结构(If)
1. 概要
课程 2 引入了更进阶的编程概念,关卡通过难度不再像之前那么容易。文档提醒教师:留意关卡指示,确保学生知道关卡目标;留意代码中嵌入的注释(以#开头),确保学生知道代码里面有什么需要补充。
2. 授课目标
- 构造条件结构;
- 选择恰当的表达式;
- 表达式求值。
3. 标准
CCSS.Math.Practice.MP1(理解问题寻求解答)、MP2(抽象和定量思想)、MP4(数学建模)、MP7(寻找和利用结构)。
4. 教学活动:条件结构(10 分钟)
讲解(2 分钟):条件结构基于游戏状态选择要执行的代码。首先需要求出表达式的值是True还是False,然后只在表达式为真时执行后面的代码。语法与循环类似:后面需要有冒号和四格缩进。if是关键字,==部分是表达式:
if enemy == "Kratt": attack(enemy) # 这是动作条件结构本身只会执行一次;如果想要多次进行判别,可以把它放到循环结构中,过程中要注意缩进:
while true: if enemy == "Kratt": attack(enemy)互动(5 分钟):使用 Python 语法,将课堂规则改写为条件结构。先在黑板上列出规则,例如:举手才能问问题;如果迟到是会留校的;老师拍手两次时停止讲话。然后用"如果(if)"开头的句子重写规则,再改写为 Python 语法:
if student.hasQuestion(): student.raise(hand)if student.arrivalTime > class.startTime: teacher.giveDetention(student)if teacher.claps == 2: class.volume = 0然后标出条件结构中的各部分:关键字、表达式、动作。
讲解(1 分钟):代码是将平时说的语言编码为计算机能够理解的语言。可以通过"规则 → 如果句子 → 代码"三步,将自己的想法改写成计算机语言。
思考(2 分钟):
- 我们为什么需要条件结构?(并非所有动作都总是会发生)
- If 和冒号之间的部分是什么?(表达式)
- 表达式很重要的一点是什么?(其值要么为真,要么为假)
5. 代码编写时间(30–45 分钟)
让学生按自己的节奏进行游戏,并在纸上或电子文档中记录每一关的日志。推荐使用"学习日志"模板(格式如下,可打印):
关卡 #: _____ 关卡名: ____________________________________ 目标: __________________________________________________________ 我做了什么: 我学到了什么: 挑战在哪里:课堂巡视要点:学生需要使用 (x, y) 坐标来明确位置——将鼠标指针放到目标位置上即可得到确切坐标;学生还需要在执行动作前进行条件判别,通过条件结构来确定是否执行动作。
6. 书面思考题(5 分钟)
- If 是什么意思?If 后面应该写些什么?参考回答:If 只在条件为真时执行代码。可以判别各种事情是否为真,例如武器是否准备就绪、敌人是否靠近。有时需要
==或>,有时只需要()。 - 如果要你设计一个 CodeCombat 关卡,它会是怎样的?参考回答:会有很多食人魔,你需要攻击它们但不能攻击人类,还需要通过建造障碍物和火焰陷阱来保护村子。
三、模块 6:条件结构(Else)
1. 概要
这些关卡都需要同时考虑两件事。学生需要确定什么情况下执行哪个动作。这个阶段适合进行秘诀技巧讨论,让学生有机会在课上分享他们的发现或窍门。
2. 授课目标
- 构造一个
if-else条件结构; - 确定不同条件下执行的不同动作;
- 定义
else,在if不成立时执行。
3. 标准
CCSS.Math.Practice.MP1、MP2、MP7、MP8(寻找并表达重复性思想的规则性)。
4. 教学活动:条件结构 (Else)(10 分钟)
讲解(2 分钟):我们已经熟悉表达式为真时执行动作的条件结构,但如果表达式为假怎么办呢?这就需要用到else——"否则"、"如果不"、"相反"的意思。注意:else需要与if有相同数目的缩进,并且同样需要跟冒号:。
下面的例子中,if和else是关键字,==是表达式内容:
if today == weekday: goToSchool() # 动作 else: # 关键字 watchCartoons() # 动作互动(6 分钟):回顾上一课的课堂规则,看是不是需要 else 语句:
if student.hasQuestion(): student.raise(hand) else: student.payAttention()if student.arrivalTime > class.startTime: teacher.giveDetention(student) else: teacher.markPresent(student)if teacher.claps == 2: class.volume = 0 # 这里不需要else,因为老师不拍手的情况下不需要执行任何动作标出条件结构中的各部分:关键字(if与else)、表达式、动作。
思考(2 分钟):
- Else 是什么意思?(如果不、否则)
- 为什么 else 后不需要另一个表达式?(表达式已经隐含在前面了,即前面 if 的表达式不成立时)
- Else 是否总要有?(不,有没有要看具体情况)
5. 代码编写时间(30–45 分钟)
继续使用学习日志模板记录关卡。本阶段关卡的关键在于确定什么事情需要发生,以及什么情况下发生;学生们需要在各种条件下选择最佳动作,并享受多种可能性带来的乐趣。
6. 书面思考题(5 分钟)
- 现在你有没有比一开始了解了更多代码?现在你比一开始多拥有了什么额外的能力?参考回答:一开始只能到处走动;现在可以攻击敌人、看到谁最近、将鼠标放到屏幕上确定目的地坐标;可以使用 if 和 else 做两件不同的事;可以使用循环让代码重复执行。
- 有什么建议给刚开始玩游戏的人?参考回答:阅读指示,首先确定要做什么,然后再操心代码;
while True和if后面需要记得冒号:,之后还需要四格缩进;大多数时候关卡会用蓝字告诉你做什么;可以使用宝石来买东西。 - 卡住时你怎么做?参考回答:问旁边的人有没有过这一关;如果比较超前,会再考虑一下直到对方追上进度,然后一起研究;也可以问老师;有时答案就在帮助或蓝字中。
四、模块 7:嵌套条件结构
1. 概要
"严肃的编程现在开始。"学生们需要记住如何构造条件结构及表达式,不熟的话要多看代码编辑器下的提示。这些关卡有三个或以上的动作要控制,需要复合思维及规划。代码最多会有三层缩进,确保空格数量正确对于代码运行是至关重要的。
2. 授课目标
- 构造嵌套条件结构;
- 阅读并理解嵌套条件结构;
- 处理好缩进。
3. 标准
CCSS.Math.Practice.MP1、MP2、MP6(致力于精准度)、MP7。
4. 教学活动:嵌套条件结构(10 分钟)
讲解(3 分钟):有时要做的事情多于两个,这就需要将一个条件结构嵌套在另一个条件结构中。下面例子中:第一个条件结构判断的是"if 是不是周末";第二个条件结构(嵌套条件结构)判断的是"if 有没有足球比赛":
if it's a weekend: if I have a soccer game: Wake up at 6 else: Sleep in else: Wake up at 7缩进此时非常重要:一层循环或条件结构中需要四格缩进,这要包括之内的其他条件结构,因此内部的条件结构需要总共缩进八格。
活动(5 分钟):让学生将自己的起床、入睡或休息时间规则写成嵌套条件结构的形式,至少做三个不同的动作(这是使用嵌套条件结构所必需的)。完成后与同伴交换,相互阅读和讨论所写内容,检查语法和缩进;再邀请志愿者与全班分享成果。
思考(2 分钟):
- 我们为什么需要嵌套条件结构?(因为可能的情况和要执行的动作有时会多于两种)
- 为什么第二个条件结构需要额外缩进四格?(这样才能体现它在第一个条件结构之内)
- 某个动作缩进八格意味着什么?(它是否执行取决于两个表达式的真假判断)
5. 代码编写时间(30–45 分钟)
课堂巡视时,确保学生在开始编写代码之前阅读了初始代码中的注释。目标比较复杂时,将目标分解并理解每一个子目标很重要;鼓励学生之间的协同合作和相互帮助。
6. 书面思考题(5 分钟)
- 给我讲讲劈斩 cleave。参考回答:劈斩会击溃周围的大量敌人,代码是
hero.cleave()。后面要记得(),不过括号后不需要参数——不需要cleave(enemy),因为攻击目标是周围所有人。劈斩有一段冷却时间,因此使用之前要检查它是否准备就绪,如果没有就绪就只能使用普通攻击。 - 讨论:你的英雄是好人还是坏人?参考回答:从保护村民来讲他是好人,但从偷取宝石来讲他是坏人,而且杀敌也是杀戮;要是保护村民不需要通过杀戮和偷盗来实现就好了。
7. 书面查核点:条件结构
- 什么是条件结构?条件结构有哪些不同的方式?举例说明。参考回答:条件结构也就是包含 if 的结构,如果某条件为真就做某动作;条件为假还需要做别的动作时要使用 else;如果还有第三个动作,就要用 elif。如:如果(if)下雨就穿夹克,否则如果(elif)下雪就戴帽子,否则(else)就穿 T 恤。此外 if 还可以嵌套在其他 if 之内,这时需要记得缩进数量不能错。
- 什么是 elif?它是 elf(精灵)吗?参考回答:Elif 表示 else if(否则如果),用它可以在三个动作中做选择,而不是两个动作中做选择。它和 elf(精灵)很像,因为它很巧妙。
- 讲讲缩进。参考回答:
while True、if、else、elif内,代码都需要四格缩进;如果 if 内还有另一个 if,那就需要八格缩进。数清楚空格数量是非常重要的,否则计算机就不知道该做什么。
五、模块 8:函数
1. 概要
这些关卡为学生提供了"捷径":循环让学生能够更快地执行更多代码,而函数能让学生反复使用相同代码。语法仍然至关重要——注意冒号和缩进;开始编写代码之前,记得让学生阅读并理解关卡的指示说明。
2. 授课目标
- 辨认函数;
- 定义函数;
- 调用函数。
3. 标准
CCSS.Math.Practice.MP1、MP2、MP7。
4. 教学活动:函数(10 分钟)
讲解:其实之前已经用过函数了——hero.cleave()中的cleave()就是函数。之前用的都是内建函数,后面将编写自己的函数。编写函数首先需要使用def来定义:
def getReady(): hero.wash(face) hero.brush(teeth) hero.putOn(armor)然后调用函数:
getReady()定义和调用之间的区别:定义需要在前面使用def,后面使用冒号:,中间还需要一些缩进的代码;它们都有括号。
类比(篮球整套动作):程序员使用函数让代码更易读易写,这就像篮球中的整套动作——你知道如何投篮、带球、传球,将各部分组合到一起并给它取个名字:
def out-over-up(): p1.dribble() p1.pass(p2) p2.shoot()教练想要这一串动作被执行时,只需要喊 "Out-over-up!" 就行了。
互动(5 分钟)——Simon Says:课上使用 Python 语法在黑板上编写自己的函数,然后用 Simon Says 游戏方式和学生互动:
def pogo(): student.handsOn(hips) student.jump()def popcorn(): if student.sittingDown(): student.standUp() else: student.sitDown()然后通过调用函数来玩 Simon Says 游戏,例如:
- Simon says raise your hand!(举手)
- Simon says popcorn!
- Pogo!(Simon 什么都没说——这时学生不应执行动作)
思考(2 分钟):
- 为什么函数能让编码更简单?(复杂的步骤不需要每次都写出来,只需要写出函数名就行了)
- 为什么给函数取个好名字很重要?(这样以后就不会忘了它是做什么的)
- 关键字
def表示的是什么?(define,定义)
5. 代码编写时间(30–45 分钟)
课堂巡视要点:这些关卡都需要编写好的代码。给学生的帮助代码中间经常写有pass——这是为了让示例代码中不显示错误。学生填入了自己的代码后,pass就需要删掉;在帮助学生调试代码之前,先看看是不是pass的问题。
6. 书面思考题(5 分钟)
为什么说函数很有用?什么时候没必要使用函数?参考回答:有了函数,相同代码就不需要写一遍又一遍,函数能让代码更易读。如果函数中只有一行代码,那就没必要使用函数了,每次直接写出那一行会更省事。
六、模块 9:事件
1. 概要
事件是表示发生了某事的对象。学生可以编写代码来对事件作出反应:当这类事件发生了,执行这个函数。这叫作事件处理机制,它是很有用的编程方式,是对无限 while 循环的有益补充。
2. 授课目标
- 监听事件并执行代码;
- 使用事件处理来控制宠物;
- 将直接执行和事件处理混在一起编写代码。
3. 教学活动:总统老师(12 分钟)
讲解(2 分钟):之前学习的是从上到下一次性执行的代码(首先做这个,然后做这个,再做那个),以及 while 循环(这个一直做下去)。现在要学习事件处理:当这个发生**时,执行那个。它和 if 语句有点像,只是事件可以在任何时候发生,不需要只发生在判别条件时。
互动(8 分钟):情景——老师在等白宫的一通重要电话,电话会通知你是否被选为下一任美国总统。先用 while 循环和 if 语句编写接电话的程序(暂时还没用到事件):
while True: if phone.isRinging: teacher.answer(phone)这很无聊,只等电话什么都没做。于是在等待过程中批改学生作业:
while True: paper = teacher.findNextPaper() teacher.grade(paper) if phone.isRinging: teacher.answer(phone)每份作业需要五分钟批改。问学生:如果按照以上程序执行,白宫打来电话会怎么样?(白宫打来电话的时候可能正在批改作业,只会每五分钟查看电话是否响起,很可能错过当选总统的电话。)
下面用事件处理来重写程序——监听事件,当事件发生时通过运行一个函数来处理事件:
def answerPhone(): teacher.answer(phone) phone.on("ring", answerPhone)意思是一旦(on)电话phone响起ring,就运行answerPhone函数。之后就是在等待中批改作业,只需要加一个 while 循环就行了;事件发生时批改会被打断,这样就能接到电话成为总统:
def answerPhone(): teacher.answer(phone) phone.on("ring", answerPhone) while True: paper = teacher.findNextPaper() teacher.grade(paper)关键语法点:phone.on("ring", answerPhone)会让代码开始监听电话响"ring"这一事件。注意,函数后面不使用括号:是answerPhone而非answerPhone()——因为这里只是告诉代码要运行的函数的函数名,而不是立刻运行(括号会让函数立刻运行)。
让学生举更多事件和处理函数的例子并写到黑板上:
student.on("wake", goBackToSleep) dog.on("hear", obeyMaster) goal.on("touchBall", increaseScore) bigRedButton.on("press", initiateSelfDestruct)思考(2 分钟):
- 事件处理用于什么?(在某件事发生时运行一个函数)
- 事件名是什么类型的数据?(事件名是字符串)
- 监听事件时,使用的函数后面为什么不加括号?(括号会让函数立刻运行,你不希望这样;你要的是事件发生后才运行)
4. 代码编写时间(30–45 分钟)
确保学生在开始监听事件之前编写出处理事件的函数。事件发生时的执行顺序可能有点难于把握(学生可能不知道是默认程序在运行还是事件处理函数在运行),让学生看看白色高亮显示的代码执行,这样他们就能知道每次在运行哪一行代码。
5. 书面思考题(5 分钟)
- 给我讲讲猫。参考回答:我有一只宠物猫,它是一只美洲狮。有一个函数会喵喵叫,猫会等到你跟它讲话时才喵喵叫。我认为它还应该帮助你抵御敌人,你需要通过命令让它做别的事情,例如扑击和撕咬。
- 事件在游戏开发中非常有用,举出三种游戏中可能会发生的事件。参考回答:在"我的世界"中,爬行者爆炸时会触发"爆炸"事件;象棋中会有"将军"事件;"宝石迷阵"中会有 "combo" 事件。
6. 事件机制在 CodeCombat 中的落地
"监听事件 + 回调函数"这一模式并非课堂虚构:在 CodeCombat 的底层库代码中,事件订阅是通用基础设施。例如仓库中的 app/lib/initSlider.coffee 就使用了同样的"对象.on('事件名', 回调)"订阅模式(slider.on('slide', changeCallback))。课程中phone.on("ring", answerPhone)的教学本质,正是让初学者在进入真实前端/游戏开发前,先掌握这种"回调不立即执行、事件驱动时才触发"的核心心智模型。
七、模块 10:复习 – 多人竞技场
1. 概要
竞技场关卡是完成这部分内容的一个奖励。在之前关卡中掉队或书面思考题没完成的学生,可以利用这个时间来完成;已经成功提交课业的学生,可以进入力量峰值竞技场,在到时间前尝试多种解决方案。更多细节可参阅仓库中的竞技场关卡指南 arenas-zh-HANS.md(英文版 arenas.md)。
2. 授课目标
- 设计算法来解决问题;
- 在 Python 中实现算法;
- 调试 Python 程序。
3. 标准
CCSS.Math.Practice.MP1、MP2、MP3(合理论证并评价他人思路)、MP5(高屋建瓴地使用恰当工具)、MP6。
4. 开场讨论(5 分钟):竞技场入门
讲解:告诉学生,他们今天要把所学全部整合到一起,参加一项叫"竞技场(Arena)"的特殊活动。讲解并演示竞技场如何运作,务必覆盖以下要点:
- 学生将编写一个人工智能程序,在与对手的竞赛中闯过一个复杂关卡。他们要反复测试和修改程序,尽可能取得最好的成绩。鼓励他们提交代码、观察输出,寻找可以改进的地方(更快达成目标、让玩家存活更久等),然后修改并再次提交,次数不限。
- 首先,点击选择红色(人类)或蓝色(食人魔)队伍(建议随机将一半学生分到每队)。
- 第一次游玩时,选择"Warm-Up"(热身)与计算机对战;反复修改完善程序,直到足以击败计算机。
- 击败计算机后,可以选择"Easy"(简单)与同学对战。
复习工程循环(Engineering Cycle):提醒学生工程学就是解决问题,而工程学的第一条规则是"没有人能一次做对"。这就是工程循环的由来:
- DECOMPOSE(分解):理解并拆解问题。关卡的目标是什么?沿途能看到哪些更小的目标?
- PLAN(计划):选择问题的一部分先解决。需要计算机做什么?用平实的语言或伪代码规划解决方案,用流程图或故事板保持条理。
- IMPLEMENT(实现):用代码写出问题的每一部分解决方案。
- TEST(测试):运行代码!它是否按预期解决了问题?如果没有,重新设计;能否无错运行?如果不能,逐行追踪找出并修复 bug,然后再次测试。一旦成功,就继续规划并实现下一部分!
可为每位学生提供一份工程循环工作表(Engineering Cycle Worksheet),供其进入关卡后规划程序。
讨论:
- 你打算按哪些步骤来规划和创建程序?参考回答:我会使用工程循环。先分解问题——找到大目标并拆成更小的子目标;选择一个子目标开始,规划出解决它的算法;然后用代码写出算法,开始测试和调试,直到它能按我想要的方式运行。
- 如果你的程序第一次没能击败计算机,你会怎么做?参考回答:如果不行,我会重新运行并观察它在哪里出错,然后设法改进那一部分并重新提交代码。如果还是不行,就再试一次!
5. 代码编写时间(40–50 分钟)
让学生进入最后一关力量峰值(Power Peak)。先花几分钟完成工程循环工作表,然后按自己的节奏通关;教师巡视并协助。
值得了解(Good to Know):
- 有些学生可能对竞争感到不适,尤其是排名对全班可见时。可以考虑使用结对编程(Pair Programming)——有伙伴时竞争通常更舒适。
- 学生只会与同一 CodeCombat 班级中的人工智能和其他学生竞争(不会遇到陌生人)。
- 学生击败其中一个 AI 后,就会进入班级排名。
- 红队只与蓝队对战,两队各有自己的顶级排名。
- 学生提交代码后,其他学生可以点击排名中任意学生旁的"Fight"(对战)链接向其发起挑战。
- 如果将教师账号留在竞技场排行榜页面,系统会在学生之间模拟更多比赛。
需要留意(Look Out For):
- 竞技场比常规关卡更开放。如果学生不确定如何开始,提醒他们编程是一个迭代过程,引导他们把问题分解成更简单的部分,一次只规划关卡的一部分解决方案。
- 如果学生因失败而沮丧,鼓励他们分析获胜玩家的策略——能从中学习到什么,以及如何用它改进自己代码的下一次迭代。
6. 结束(5 分钟)
用以下问题引导学生反思,可组织简短讨论,或让学生以 Exit Tickets 形式提交书面回答:
在 CodeCombat 中,你必须提前规划英雄的所有动作,然后让英雄一次性执行。这与大多数视频游戏(直接控制英雄、边玩边做决定)不同。你对这种差异感受如何?例如哪种更有趣?哪种更难?你的策略如何变化?如何处理失误?
参考回答:
CodeCombat 更难,因为我必须提前想很多步!这是一种有趣的难!
在这个游戏中,我可以先看遍整个关卡,规划好想怎么通关,然后设计一种方式让计划生效。这和普通视频游戏里边玩边编的感觉不一样。
当你的代码没能击败对手时,你做了什么?你是如何决定要做什么改动的?
参考回答:
我重新运行代码,观察能否找到捷径,然后修改代码再运行一次,看看是否有帮助。
我寻找让自己存活更久的方法:召唤更多朋友帮忙、拾取更多药水。把这些加进程序帮助我走到了最后。
八、课程在仓库中的定位与延伸阅读
- 课程标识:在仓库的 app/core/utils.js 中,CS2 被列为计算机科学课程体系(
CSCourseIDs)的一员(courseIDs.COMPUTER_SCIENCE_2),与 CS1、CS3、CS4、CS5、CS6 及 Junior 并列,佐证了 CS2 在整个 CodeCombat 课程阶梯中承上启下的位置。 - 多语言课程文档:本指南的中文版位于 app/assets/markdown/cs2-zh-HANS.md,英文原版位于 app/assets/markdown/cs2.md,并配有葡萄牙语版 cs2-pt-BR.md;同一目录下还有配套的 cs1-zh-HANS.md(先修课程)与 cs3.md(后续课程),可串联成完整的计算机科学系列教学脉络。
- 竞技场机制:模块 10 引用的竞技场玩法细节,可进一步阅读 arenas-zh-HANS.md。
- 底层实现佐证:课程中反复强调的"对象调用方法"(
hero.moveRight()、hero.cleave())与"对象事件订阅"(phone.on("ring", answerPhone))模式,在仓库源码中均有对应实现(例如事件订阅机制可见 app/lib/initSlider.coffee),说明课程所授内容并非虚构语法,而是 CodeCombat 关卡引擎实际使用的编程模型。
结语:一份可直接落地的进阶编程教案
CS2 的六模块设计(if → else → 嵌套条件 → 函数 → 事件 → 竞技场)构成了一条完整且渐进的编程认知曲线:从"单条件判断"到"双分支默认执行",再到"多分支嵌套与缩进纪律";从"代码复用(函数)"到"异步思维(事件处理)",最终以"算法设计 + 调试 + 迭代"的竞技场挑战收束。每个模块都配套了标准的 10 分钟教学活动(讲解 → 互动 → 思考)、30–45 分钟游戏编码时间、学习日志模板与书面思考题,教师可直接按此教案组织课堂;学习者也能够借此理解 CodeCombat 关卡背后真正要训练的计算思维——而这正是它作为"教人写代码的游戏"的核心价值所在。
- 游戏开发
- 教育
- 前端
- 后端
【免费下载链接】codecombat
Game for learning how to code.
相关推荐
Vector v0.19.1 补丁版本解析:字符分隔解码回归修复、磁盘缓冲区迁移与安全升级
Vector v0.19.1 补丁版本解析:字符分隔解码回归修复、磁盘缓冲区迁移与安全升级 本篇技术指南以 Vector 开源仓库中 v0.19.1 版本发布说
游戏开发教育前端后端OpenProject 如何从当前主版本升级到下一主版本?
OpenProject 如何从当前主版本升级到下一主版本? 如果你在运行 OpenProject 的生产实例,需要把当前主版本(例如 16.x)升级到下一个主版
游戏开发教育前端后端CodeCombat Computer Science 2 教师教学指南:从条件判断到事件处理与竞技场实战
CodeCombat Computer Science 2 教师教学指南:从条件判断到事件处理与竞技场实战 本文以 CodeCombat 开源仓库中的官方课程文
游戏开发教育前端后端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考