14340180138— 施睿

CodeCombat介绍及实践

一、游戏介绍

CodeCombat是一款学习编程语言的多人网页游戏。以强大的食人魔部落在各地作乱,身为英雄的玩家带着强烈的正义感走上的征途为背景,游戏设计了多个关卡要求玩家在每个关卡中编写程序控制英雄打败前来作案的食人魔部落。在游戏过程中,玩家可以轻松学会基础编程语言,比如语句、条件逻辑、变量等等。

这款游戏提供了5种编程语言:Python、JavaScript、CoffeeScript、Clojure、Lua。

游戏目前设计了6个地图,每个地图又分为13-44个不等的关卡。每个地图的难度呈递进状态。玩家必须从第一个地图开始玩起,通过一定的关卡数量才能解锁下一个地图。

(每个地图上都注明了这个地图的通过时长和学习内容)

游戏界面右下角的图标从左到右依次为部落、道具、英雄、成就、购买宝石、账户。

部落:可以自己组建部落或加入他人部落,可以基于班级、学校或者是学习相同的语言的团体。

道具:英雄的装备,部分为通关奖励,部分需要使用宝石解锁(完成关卡任务以及额外奖励可获得宝石)。除了一些增加健康值(大概是生命力和防御力吧)的道具,武器和配饰等都带有技能(语句)

普通靴子为游戏初始提供的道具,使英雄可以通过
this.moveUp();
this.moveDown();
this.moveLeft();
this.moveRight(); 上下左右行走.

普通旗子:通过 var flag = this.findFlag(); this.pickUpFlag(flag); 语句,在操作游戏是插旗可使得英雄任意走动。

英雄:玩家在游戏中的化身,玩家通过程序操作英雄行走杀敌捡金币等等。游戏初始有两个英雄供以选择,他们除性别差异外能力相当。后续英雄应该是通过游戏解锁(我还没解开过)具有更强的能力。

成就:完成一定的游戏进度获得相应的奖励。

游戏操作

进入地图选择已解锁的关卡,会有本关卡的情节设置和编程语言的学习内容。

点击开始之后,选择道具,也可重新选择英雄。

点击开始,显示关卡目标和获得额外奖励的要求。

开战,正式进入关卡。

界面右上角为程序栏,在这编写更改代码。每行语句的语法正确与否会即时通过、显示,并且会提醒出现了什么错误。每关关卡有一定的提示或程序部分。

右下方为技能栏,罗列英雄已解锁的技能(学过的语句),鼠标悬浮查看语句的注释、例程、参数、返回值。

左边展示程序运行过程和结果,即英雄的任务完成情况。还可以观察英雄的生命值。

某些关卡在通关之后进入多人游戏之林与其他在线玩家PK,PK目标和关卡相同,将玩家与电脑的程序对决引到玩家与玩家的程序对决,并且面临更多的影响因素,如不同英雄不同能力,相同英雄不同装备,蓝方英雄有攻击行为等等。

具体实践

关卡介绍:多人游戏之林:提供收集旗帜,金币及战斗的树林

目标:第一次获得100金币

提示:// 当第一个收集100个金币的人! // 如果你死了,重生的时候只有原来金币的67% loop { // 找到金币并攻击敌人 // 使用旗子和特殊的移动策略来赢得比赛! }

比赛场地:

根据游戏要求的第一次程序: loop { // 找到金币并攻击敌人 // 使用旗子和特殊的移动策略来赢得比赛! var item = this.findNearestItem(); var position = item.pos; var enemy = this.findNearestEnemy(); this.moveXY(position.x, position.y); this.attack(enemy); }

运行结果:红蓝方英雄同时出现在游戏场地,红方(我方)在捡钱的同时也有攻击蓝方的行为,但是捡钱的速度明显慢于蓝方,当蓝方英雄脱离视线或被我方砍死时,红方英雄脚下出现红色叉叉、并且提示: 修正您的代码:Target is null. Is there always a target to attack? (Use if?) 于是蓝方在我方英雄陷入自构的陷阱是遥遥领先我方收集到100金币。

修改程序: this.attack(enemy); 改为 if(enemy){ this.attack(enemy); }

运行结果:捡钱速度仍然慢于蓝方,但由于蓝方多次被我方砍到导致受到金币缩水的惩罚,最终是我方获胜。可以观察到我方在游戏过程中是以杀敌为主,捡钱是次要的。。。

根据第二条提示:使用旗子和特殊的移动策略来赢得比赛。修改程序: loop { var flag = this.findFlag(); if(flag){ this.pickUpFlag(flag); } var item = this.findNearestItem(); var position = item.pos; this.moveXY(position.x, position.y); var enemy = this.findNearestEnemy(); if(enemy){ var distance = this.distanceTo(enemy); if(distance<5){ if(this.isReady("cleave")){ this.cleave(enemy); this.attack(enemy); this.attack(enemy); } } } }

运行结果:在简单模式中对决可通过适当得插旗使得游戏轻松获胜,并且保证红方英雄不死蓝方英雄死1次。但在困难模式下,红方英雄不得不被蓝方攻击致死2~3次,蓝方不死,并且需要通过插旗将红方英雄引开。

结语

CodeCombat游戏在关卡设计可以看到明显的编程软件的影子,实际上CodeCombat就是编写代码,调试,运行。但是CodeCombat使得程序的运行结果图像化,并且设定了目标,加上了奖励机制,让编程更有趣味性。

results matching ""

    No results matching ""