import os if __name__ == '__main__': HOME=os.environ['HOME'] execfile(os.path.join(HOME, 'python_envs', 'roguelike', 'bin', 'activate_this.py'), dict(__file__=os.path.join(HOME, 'python_envs', 'roguelike', 'bin', 'activate_this.py'))) import scipy.signal import random #random.seed(2) import libtcodpy as tc import numpy as np import scipy.signal as sig from src import console from src import events from gui import text_display import random import bisect from twisted.internet import reactor import twisted.internet WIDTH = 155 HEIGHT = 87 def scale_array(arr, min, max): omin, omax = arr.min(), arr.max() arr -= omin arr *= (max - min) arr /= (omax - omin) arr += min return arr # For Conway's game of life: #cm = np.array([[1,1,1],[1,0,1],[1,1,1]]) # For a random neighbour selection: cm = np.random.random_integers(0,np.random.random_integers(1,3), (3,3)) gens = 0 def change(arr): global gens gens += 1 live = arr == 1 # Finite grid #new = sig.convolve2d(arr,cm,'same') # Torus new = sig.convolve2d(arr,cm,'same', 'wrap') arr[live & (new < 2)] = 0 arr[live & (new > 3)] = 0 arr[new == 3] = 1 class Application(object): def __init__(self): self.screen = console.Screen(WIDTH, HEIGHT+5) self.console = console.Console(WIDTH, HEIGHT, self.screen) self.border = console.Console(WIDTH, 5, self.screen, (0,HEIGHT)) self.message_console = console.Console(WIDTH-2, 5, self.screen, (1,HEIGHT)) self.messages = text_display.MessageBox(self.message_console, 5, (22,0), 'msg') self.fps_display = text_display.Label(self.message_console, (0,0), None) self.generations = text_display.Label(self.message_console, (0,1), None) self.rule = text_display.Array2DDisplay(self.message_console, (5,0), None) self.rule.associate(cm) self.tc_events = events.TCODEventHandler() self.events = events.EventHandler() tc.sys_set_fps(30) self.arr = np.random.random_integers(0,1,(HEIGHT,WIDTH)) def init(self): self.screen.init("test") self.border.fill(0,0,64) self.border.blit() self.message_console.fill(0,0,128) self.rule.update() def tick(self): self.tc_events.tick() self.fps_display.set_text('%d', tc.sys_get_fps()) self.generations.set_text('%d' % gens) change(self.arr) c = self.arr*255 tc.console_fill_background(self.console.con, c,c,c) self.console.blit() self.message_console.blit() tc.console_flush() if tc.console_is_window_closed(): reactor.stop() else: reactor.callLater(0, self.tick) if __name__ == '__main__': app = Application() app.init() reactor.callWhenRunning(app.tick) reactor.run()