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()
U1BSSVRFUyA9IHsgMS4wIDogc3ByaXRlMSwKCQkJMi4wIDogc3ByaXRlMiwKCQkJMy4wIDogc3ByaXRlMywKCQkJNC4wIDogc3ByaXRlNCB9CgkJCQpPUEFDSVRZID0geyAxLjAgOiB2YWx1ZTEsCgkJCTIuMCA6IHZhbHVlMiwKCQkJMy4wIDogdmFsdWUzLAoJCQk0LjAgOiB2YWx1ZTQgfQoJCQkKY2xhc3MgTndDbGllbnQob2JqZWN0KToKCWRlZiBfX2luaXRfXyhzZWxmLGdhbWUpOgoJCSMgR2FtZSDigJQg0YHQsNC80LAg0LjQs9GA0LAuINCf0LXRgNC10LTQsNGR0YLRgdGPINGB0Y7QtNCwINC00LvRjyDRgtC+0LPQviwg0YfRgtC+0LHRiyDQvNC+0LbQvdC+INCx0YvQu9C+CgkJIyDRgdC+0LfQtNCw0LLQsNGC0Ywg0YHQvtCx0YvRgtC40Y8uCgkJc2VsZi5nYW1lID0gZ2FtZQoJCXNlbGYubndsaXN0ZW4oKQoJCQoJZGVmIG53bGlzdGVuKHNlbGYpOgoJCSMg0JbQtNGR0YIg0YHQvtC+0LHRidC10L3QuNGPCgkJd2hpbGUgVHJ1ZToKCQkJbXNnID0gcmVjdmZyb20oYnVmKQoJCQkjINC60LDQuiDRgtC+0LvRjNC60L4g0L/QvtC70YPRh9C10L3QviDRgdC+0L7QsdGJ0LXQvdC40LUgKNGB0L7QutC10YIg0LHQu9C+0LrQuNGA0YPRjtGJ0LjQuSksCgkJCSMg0YHQvtC30LTQsNGR0YLRgdGPINC40LPRgNC+0LLQvtC1INGB0L7QsdGL0YLQuNC1LCDQutC+0YLQvtGA0L7QtSDQtNC10LvQsNC10YIg0YfRgtC+INC90YPQttC90L4g0YEKCQkJIyDQv9C+0LvRh9C10L3QvdGL0LzQuCDQtNCw0L3QvdGL0LzQuAoJCQlzZWxmLmdhbWUuZGlzcGF0Y2hfZXZlbnQoJ29uX3JlYycsbXNnKQoJCgkKY2xhc3MgR2FtZShweWdsZXQud2luZG93KToKCSMg0KHQsNC80LAg0LjQs9GA0LAuINCY0LzQtdC10YLRgdGPINC80LDRgtGA0LjRhtCwINC+0L/RgNC10LTQtdC70ZHQvdC90L7Qs9C+INGA0LDQt9C80LXRgNCwLCDQv9C+INC60L7RgtC+0YDQvtC5CgkjINC60LDQttC00YvQuSDRgtC40Log0LjQs9GA0LAg0L/RgNC+0LHQtdCz0LDQtdGCINC4INGB0YLRgNC+0LjRgiDQvdGD0LbQvdGL0LUg0LrQu9C10YLQutC4INCyINC90YPQttC90YvRhSDQvNC10YHRgtCw0YUKCSMg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC30L3QsNGH0LXQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsCwg0LLRgdC10LPQviA1INGA0LDQt9C90YvRhSDQt9C90LDRh9C10L3QuNC5LAoJIyDQv9GA0Lgg0Y3RgtC+0Lwg0LXRgdC70Lgg0YDQsNCy0L3QviA1IOKAlCDQvdC1INC90YPQttC90L4g0YDQuNGB0L7QstCw0YLRjCDQvdC40YfQtdCz0L4uCgkjINCh0L3QsNGA0YPQttC4INC10YHRgtGMINGB0LvQvtCy0LDRgNGMINGBINGB0LDQvNC40Lwg0YHQv9GA0LDQudGC0LDQvNC4LCDRgdC+0LTQtdGA0LbQuNGCINGC0L7Qu9GM0LrQviAKCSMgNCDQutC70Y7Rh9CwLCDRgtCw0Log0LrQsNC6INC90LjQutCw0LrQvtCz0L4gNS3QvtCz0L4g0YHQv9GA0LDQudGC0LAg0L3QtdGCLgoJIyBPUEFDSVRZIOKAlCDRgdC70L7QstCw0Ywg0LfQvdCw0YfQtdC90LjQuSDQv9GA0L7Qt9GA0LDRh9C90L7RgdGC0LgsINGC0L4g0LbQtSDRgdCw0LzQvtC1LCDQutCw0Log0Lgg0YHQviDRgdC/0YDQsNC50YLQsNC80LgsCgkjINGC0L7Qu9GM0LrQviA0INC30L3QsNGH0LXQvdC40Y8uCglkZWYgX19pbml0X18oc2VsZik6CgkJc2VsZi5tYXRyaXggPSBucC5yb3VuZChucC5yYW5kb20oNiw2KSo1KQoJCglkZWYgb25fZHJhdyhzZWxmKToKCQkjINCf0LXRgNC10YDQuNGB0L7QstC60LAg0L7QutC90LAuINCS0YvQv9C+0LvQvdGP0LXRgtGB0Y8g0L/RgNC4INC60LDQttC00L7QvCDRgtC40LrQtSDRh9Cw0YHQvtCyLgoJCXNwcml0ZXNiYXRjaCA9IFtdCgkJZm9yIGkgaW4gcmFuZ2UoMCw2KToKCQkJZm9yIGogaW4gcmFuZ2UoMCw2KToKCQkJCWlmIHNlbGYubWF0cml4W2ksal0gPCA1OgoJCQkJCXNwcml0ZSA9IHB5Z2xldC5zcHJpdGUuU3ByaXRlKFNQUklURVNbc2VsZi5tYXRyaXhbaSxqXSwuLi4pCgkJCQkJc3ByaXRlLm9wYWNpdHkgPSBPUEFDSVRZW3NlbGYubWF0cml4W2kual0sLi4uKQoJCQkJCXNwcml0ZXMuYXBwZW5kKHNwcml0ZSkKCQkJCQkKCQlzcHJpdGVzYmF0Y2guZHJhdygpCgkKCWRlZiBvbl9yZWMoc2VsZixtc2cpOgoJCSMg0JIg0Y3RgtC+0Lwg0YHQvtCx0YvRgtC40Lgg0L/RgNC40YXQvtC00Y/RgiDQutC+0L7RgNC00LjQvdCw0YLRiyDQutC70LXRgtC+0Log0Lgg0L3QsCDQutCw0LrQuNC1INC30L3QsNGH0LXQvdC40Y8KCQkjINC90YPQttC90L4g0L/QvtC80LXQvdGP0YLRjC4KCQkjINCU0LvRjyDRgtC10YHRgtC+0LIg0LzQvtC20L3QviDQv9GA0L7RgdGC0L4g0L3QvtCy0YPRjiDRgNCw0L3QtNC+0LzQvdGD0Y4g0LzQsNGC0YDQuNGG0YMg0YHQvtC30LTQsNGC0YwuCgkJc2VsZi5tYXRyaXggPSBucC5yb3VuZChucC5yYW5kb20oNiw2KSo1KQoJCglkZWYgb25fa2V5X3ByZXNzKHNlbGYsa2V5LG1vZGlmaWVyKToKCQkjINCh0L7Qt9C00LDRkdC8INCw0LHRgdC+0LvRjtGC0L3QviDRgtC+INC20LUg0YHQsNC80L7QtSDRgdC+0LHRi9GC0LjQtSwg0YfRgtC+INC4INC60LvQuNC10L3RggoJCW1zZyA9ICIiCgkJc2VsZi5kaXNwYXRjaF9ldmVudCgnb25fcmVjJyxtc2cpCgkJCmdhbWUgPSBHYW1lKCkKbnR3ayA9IE53Q2xpZW50KGdhbWUpCnB5Z2xldC5hcHAucnVuKCkK
Traceback (most recent call last):
File "/usr/lib/python3.2/py_compile.py", line 119, in compile
optimize=optimize)
File "./prog.py", line 46
sprite = pyglet.sprite.Sprite(SPRITES[self.matrix[i,j],...)
^
SyntaxError: invalid syntax
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/usr/lib/python3.2/py_compile.py", line 123, in compile
raise py_exc
py_compile.PyCompileError: File "./prog.py", line 46
sprite = pyglet.sprite.Sprite(SPRITES[self.matrix[i,j],...)
^
SyntaxError: invalid syntax