{"id":20365641,"url":"https://github.com/hackyourfuture/rover-levels","last_synced_at":"2026-05-26T23:31:31.173Z","repository":{"id":74102036,"uuid":"109949629","full_name":"HackYourFuture/rover-levels","owner":"HackYourFuture","description":"Levels for the Rover game","archived":false,"fork":false,"pushed_at":"2017-11-26T10:26:55.000Z","size":46,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":39,"default_branch":"master","last_synced_at":"2024-04-13T19:23:21.420Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HackYourFuture.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-08T08:41:38.000Z","updated_at":"2017-11-27T19:43:46.000Z","dependencies_parsed_at":"2023-04-01T08:34:21.092Z","dependency_job_id":null,"html_url":"https://github.com/HackYourFuture/rover-levels","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/HackYourFuture/rover-levels","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackYourFuture%2Frover-levels","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackYourFuture%2Frover-levels/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackYourFuture%2Frover-levels/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackYourFuture%2Frover-levels/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HackYourFuture","download_url":"https://codeload.github.com/HackYourFuture/rover-levels/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HackYourFuture%2Frover-levels/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33543973,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"ssl_error","status_checked_at":"2026-05-26T15:22:15.568Z","response_time":63,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-15T00:19:20.045Z","updated_at":"2026-05-26T23:31:31.154Z","avatar_url":"https://github.com/HackYourFuture.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Levels for Rover\n\nHi everyone! This repository contains levels for the game Rover (http://roverjs.com).\n\n## How to use\n\nThere are two branches in this repository: `live` and `test`. As you guess, the `live` branch contains the levels used\nby http://roverjs.com. But, there is also a testing environment at http://test.roverjs.com, which loads levels from\nthe `test` branch.\n\nWhen designing new chapters, please create them in the `test` branch first, and test them out. When you're satisfied,\nmerge `test` into `live`.\n\n## Chapters\n\nRover levels are grouped by chapter. A chapter is a logical collection of levels that share a single theme or topic,\ne.g. \"Variables\" or \"Loops Advanced\".\n\nEach chapter is a separate directory in this repository. Within each of these directories, there should be a file called\n`chapter.yml`, containing the name and description of the chapter, e.g.\n\n**`variables/chapter.yml`**:\n```yaml\nname: Variables\ndescription: |-\n  Learn about declaring and using variables\n```\n\nThe other `.yml` files in the chapter directory are the level files (see below). They are loaded in alphabetical order, so best to use\nan ordering scheme like `variables1.yml`, `variables2.yml`, etc.\n\n\u003e Note: If you add a chapter, make sure to list it in the file **`chapters.yml`** in the root of this repository.\n\n## Levels\n\nEach level is configured using a `.yml` file, which looks like this:\n\n```yaml\nname: Variables 1         # The name of the chapter, actually not displayed, but fill it in anyway\ninstructions: |-          #\n  Use variables to move   #\n  Rover around!           # Instructions for the player, in Markdown.\n                          #\nrows: 5                   # Number of rows in the level (i.e. grid height).\ncolumns: 5                # Number of columns in the level (i.e. grid width).\nstart: [0, 0, \"down\"]     # Start position and direction (\"up\", \"down\", \"left\", \"right\")\ngoal:  [4, 4]             # Goal position. This is actually optional, so you could in theory\n                          # create some playground level without a goal.\ngoalApples: 6             # In case your level has apples, specify how many the player should\n                          # have in order to finish the level.\ndark: false               # Set to true to make the level dark (i.e. invisible items).\n                          #\nitems:                    # The items in the level:\n  - [1, 0, \"tree\"]        # This adds a tree at {x: 1, y: 0}.\n  - [1, 1, \"water\"]       # This adds water at {x: 1, y: 1}.\n  - [0, 1, \"apple\"]       # This adds an apple at {x: 0, y: 1}.\n  - [2, 1, \"key\", {...}]  # This adds a key at {x: 2, y: 1}. See below for keys \u0026 locks.\n  - [3, 3, \"lock\", {...}] # This adds a lock at {x: 3, y: 3}. See below for keys \u0026 locks.\n                          #\ninitialCode: |-           # Here you can place initial code for the player. This property\n  // Write your code here # is optional.\n                          #\nscoring:                  # Also optional, this is used to give the player less than three\n                          # stars if they haven't followed some convention or something.\n  tests:                  # Write possible tests here:\n    usedForLoop:          # This is the name of the test.\n      regexp: for\\s+\\(    # This test uses a regexp.\n    short:                #\n      maxLines: 5         # This tests whether the program is at most 5 lines long.\n    long:                 #\n      minLines: 5         # This tests whether the program is at least 5 lines long.\n    fiveLines:            #\n      maxLines: 5         # Tests can have multiple conditions:\n      minLines: 5         # This tests whether the program is exactly 5 lines long.\n                          #\n  scores:                 # Here you assign scores. The first matching score is used.\n    - score: 1            # For one star:\n      usedForLoop: false  # If no for loop was used\n      message: |-         #\n        Try a for loop!   # Display this message.\n    - score: 2            # For two stars:\n      long: true          # If the program is not too short.\n      message: |-         #\n        Can you do it in  # Display this message.\n        five lines?       #\n```\n\n### Read-only code\n\nIn your initial code, it is possible to mark sections as read only. Use the special markers `----` and `++++` to\nmark a section as read only:\n\n```js\n// Write your code here.\n\n// ---- This code cannot be modified by the player.\nmove();\nmove();\n// ++++ After this line, the code is editable again.\n```\n\n### Keys\n\nWhen defining key or lock items, you should specify additional properties, e.g.\n\n```yaml\nitems:\n  - [1, 1, \"key\", {color: \"red\", keyType: \"number\"}]\n```\n\nThis creates a **red** key of type `number`. When the program is run, any value between `1` and `10`\nis assigned to this key.\n\nAvailable types are the primitive JS types `boolean`, `number`, and `string` as well as `any`, which\nmay get a value of any of these types.\n\nTo create a key with one specific static value, use:\n\n```yaml\nitems:\n  - [1, 1, \"key\", {color: \"red\", keyType: \"number\", value: 5}]\n```\n\nAvailable key colors are `'yellow'`, `'red'`, `'green'`, `'blue'` and `'rainbow'`. In our levels,\nwe typically use yellow keys for `boolean`, red keys for `number`, green keys for `string`, and rainbow\nkeys for `any`. Blue keys are used in boolean levels where we want to combine multiple keys.\n\nBut, there's no technical requirement for these color mappings!\n\n### Locks\n\nLike keys, locks also accept more properties.\n\n```yaml\nitems:\n  - [3, 3, \"lock\", {color: \"green\", accept: \"({green}) =\u003e -green\"}]\n```\n\nThe `color` property accepts the same values as the `key` color properties. The `accept` property\nis a string containing a JS *arrow* function that maps an object with the key colors ars keys keys\nto the required value to unlock the lock with.\n\nFor locks that operate on multiple keys, use the `acceptsKeys` property to specify which keys\nserve as input, so that their unlock scheme displays all possible combinations:\n\n```yaml\nitems:\n  - [3, 3, \"lock\", {color: \"rainbow\", acceptsKeys: [\"red\", \"blue\"], accept: \"({red, blue}) =\u003e red \u0026\u0026 blue\"}]\n```\n\nBy default, `acceptsKeys` is an array containing only the color of the lock.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackyourfuture%2Frover-levels","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhackyourfuture%2Frover-levels","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhackyourfuture%2Frover-levels/lists"}