Render math correctly and clean up docs

This commit is contained in:
Nguyễn Gia Phong 2020-07-24 20:54:56 +07:00
parent 328f6809f8
commit 754610a095
4 changed files with 51 additions and 43 deletions

View File

@ -18,7 +18,7 @@
# -- Project information -----------------------------------------------------
project = 'Brutal Maze'
copyright = '2020, Nguyễn Gia Phong'
copyright = '2017-2020, Nguyễn Gia Phong'
author = 'Nguyễn Gia Phong'
# The full version, including alpha/beta/rc tags

View File

@ -110,5 +110,7 @@ As the hero always follow the mouse, perse perform close-range attack
while doing so. Unlike the automatic ones, there isn't any delay between
two manual slashings.
.. _trigon: https://www.pygame.org/docs/ref/gfxdraw.html#pygame.gfxdraw.aatrigon
.. _the Tango palette: https://en.wikipedia.org/wiki/Tango_Desktop_Project#Palette
.. _trigon:
https://www.pygame.org/docs/ref/gfxdraw.html#pygame.gfxdraw.aatrigon
.. _the Tango palette:
https://en.wikipedia.org/wiki/Tango_Desktop_Project#Palette

Binary file not shown.

Before

Width:  |  Height:  |  Size: 199 B

View File

@ -14,9 +14,9 @@ Server Output
-------------
First, the game will export its data to a byte sequence (which in this case,
is simply a ASCII string without null-termination) of the length *l*.
Before sending the data to the client, the server would send the number *l*
padded to 7 digits.
is simply a ASCII string without null-termination) of the length :math:`l`.
Before sending the data to the client, the server would send the number
:math:`l` padded to 7 digits.
Below is the meta structure of the data::
@ -29,14 +29,15 @@ Below is the meta structure of the data::
The Maze
^^^^^^^^
Visible parts of the maze with the width *nw* and the height *nh* are exported
as a byte map of *nh* lines and *nw* columns. Any character other than 0
represents a blocking *cell*, i.e. a wall.
Visible parts of the maze with the width :math:`n_w` and the height :math:`n_h`
are exported as a byte map of :math:`n_h` lines and :math:`n_w` columns.
Any character other than 0 represents a blocking *cell*, i.e. a wall.
To avoid floating point number in later description of other objects, each
cell has the width (and height) of 100, which means the top left corner of
the top left cell has the coordinates of (0, 0) and the bottom right vertex of
the bottom right cell has the coordinates of (100 *nw*, 100 *nh*).
the top left cell has the coordinates of :math:`(0, 0)` and the bottom right
vertex of the bottom right cell has the coordinates of
:math:`(100 n_w, 100 n_h)`.
The Hero
^^^^^^^^
@ -44,20 +45,20 @@ The Hero
6 properties of the hero are exported in one line,
separated by 1 space, in the following order:
:Hero's color:
:Color:
The current HP of the hero, as shown in in the later section.
:X-coordinate:
An integer in the range of [0, 100 *nw*].
An integer within :math:`[0, 100 n_w]`.
:Y-coordinate:
An integer in the range of [0, 100 *nh*].
An integer within :math:`[0, 100 n_h]`.
Note that the y-axis points up-side-down instead of pointing upward.
:Angle:
The direction the hero is pointing to in degrees,
cast to an integer from 0 to 360. Same note as above
(the unit circle figure might help you understand this easier).
:Flag showing if the hero can strike an attack:
:Can attack:
0 for *no* and 1 for *yes*.
:Flag showing if the hero can heal:
:Can heal:
0 for *no* and 1 for *yes*.
.. image:: images/unit-circle.png
@ -70,29 +71,34 @@ Each enemy exports these properties:
:Color:
The type and the current HP of the enemy, as shown in the table below.
:X-coordinate:
An integer in the range of [0, 100 *nw*].
An integer within :math:`[0, 100 n_w]`.
:Y-coordinate:
An integer in the range of [0, 100 *nh*].
An integer within :math:`[0, 100 n_h]`.
:Angle:
The direction the enemy is pointing to in degrees,
cast to a nonnegative integer.
To shorten the data, each color (in the Tango palette) is encoded to a
lowercase letter or number 0. Different shades of a same color indicating
different HP of the characters.
lowercase letter. Different shades of a same color indicating different HP
of the characters.
=========== ======== ======== ======== ======== ======== ========
HP 5 4 3 2 1 0
=========== ======== ======== ======== ======== ======== ========
Butter |fce94f| |edd400| |c4a000| |2e3436|
Orange |fcaf3e| |f57900| |ce5c00| |2e3436|
Chocolate |e9b96e| |c17d11| |8f5902| |2e3436|
Chameleon |8ae234| |73d216| |4e9a06| |2e3436|
Sky Blue |729fcf| |3465a4| |204a87| |2e3436|
Plum |ad7f8a| |75507b| |5c3566| |2e3436|
Scarlet Red |ef2929| |cc0000| |a40000| |2e3436|
Aluminium |eeeeec| |d3d7cf| |babdb6| |888a85| |555753| |2e3436|
=========== ======== ======== ======== ======== ======== ========
=========== ======== ======== ======== ======== ========
HP 5 4 3 2 1
=========== ======== ======== ======== ======== ========
Butter |fce94f| |edd400| |c4a000|
Orange |fcaf3e| |f57900| |ce5c00|
Chocolate |e9b96e| |c17d11| |8f5902|
Chameleon |8ae234| |73d216| |4e9a06|
Sky Blue |729fcf| |3465a4| |204a87|
Plum |ad7f8a| |75507b| |5c3566|
Scarlet Red |ef2929| |cc0000| |a40000|
Aluminium |eeeeec| |d3d7cf| |babdb6| |888a85| |555753|
=========== ======== ======== ======== ======== ========
.. note::
If a character shows up with color ``0``, it is safe to ignore it
since it is a dead body yet to be cleaned up.
Flying bullets
^^^^^^^^^^^^^^
@ -104,9 +110,9 @@ Bullets also export 4 properties like enemies:
encoded similarly to characters', except that aluminium bullets
only have 4 colors ``v``, ``w``, ``x`` and ``0``.
:X-coordinate:
An integer in the range of [0, 100 *nw*].
An integer within :math:`[0, 100 n_w]`.
:Y-coordinate:
An integer in the range of [0, 100 *nh*].
An integer within :math:`[0, 100 n_h]`.
:Angle:
The bullet's flying direction in degrees,
cast to a nonnegative integer.
@ -163,10 +169,10 @@ Movement
This is the most awkward one. As we can all imagine, there are nine different
directions for the hero to move. Were they represented as two-dimensional
vectors, at least three characters would be needed to describe such
a simple thing, e.g. ``1 0`` for m = (1, 0), and in the worst-case scenario
m = (-1, -1), we would need five: ``-1 -1``. 40 bits used to carry a four-bit
piece of data, freaking insane, right? So instead, we decided to *slightly*
encode it like this:
a simple thing, e.g. ``1 0`` for :math:`m = (1, 0)`, and in the worst-case
scenario :math:`m = (-1, -1)`, we would need five: ``-1 -1``. 40 bits are used
to carry a four-bit piece of data, freaking insane, right? So instead,
we decided to *slightly* encode it like this:
========= ==== === =====
Direction Left Nil Right
@ -198,10 +204,10 @@ can yet strike an attack (as described in above section about `The Hero`_).
Pseudo-Client
-------------
#. Create INET, STREAMing socket *s*
#. Connect *s* to the address ``host:port`` which the server is bound to
#. Receive length *l* of data
#. If *l* > 0, close *s* and quit
#. Create an INET, STREAMing socket ``sock``
#. Connect ``sock`` to the address ``host:port`` which the server is bound to
#. Receive length :math:`l` of data
#. If :math:`l > 0`, close ``sock`` and quit
#. Receive the data
#. Process the data
#. Send instruction for the hero to the server and go back to step 3
@ -215,8 +221,8 @@ the client-examples_ directory (more are coming).
.. _client-examples:
https://git.disroot.org/McSinyx/brutalmaze/src/branch/master/client-examples
.. |204a87| image:: images/204a87.png
.. |2e3436| image:: images/2e3436.png
.. |3465a4| image:: images/3465a4.png
.. |4e9a06| image:: images/4e9a06.png
.. |555753| image:: images/555753.png