55 lines
1.8 KiB
Python
55 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
from cellular_automaton.ca_cell_state import CellState
|
|
from cellular_automaton.ca_rule import Rule
|
|
|
|
|
|
class TestRule(Rule):
|
|
@staticmethod
|
|
def evolve_cell(last_cell_state, last_neighbour_states):
|
|
try:
|
|
return last_neighbour_states[0]
|
|
except IndexError:
|
|
print("damn neighbours")
|
|
pass
|
|
return False
|
|
|
|
|
|
class MyState(CellState):
|
|
def __init__(self):
|
|
rand = random.randrange(0, 101, 1)
|
|
init = 0
|
|
if rand > 99:
|
|
init = 1
|
|
|
|
super().__init__((float(init),), draw_first_state=False)
|
|
|
|
def get_state_draw_color(self, iteration):
|
|
red = 0
|
|
if self.get_state_of_last_iteration(iteration)[0]:
|
|
red = 255
|
|
return [red, 0, 0]
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import random
|
|
from multiprocessing import freeze_support
|
|
|
|
from cellular_automaton.cellular_automaton import CellularAutomaton, CellularAutomatonProcessor
|
|
from cellular_automaton.ca_neighborhood import MooreNeighborhood, EdgeRule
|
|
from cellular_automaton.ca_display import PyGameFor2D
|
|
from cellular_automaton.ca_grid import Grid
|
|
|
|
freeze_support()
|
|
random.seed(1000)
|
|
dimension = [100, 100]
|
|
rule = TestRule()
|
|
grid = Grid(dimension=dimension, # best is 400/400 with 0,2 ca speed and 0,09 redraw
|
|
neighborhood=MooreNeighborhood(EdgeRule.FIRST_AND_LAST_CELL_OF_DIMENSION_ARE_NEIGHBORS),
|
|
state_class=MyState)
|
|
ca = CellularAutomaton(tuple(grid.get_cells().values()), dimension, rule)
|
|
ca_window = PyGameFor2D(window_size=[1000, 800], cellular_automaton=ca)
|
|
ca_processor = CellularAutomatonProcessor(process_count=4, cellular_automaton=ca)
|
|
ca_window.main_loop(cellular_automaton_processor=ca_processor,
|
|
ca_iterations_per_draw=5)
|