SPRITES = { 1.0 : sprite1,
			2.0 : sprite2,
			3.0 : sprite3,
			4.0 : sprite4 }
			
OPACITY = { 1.0 : value1,
			2.0 : value2,
			3.0 : value3,
			4.0 : value4 }
			
class NwClient(object):
	def __init__(self,game):
		# Game — сама игра. Передаётся сюда для того, чтобы можно было
		# создавать события.
		self.game = game
		self.nwlisten()
		
	def nwlisten(self):
		# Ждёт сообщения
		while True:
			msg = recvfrom(buf)
			# как только получено сообщение (сокет блокирующий),
			# создаётся игровое событие, которое делает что нужно с
			# полченными данными
			self.game.dispatch_event('on_rec',msg)
	
	
class Game(pyglet.window):
	# Сама игра. Имеется матрица определённого размера, по которой
	# каждый тик игра пробегает и строит нужные клетки в нужных местах
	# в зависимости от значения элемента, всего 5 разных значений,
	# при этом если равно 5 — не нужно рисовать ничего.
	# Снаружи есть словарь с самим спрайтами, содержит только 
	# 4 ключа, так как никакого 5-ого спрайта нет.
	# OPACITY — словаь значений прозрачности, то же самое, как и со спрайтами,
	# только 4 значения.
	def __init__(self):
		self.matrix = np.round(np.random(6,6)*5)
	
	def on_draw(self):
		# Перерисовка окна. Выполняется при каждом тике часов.
		spritesbatch = []
		for i in range(0,6):
			for j in range(0,6):
				if self.matrix[i,j] < 5:
					sprite = pyglet.sprite.Sprite(SPRITES[self.matrix[i,j],...)
					sprite.opacity = OPACITY[self.matrix[i.j],...)
					sprites.append(sprite)
					
		spritesbatch.draw()
	
	def on_rec(self,msg):
		# В этом событии приходят координаты клеток и на какие значения
		# нужно поменять.
		# Для тестов можно просто новую рандомную матрицу создать.
		self.matrix = np.round(np.random(6,6)*5)
	
	def on_key_press(self,key,modifier):
		# Создаём абсолютно то же самое событие, что и клиент
		msg = ""
		self.dispatch_event('on_rec',msg)
		
game = Game()
ntwk = NwClient(game)
pyglet.app.run()
