-
Notifications
You must be signed in to change notification settings - Fork 0
/
snake_core.py
51 lines (39 loc) · 1.42 KB
/
snake_core.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
from worker.worker import Worker
from kivy.core.window import Window
from random import random
from math import ceil
import Queue
import numpy as np
from numpy import array as ar
from kivy.graphics import Color
class player(object):
def __init__(self):
self.position = ar([0, 0])
self.color = Color(random(), 1, 1, mode='hsv')
class SnakeCore(Worker):
def __init__(self):
Worker.__init__(self)
layout = {'grid_size':10, 'width':80, 'height':40}
gd = layout['grid_size']
w = layout['width']
h = layout['height']
ww = gd * w
hh = gd * h
Window.size = (ww, hh)
self._layout = layout
players = [player(), player()]
for i in [0, 1]:
players[i].position = ar([ceil(random() * x) for x in [w, h]])
self._players = players
def _routine(self):
while not self.mission_in.empty():
try: mission = self.mission_in.get_nowait()
except Queue.Empty: break
player = self._players[mission['player']]
cmd = mission['command']
step = mission['speed']
action_dict = {'up':[0, step], 'down':[0, -step], 'left':[-step, 0], 'right':[step, 0]}
shift = ar(action_dict[cmd])
player.position += shift
def _export_mission(self, receiver):
return [self]