As I answer questions in the forum it has become apparent to me that having a place where students could return to, to refresh on certain programming concepts, would be a valuable asset to the game.
For instance: as the player advances through the game they are given more and more complex concepts for programming. Are they really mastering these skills or have they forgotten something that was taught before? A reference is always a valuable tool for programmers. I am sure many of us have our coveted websites that we go to when we have to remember how âexactlyâ to do something we havenât done in a while. Why not create a similar concept at CodeCombat?
Â
Here is the idea that I propose:
Create an Adventurers Guild that would open up programming concepts to the player as they progress in the game. When the student learns strings, then there would be a âstringsâ area of the guild open to them. This would provide a sandbox environment and instructions about the singular concept with in depth explanations. Showing the concept at the advanced level as the student should understand it.
This would act rather like a reference. In the game it can be taxing to memorize the different levels that teach you each concept. If the student didnât take good notes then their ability to trace back to the right level to relearn the concept could be time consuming. The guild would list out what programming concepts that they should have a mastery of at this point in the game (based on levels completed), And perhaps include the entire listing of skills to master, as is done with âachievementsâ but with a focus only on programming concepts.
Example: the player has learned strings, variables, and functions but not objects and the Math library.
Strings
Variables
Functions
Objects
Math Library
This could be an incentive to continue learning and advancing in the game as their âGuild Standingâ would improve as they progress. Maybe such titles as âMaster of Functionsâ, or âDominator of Stringsâ could be used to describe the current rank in the guild. The idea again would be that you would go âback to the guildâ to further practice your skills, since every good warrior will spend hours practicing their skills.
The guild might also be a good place to introduce the idea of creating your own code library and creating test cases to test individual code segments?
Cool stuff. Harry, would you want to kick us off with some example reference levels like you are thinking about? Then we could see if this is something worthwhile to bring players back to. If this kind of adventurerâs guild review area is worthwhile, we could put together a Mastery campaign and put the levels in there, unlocked using our normal mechanisms, to start this off. Then when we had enough content, we could code up some new interface for how to display these levels.
So if we were looking at levels just from the game the following might be suitable:
Basic Syntax: Signs and Portents - Kighgard Dungeon
Strings: The Raised Sword - Kithgard Dungeon
While Loops: The Second Kithmaze - Kithgard Dungeon
Variables: Closing the Distance - Kithgard Dungeon
Arguments: Kithgard Gates - Kithgard Dungeon
One approach would be to create new levels for each programming concept. (in this case 5) New levels take a lot of time and effort so there may be merit in taking the existing levels and advance them further. In this way we could keep the basic idea but require the player to do more, or change the level in such a way that it gives new challenges to the same concept.
Another approach we could take would be more like a traditional command line. Where the student could try to run code for a particular concept and would get output sent to the screen. I donât know if this would take more time to implement though.
[/updated to clean up grammar and convey the concepts better 2019-04-15]
So I created a quick level update to âThe Raised Swordâ for strings:
The Long March
This could be an example of requiring more from the level. It has to be cleaned up a bit and could have more goals but the level requires the player to use the hero.say() as well as hero.attack() with strings.
I like this level; itâs a good review and synthesis. We would probably want to name the new ogres differently, since theoretically we took down Rig, Gurt, and Ack a while back. @serg what do you think?
@Harry_the_Wanderer Do you want to prototype some other extended practice levels we could use to start off the review campaign area?
Another thought I had was to update the help section to list out different ways a skillset could be used.
So for strings we could have a blip from the MDN or something we come up ourselves like:
String: a string is a sequence of characters.
We can use strings with other programming constructs to communicate concepts.
For instance, we can use the name of an ogre âFredâ and send this name as a string into the hero.attack() function to tell the hero to attack the ogre named âFredâ.
hero.attack() just tells the hero to attack, but it does not tell the Hero what to attack. As a warrior we know that in order to be effective we need to focus our efforts.
A string can give focus to an action.
hero.attack(âFredâ)
Â
Strings can be used to communicate.
When we call the function hero.say(âHello thereâ) we are asking the hero to speak in a speech bubble. Imagine the hero was an actor in a play, we can give the hero lines to say by using strings.
If we called hero.say(âThis function ranâ) at the beginning of a function or block of code, we could communicate that something is happening even though we cannot see the code execute. By using this technique we communicate that the code has reached the function and beginning to run code inside the function.
Â
Strings encapsulate language itself. By changing the string from âHello thereâ to âăăă«ăĄăâ we convey the same idea but in another language.
[/updated to clean up grammar and convey the concepts better 2019-04-15]
As far as text explaining the concept, we have written some updates in the curriculum guides, which weâll probably combine with some concept videos and put into a new type of documentation that you âunlockâ and stays with you in your strategy guide, something like this. Not yet sure when we will build that, but then weâll have a good place for all that content.
Iâve asked @Serg to check out the levels and give pointers; in the meantime, can you check off any more of the tasks in the level editor checklist for those levels yourself to get them closer to completion?
Absolutely, I did my best to get content out that would demonstrate the concept so we could have a foundation to talk about. I find that in many cases the prototype says a lot more then just words alone.
@nick, I was waiting for feedback to know if the levels were the kinds of ideas that would work and would be useful before continuing development. I am in the process of creating the level for the arguments at the moment and once that is done, I will revisit the first levels and clean them up.
This has been an enjoyable process, and as part of this process I have actually come up with a few more level ideas. They are more puzzle based and would be for the Kithgard Dungeon campaign level. It is interesting in how coming up with one solution can spark the imagination on other concepts.
Hey Harry, I gave the levels a try. Here are some things i noticed while trying to beat the levels:
###The Long March
Is it possible to beat Belch in nothing but a Tarnished Breastplate and Simple Sword?
When moving left at the top of the level, I donât snap towards the middle of the door. Move move the snap points up, or the maze corridor down?
##Deep in the Kithmaze
Is this level beatable? I tried the two expected solutions (walk past the ogre, but it itâs a while-true loop, so I either get attacked by the ogre, or die to the wall spikes. UURR or UURRUU.
##Call to Arms
When I try to attack the variable, my hero does nothing. Am I supposed to be attacking the crate?
When moving right, my hero doesnât align with the crate (assuming that is what I am supposed to be attacking.)
Let me know if you need anymore clarification or help fixing these problems.
That is a good question. I originally was thinking that the player would have to get more gear to complete the level. Do we want to place a challenge in front of the player to have better gear, or should this be in line with simply teaching and placing challenges in other ways?
Q: When should needing more gear matter?
.2. I see what you mean. When I first developed this level I was just using advanced gear. Using the original shoes it doesnât align well.
Q: What is the normal spacing used for a level when the shoes are needed? 3 walls?
Yes keep trying Remember the hints say that the ogre isnât someone you want to disturb. Donât post the solution though, I would like others to try
The instructions do ask one to say the name. But I just realized that the wooden or crude glasses donât allow one to hero.findNearestFriend() as this function doesnât exist. The mahogany glasses are needed to identify the friends, which wonât be talked about until the Forest Level Campaign. var friend = hero.findNearest( hero.findFriend());
Should I aim to align everything in these levels with the hero.moveXXXX commands? So that alignment works well?
@nick@SergShould all of these levels be playable and beatable with the basic gear from Kithgard Dungeon?
I figured out Call to Arms, but if this is a âcapstoneâ level for a specific concept, I wouldnât leave it as it is. Put yourself in a new learnerâs shoes, and they try the most obvious one (UUDD) but that doesnât work, so they try every permutation of UDLR in an attempt to figure it out. Then we have the misleading path in the bottom right. Also, it requires the ring of speed to beat, which a lot of players might not have access to.
Also, the spikes attack my hero during the first 4xR move. Killing anyone with low gear.
And yes, be sure to align the movement accordingly for the simple boots. Use the movement stones to mark individual snap points to help players count the number of steps they will be taking.
@Serg ok, this point is important. Is the goal to create a ânew levelâ concept that only summarizes what they have learned so far, but doesnât challenge them in a way to complete it? Meaning that these levels should always be straight forward in their solution but be useful to look back upon?
I guess I am asking for a game level design direction.
Currently, the CodeCombat content team is taking a very âguidedâ approach.
If this level was meant to be review for particular concepts, it might not be the best place for a âbrain teaserâ.
The Long March is rather straight forward, based on what students and players have experienced up to that point. Attack ogres, say words, attack another ogre. However, in Deep in the Kithmaze the desired path isnât as intuitive as, for example, The Haunted Kithmaze.
We donât mind brain-teaser levels, but, if it is meant to be a review, maybe could be easier?
@serg Ok. I will keep the design straight forward and ask them to perhaps âdo moreâ.
Also you mentioned that there were movement stones and âsnapâ points. I know what the movement stones look like and will use them, but how can one make the player âsnapâ to a location? I believe the original âlong marchâ didnât use eitherâŠ
Best way is to eyeball it and youâll get used to it. The movement stones should snap every 0.5 move, and each wall unit should be 0.333 move, I believe.