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.
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.
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.
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…