1. 程式人生 > >Python貪吃蛇遊戲改進版之會動的食物

Python貪吃蛇遊戲改進版之會動的食物

我一直覺得貪吃蛇遊戲中食物都是靜止不動,等著蛇來吃掉有些不太合理,畢竟蛇一般吃的都是老鼠,雞等活物,它們怎麼可能坐以待斃一動不動的等著蛇來吃掉呢,所以我決定更改一下貪吃蛇的程式碼,讓食物可以自由活動,我們需要重新定義食物模組,我們假設貪吃蛇吃的是雞,這首先定義一個雞模組,同樣的,雞也是由列表組成的:

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)