git.fiddlerwoaroof.com
main.py
b501d2f4
 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
 
9c6e9477
 # 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))
b501d2f4
 gens = 0
 def change(arr):
 	global gens
 	gens += 1
 	live = arr == 1
9c6e9477
 	# Finite grid
 	#new = sig.convolve2d(arr,cm,'same')
 	# Torus
b501d2f4
 	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()
 
9c6e9477
 		tc.sys_set_fps(30)
 		self.arr = np.random.random_integers(0,1,(HEIGHT,WIDTH))
b501d2f4
 
 	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)
9c6e9477
 		change(self.arr)
b501d2f4
 		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()