#!/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()