0 Star 0 Fork 0

hippo / snake

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
control.py 2.94 KB
一键复制 编辑 原始数据 按行查看 历史
hippo 提交于 2015-10-26 15:53 . merge update
'''
Created on 2009-4-13
@author: hippo
'''
from snake import *
from food import *
from rock import *
# status
RUNNING = 'run'
DEAD = 'dead'
SUSPEND = 'suspend'
class Controler():
'''
control snake's behaves,
such as turn left,turn right etc.
'''
def __init__(self):
'''
init the controler,pass the snake to me!
'''
#self.draw_screen = func_draw
self.snake = Snake(GRID_LEN // 2, GRID_LEN // 2, 6)
self.rocks = self._gen_rocks(ROCK_NUM)
self.food = self._gen_food()
self.status = RUNNING
def _gen_rock(self):
r = Rock()
self._node_reset(r, self.snake.body)
return r
def _gen_rocks(self, num):
rocks = []
for i in range(num):
rocks.append(self._gen_rock())
return rocks
def _gen_food(self):
f = Food()
self._node_reset(f, self.snake.body)
self._node_reset(f, self.rocks)
return f
def _node_reset(self, node, ref_list):
flag = False
for i in ref_list:
if node._x == i._x and node._y == i._y:
flag = True
break
if flag:
node.reset()
self._node_reset(node, ref_list)
# def game_start(self):
# self.status = RUNNING
# if self.snake._speed > 0:
# self.snake_timer = SnakeTimer(0.1, self.snake_move)
# self.snake_timer.daemon = True
# self.snake_timer.start()
def snake_up(self):
self.snake.turn(UP)
def snake_down(self):
self.snake.turn(DOWN)
def snake_left(self):
self.snake.turn(LEFT)
def snake_right(self):
self.snake.turn(RIGHT)
def snake_move(self):
if self.status == DEAD:
for i in self.snake.body:
i.color = None
return
if self.status == SUSPEND:
return
self.snake.move()
#print('snake_move_start')
# the snake eat then food
if self.food._x == self.snake.body[0]._x and self.food._y == self.snake.body[0]._y:
self.snake.grow()
self._node_reset(self.food, self.snake.body)
self._node_reset(self.food, self.rocks)
# detect the snake if touch itself
for i in self.snake.body[1:]:
if self.snake.body[0]._x == i._x and self.snake.body[0]._y == i._y:
self.status = DEAD
break
# detect the snake if touch the rocks
for i in self.rocks:
if self.snake.body[0]._x == i._x and self.snake.body[0]._y == i._y:
self.status = DEAD
break
#print('snake_move_stop')
# draw the screen
#self.draw_screen()
def game_suspend_resume(self):
if self.status == DEAD:
return
if self.status == RUNNING:
self.status = SUSPEND
return
if self.status == SUSPEND:
self.status = RUNNING
Python
1
https://gitee.com/biz00/snake.git
git@gitee.com:biz00/snake.git
biz00
snake
snake
master

搜索帮助