python-貪吃蛇

目標效果:

支持移動、吃食物身體加長、撞牆遊戲結束

##############引用數據庫與函數##############
from turtle import *
from random import randrange

##############定義變量##############
snake=[[0,0],[10,0],[20,0],[30,0],[40,0],[50,0]]   #隊列,用中括號包裹
apple_x=randrange(-20,20)*10   #-200到200中隨機生成整十食物座標軸
apple_y=randrange(-20,20)*10
aim_x=10   #每次x座標都需要增長10
aim_y=0   #y不增加,橫着向右移動

##############定義函數##############
def square(x,y,size,color_name):
    up()  #把小烏龜從畫布上拿下來,懸在空中
    goto(x,y)   #去(x,y)這個位置
    down()    #把小烏龜放下來
    color(color_name)   #定義顏色
    begin_fill()   #開始填充

    forward(size)   #前進邊長的距離
    left(90)   #左轉
    forward(size)
    left(90)
    forward(size)
    left(90)
    forward(size)
    left(90)
    end_fill()   #填充,就畫好一個完整的正方形
def change(x,y):
    global aim_x,aim_y
    aim_x=x
    aim_y=y
def inside():
    if -210<=snake[-1][0]<=200 and -210<=snake[-1][1]<=200:   #判斷蛇頭是否還在畫布中,不在就返回False
        return True
    else:
        return False
def gameLoop():
    global apple_x,apple_y   #申請使用變量,聲明變量爲全局變量
    snake.append([snake[-1][0]+aim_x,snake[-1][1]+aim_y])   #向前移動,前邊添加一個身子
    if not inside():   #如果爲True,即inside方法返回False,結束
        return
    if snake[-1][0]!=apple_x or snake[-1][1]!=apple_y:   #如果沒有吃到食物,要去掉尾巴,吃掉食物尾巴就不用去掉
        snake.pop(0)
    else:
        apple_x = randrange(-20, 20) * 10  #吃到了食物,重新生成一個
        apple_y = randrange(-20, 20) * 10
    clear()   #把上一次作畫的內容清除掉
    square(apple_x, apple_y, 10, "green")  # 在座標軸畫一個紅色食物
    for i in range(len(snake)):
        square(snake[i][0],snake[i][1],10,"black")
    ontimer(gameLoop,200)
    update()   #把想畫的東西畫倒畫布上

##############主程序##############
setup(420,420,0,0)   #畫布大小爲420*420,一開始座標爲(0,0)
hideturtle()   #隱藏小烏龜
tracer(False)   #隱藏繪製過程
listen()   #監聽鍵盤
onkey(lambda :change(0,10),"w")   #如果按下w鍵,表示方向向上,aim_x=0,aim_y=10,沿着y軸向上走
onkey(lambda :change(0,-10),"s")
onkey(lambda :change(-10,0),"a")
onkey(lambda :change(10,0),"d")
gameLoop()
done()   #結束函數,畫布停留

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章