☰
CodeCombat 计算机科学 2 课程指南:从条件结构到事件处理的完整教学方案
2026/9/26 2:52:46 网站建设 项目流程
  • 游戏开发
  • 教育
  • 前端
  • 后端

【免费下载链接】codecombat

Game for learning how to code.

项目地址:https://gitcode.com/gh_mirrors/co/codecombat
点击查看免费下载

导读

本文基于 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.

项目地址:https://gitcode.com/gh_mirrors/co/codecombat
点击查看免费下载

相关推荐

上一篇:用 Apollo Server 搭建联邦网关:@apollo/gateway 配置指南与 7 项性能调优技巧
下一篇:Playnite游戏库管理器终极指南:一站式管理所有平台游戏的完整方案

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询