#!/bin/usr/env python """ Script to rudementarally model spiders colonising new terrain, and the effect that could have on increasing the nutrient levels. """ import matplotlib.pyplot as plt import numpy as np import time 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" ) def get_terrain(self): """ Return the terrain """ return self.field def update_nutrients(self, x, y, nutrients): """ change nutrient values on the terrain """ self.field[x][y] += nutrients def size(self): """ return size of the terrain """ return self.field.shape 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 # built in (max?) life self.life = lifespan # dynamic life left def live(self): """ Live another tick, decrement lifespan, and resolve """ # print("Living another tick") self.life -= 1 if not self.life: self.life = 'dead' return self.life def get_lifespan(self): """ return how long a creature is supposed to liv """ 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 immigrate(): """ check for immigrants """ pass def actions(): """ actions taken """ pass def update(): pass def main(): """ main function, do stuff """ board = Terrain() board.print_terrain() spider1 = Critter() print("\nSpider1 left", spider1.expire(), "nutrients behind.") if __name__ == '__main__': main()