我一直覺得貪喫蛇遊戲中食物都是靜止不動,等着蛇來喫掉有些不太合理,畢竟蛇一般喫的都是老鼠,雞等活物,它們怎麼可能坐以待斃一動不動的等着蛇來喫掉呢,所以我決定更改一下貪喫蛇的代碼,讓食物可以自由活動,我們需要重新定義食物模塊,我們假設貪喫蛇喫的是雞,這首先定義一個雞模塊,同樣的,雞也是由列表組成的:
class chichken(object):
def __init__(self): self.item=[(40,20),(40,19)]
相同的,當蛇喫雞後,雞同樣需要重新生成,這端代碼也是不變的:
def update(self,screen,enlarge,snack):
if enlarge:
self.item[0]=np.random.randint(1,BOARDWIDTH-2),np.random.randint(1,BOARDHEIGHT-2)
while self.item in snack.item:
self.item[0]=np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
self._draw(screen,self.item[0][0],self.item[0][1])
那麼我們如何能讓小雞自己動起來呢,參照蛇移動的原理,筆者同樣定義了一個self.y和self.x,作爲小雞的朝向,利用隨機函數,使得self.y和self.x在-1到1之間隨機選取,這樣,便達到讓小雞自動的往四個方向隨機移動的目的了:最後利用pygame畫圓的功能pygame.draw.circle,,我們便有了一隻活蹦亂跳的小雞了。
def chicken_move(self):
x=1
y=1
self.x=1
self.y=1
if self.x*x>0 and self.y*y>0:
self.x = random.randint(-1, 1)
self.y = random.randint(-1, 1)
x = self.x
y = self.y
self.item.pop()
chichken = (self.item[0][0] + self.x, self.item[0][1] + self.y)
if chichken[0]==BOARDWIDTH or chichken[0]==0 or chichken[1]==BOARDHEIGHT or chichken[1]==0:
chichken = np.random.randint(1, BOARDWIDTH - 2), np.random.randint(1, BOARDHEIGHT - 2)
self.item.insert(0, chichken)
def _draw(self,screen,q,w):
color=255,255,0
radius=8
width=8
position=10+20*q,10+20*w
pygame.draw.circle(screen,color,position,radius,width)