summaryrefslogtreecommitdiff
path: root/spiderworld.py
blob: 9414c23a21989529a85caf6aa3b7058366bdfe4c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#!/bin/usr/env python
"""
Script to rudementarally model spiders colonising new terrain, and the effect
that could have on increasing the nutrient levels.
"""

import numpy as np

class Terrain:
    """ Terrain class represents the terrain over which the model is run. 

    field:      Shape of the terrain, and nutrient values
    field_mask: mask for various attributes of the field (bit mask?)

    """

    def __init__(self, size_x=10, size_y=10):
        """ Create a new field of size_x by size_y """
        self.field = np.zeros(shape=(size_x, size_y), dtype=int)
        self.field_mask = np.ones(shape=(size_x, size_y), dtype=bool)

    def print_terrain(self):
        """ Display the field """
        print(f"Terrain:\n"
              f"{self.field}\n"
              f"Terrain mask:\n"
              f"{self.field_mask}\n"
              )


class Critter:
    """ Basic class for a creature that can appear, modify the terrain, and
    procreate or die. """

    def __init__(self, nutrient_value=1, pos_x=0, pos_y=0, lifespan=10):
        self.nutrient_value = nutrient_value
        self.pos_x = pos_x
        self.pos_y = pos_y
        self.lifespan = lifespan

    def live(self):
        """ Live another tick, decrement lifespan, and resolve """
        print("Living another tick")
        self.lifespan -= 1
        if not self.lifespan:
            print("Expires!")
            # self.expire()
        return self.lifespan

    def get_position(self):
        """ Return the position of the critter """
        return self.pos_x, self.pos_y

    def expire(self):
        """ Death of the critter """
        return self.nutrient_value


def main():
    """ main function, do stuff """

    board = Terrain()
    board.print_terrain()

    spider1 = Critter()

    print("\nSpider1 left", spider1.expire(), "nutrients behind.")


if __name__ == '__main__':
    main()