您好,登錄后才能下訂單哦!
這篇文章主要介紹“Python怎么實現大魚吃小魚游戲”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Python怎么實現大魚吃小魚游戲”文章能幫助大家解決問題。
大魚吃小魚.py
注意程序的mouth對象,它并不是"隱藏"的,雖然它看不見。
小魚碰到mouth會被“吃掉”。如果把mouth用hide命令設為隱藏,那么是無法獲取到mouth的綁定盒,從而碰撞檢測失效。
from sprites import * def calculate_pos(obj): """obj:精靈對象。這個函數計算矩形下右角的一個坐標并返回它。 """ x,y = obj.position() # 角色的坐標 mx,my = mouse_position() # 鼠標指針的坐標 k = 1 if mx > x else -1 # 在右則為1,否則為-1 left,top,right,bottom = obj.bbox()# 獲取綁定盒 w = right-left # 大魚的寬度 h = top - bottom # 大魚的高度 x0 = x + k * w//2.5 # 嘴巴大概的x坐標 y0 = y - h//12 # 嘴巴大概的y坐標 return x0,y0
width,height = 480,360 screen = Screen() # 新建寬高 screen.setup(width,height) # 設置寬高 screen.bgpic('res/underwater.png') # 設背景圖 screen.title("圖靈大海之大魚吃小魚")
fish_group = Group(tag='fish') # 新建組,標簽為fish fishes = ['res/fish2.png','res/fish3.png','res/fish4.png','res/crab-b.png'] # 由于下面的魚的標簽都是fish,所以會自動加入到fish_group中 for x in range(10): x = random.randint(-200,200) y = random.randint(-140,140) f = Sprite(shape=random.choice(fishes),tag='fish',pos=(x,y)) f.scale(0.5) [fish.setheading(random.randint(1,360)) for fish in fish_group] m1 = Mouse(1) # 鼠標左鍵 fish = Sprite('res/fish2-a.png') # 實例化大魚 fish.rotatemode(1) # 左右翻轉 fishscale= 0.6 fish.scale(fishscale) mouth = Sprite(shape='circle') # 實例化嘴巴,用于碰撞檢測 mouthscale = 0.4 mouth.scale(mouthscale) # 縮放嘴巴大小 mouth.setalpha(0) # 把它設為透明,改為非0它會顯示出來 clock = Clock() # 新建時鐘對象
while True: for f in fish_group: if f.isvisible():f.fd(1) # 在可見的情況下才移動 # 小魚碰到嘴巴及單擊鼠標則被吃掉,大魚長大 if f.collide(mouth,0.5) and m1.down() : fishscale += 0.01 fish.scale(fishscale) # 大魚長大 mouthscale += 0.01 mouth.scale(mouthscale) # 嘴巴跟著加大 x = random.randint(-200,200) y = random.randint(-140,140) # 注意這里調用了reborn后,魚會立即隱藏,3后后出現 # 在3秒內碰撞檢測無效,所以魚不能動 f.reborn(x,y,delay=3) f.shape(random.choice(fishes)) f.bounce_on_edge() fish.heading(mouse_pos()) # 大魚跟隨鼠標指針 x0,y0 = calculate_pos(fish) # 計算嘴巴的大概坐標 mouth.goto(x0,y0) # 嘴巴大這個坐標 md = fish.distance(mouse_pos()) # 計算魚到鼠標指針距離 if md > 50:fish.fd(min(md,4)) # 如果距離大于50則游 # 張嘴與合嘴 if m1.down(): fish.shape('res/fish2-a.png') else: fish.shape('res/fish2-b.png') screen.update() clock.tick(60) fish.shape('res/fish2-a.png') else: fish.shape('res/fish2-b.png') screen.update() clock.tick(60)
關于“Python怎么實現大魚吃小魚游戲”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。