11"""
22Wa-Tor algorithm (1984)
33
4- @ https://en.wikipedia.org/wiki/Wa-Tor
5- @ https://beltoforion.de/en/wator/
6- @ https://beltoforion.de/en/wator/images/wator_medium.webm
4+ | @ https://en.wikipedia.org/wiki/Wa-Tor
5+ | @ https://beltoforion.de/en/wator/
6+ | @ https://beltoforion.de/en/wator/images/wator_medium.webm
77
88This solution aims to completely remove any systematic approach
99to the Wa-Tor planet, and utilise fully random methods.
@@ -97,8 +97,8 @@ class WaTor:
9797
9898 :attr time_passed: A function that is called every time
9999 time passes (a chronon) in order to visually display
100- the new Wa-Tor planet. The time_passed function can block
101- using time.sleep to slow the algorithm progression.
100+ the new Wa-Tor planet. The ` time_passed` function can block
101+ using `` time.sleep`` to slow the algorithm progression.
102102
103103 >>> wt = WaTor(10, 15)
104104 >>> wt.width
@@ -216,7 +216,7 @@ def get_surrounding_prey(self, entity: Entity) -> list[Entity]:
216216 """
217217 Returns all the prey entities around (N, S, E, W) a predator entity.
218218
219- Subtly different to the try_to_move_to_unoccupied square .
219+ Subtly different to the `move_and_reproduce` .
220220
221221 >>> wt = WaTor(WIDTH, HEIGHT)
222222 >>> wt.set_planet([
@@ -260,7 +260,7 @@ def move_and_reproduce(
260260 """
261261 Attempts to move to an unoccupied neighbouring square
262262 in either of the four directions (North, South, East, West).
263- If the move was successful and the remaining_reproduction time is
263+ If the move was successful and the `remaining_reproduction_time` is
264264 equal to 0, then a new prey or predator can also be created
265265 in the previous square.
266266
@@ -351,12 +351,12 @@ def perform_prey_actions(
351351 Performs the actions for a prey entity
352352
353353 For prey the rules are:
354- 1. At each chronon, a prey moves randomly to one of the adjacent unoccupied
355- squares. If there are no free squares, no movement takes place.
356- 2. Once a prey has survived a certain number of chronons it may reproduce.
357- This is done as it moves to a neighbouring square,
358- leaving behind a new prey in its old position.
359- Its reproduction time is also reset to zero.
354+ 1. At each chronon, a prey moves randomly to one of the adjacent unoccupied
355+ squares. If there are no free squares, no movement takes place.
356+ 2. Once a prey has survived a certain number of chronons it may reproduce.
357+ This is done as it moves to a neighbouring square,
358+ leaving behind a new prey in its old position.
359+ Its reproduction time is also reset to zero.
360360
361361 >>> wt = WaTor(WIDTH, HEIGHT)
362362 >>> reproducable_entity = Entity(True, coords=(0, 1))
@@ -382,15 +382,15 @@ def perform_predator_actions(
382382 :param occupied_by_prey_coords: Move to this location if there is prey there
383383
384384 For predators the rules are:
385- 1. At each chronon, a predator moves randomly to an adjacent square occupied
386- by a prey. If there is none, the predator moves to a random adjacent
387- unoccupied square. If there are no free squares, no movement takes place.
388- 2. At each chronon, each predator is deprived of a unit of energy.
389- 3. Upon reaching zero energy, a predator dies.
390- 4. If a predator moves to a square occupied by a prey,
391- it eats the prey and earns a certain amount of energy.
392- 5. Once a predator has survived a certain number of chronons
393- it may reproduce in exactly the same way as the prey.
385+ 1. At each chronon, a predator moves randomly to an adjacent square occupied
386+ by a prey. If there is none, the predator moves to a random adjacent
387+ unoccupied square. If there are no free squares, no movement takes place.
388+ 2. At each chronon, each predator is deprived of a unit of energy.
389+ 3. Upon reaching zero energy, a predator dies.
390+ 4. If a predator moves to a square occupied by a prey,
391+ it eats the prey and earns a certain amount of energy.
392+ 5. Once a predator has survived a certain number of chronons
393+ it may reproduce in exactly the same way as the prey.
394394
395395 >>> wt = WaTor(WIDTH, HEIGHT)
396396 >>> wt.set_planet([[Entity(True, coords=(0, 0)), Entity(False, coords=(0, 1))]])
@@ -430,7 +430,7 @@ def perform_predator_actions(
430430
431431 def run (self , * , iteration_count : int ) -> None :
432432 """
433- Emulate time passing by looping iteration_count times
433+ Emulate time passing by looping ` iteration_count` times
434434
435435 >>> wt = WaTor(WIDTH, HEIGHT)
436436 >>> wt.run(iteration_count=PREDATOR_INITIAL_ENERGY_VALUE - 1)
@@ -484,11 +484,9 @@ def visualise(wt: WaTor, iter_number: int, *, colour: bool = True) -> None:
484484 an ascii code in terminal to clear and re-print
485485 the Wa-Tor planet at intervals.
486486
487- Uses ascii colour codes to colourfully display
488- the predators and prey.
489-
490- (0x60f197) Prey = #
491- (0xfffff) Predator = x
487+ Uses ascii colour codes to colourfully display the predators and prey:
488+ * (0x60f197) Prey = ``#``
489+ * (0xfffff) Predator = ``x``
492490
493491 >>> wt = WaTor(30, 30)
494492 >>> wt.set_planet([
0 commit comments