vBot is a visual programming game. Use a small set of
command tiles to build a program. The program must
control the vBot and make it activate every target
using the limited command set and limited space.


See the Wiki for screenshots:

    There is no support for installing yet. Run the
    program directly from the unpacked archive.

    First, make sure all dependencies are installed
    (See DEPENDENCIES below) then proceed to RUNNING.

    Run the program from the command prompt like this:

        python3 main.py

    Drag program tiles from the bottom right to the spaces above.
    (A double-click will send the tile to the next available space.)

    When your program is ready, press the play button (>).

    If there is a problem, rewind (<<), reprogram, and retry.

        Activate all blue target squares on the level.

        Move robot to blue target squares using the forward, turn left,
            and turn right program tiles. Robot can also jump up or down
            (ONE tile thickness only) using the jump tile.

        When on top of a blue target square use the ! tile to activate.

        Some levels provide additional program space in the form of
            functions f1() or f2()

        Jump in to functions by using the F1 or F2 tiles. When the
            function finishes, control returns to the next tile in
            the calling function.

        Try to create functions that can be used repeatedly in
            your program.

        Some levels introduce the concept of loops -- N and W.

        N-loops run a set of instructions a given NUMBER of times.
            Choose the number with the mouse wheel over the N tile.
            Select the set of instructions to repeat by dragging
                down from the corner of the N tile. (or press Tab)

        W-loops run a set of instructions WHILE a condition is true.
            Choose the condition with the mouse wheel over the W tile.
            Select the set of instructions to repeat by dragging
                down from the corner of the W tile. (or press Tab)

            (tested with python-3.5.2)

            (tested with pyqt-4.8.7)

    QScintilla and python bindings:
            (tested with pyqt4.qsci-2.9.1)

    vBot is released under GPLv3.

    please report any problems here:

        If you are running from the source repository:

        In order to get the program running properly,
        the file robot.svg must be built first.

        In Inkscape, open robotlinks.svg

        Run the "Embed Images" script.
            Extensions -> Images -> Embed Images

        NOTE: IF Embed Images crashes!
            * open 'Edit > XML Editor...'
            * select the node <sodipodi:namedview ...> in the list on the left
            * select the attribute 'id' in the upper right list
            * at the bottom right, the string of the id is shown in the edit field
                (probably something like "namedview12345" - numbers will vary)
            * overwrite the id string with "base", click on 'Set', close XML Editor

        "Save As" robot.svg in the data/robot folder.

        If you do not want to generate the file yourself,
        try downloading the most recent release and copying
        over the robot.svg file from there.

    Look at the other levels in the "levels" file to see the format.

    Add your level in the position you want it to appear in the game.
        Set the difficulty value between the values of the levels
            it appears between.

            (levels will be sorted by difficulty in the game)

        The level number (#1, #2, etc) is not checked and will be
            regenerated automatically in the next steps.

    Be sure to leave a blank line between levels, and several blank
        lines at the end of all of the levels.

    Add a solution to your level in the matching place in solutions.py

    Test your level and solution with:
        python3 game.py

    Finally, to rewrite level numbers, run:
        python3 game.py -R
    If you also want to smooth out level difficulties, use:
        python3 game.py -R -S

    levels_NEW and solutions_NEW will be written. Copy those files to
        levels and solutions.py respectively.

    A simple remote scorekeeping server is provided.
    NOTE: This server should NOT be exposed to the internet!

    The server can be started from the menu Settings -> Score Server...

    OR Start the server with:
        python3 scoreserver.py -I
        to create and initialize the score database

        python3 scoreserver.py
        to have the server start listening for connections from vBot

        Also, use:
        python3 scoreserver.py -U
        to update the database if new levels are added

    To create your own remote scorekeeping server:

    Provide 3 methods available over http.

    levels() should accept a single GET parameter of "name"
    and return a newline separated list of the hashes of
    the levels that person has completed.

    add_level() should accept 2 GET parameters, "name" and
    "lvlhash" and store the hashes of the levels that player
    has completed. Optionally, add_level can take a "points"
    parameter and store the number of points awarded for
    that level.

        If using the "points" parameter, be sure to enable
        send_points in conf.py and look at the get_points
        method in level_points.py

    check_hashes() should accept a list of the hashes for the
    boards being used by vBot (the list should be in the form
    of a single string with '|' used to separate the entries)
    and return 'SUCCESS' if the list matches the hashes known
    to the score server.