中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么實現小游戲?flappy-bird

發布時間:2021-12-17 17:36:32 來源:億速云 閱讀:1066 作者:iii 欄目:大數據

這篇文章主要講解了“Python怎么實現小游戲flappy-bird”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Python怎么實現小游戲flappy-bird”吧!

游戲動圖:

Python怎么實現小游戲?flappy-bird

 

源碼

建議先仔細閱讀一下,然后再往后看 DE8UG 對源碼的分析。

from random import *
from turtle import *
from freegames import vector

bird = vector(0, 0)
balls = []
score = 0

def tap(x, y):
   "Move bird up in response to screen tap."
   up = vector(0, 30)
   bird.move(up)

def inside(point):
   "Return True if point on screen."
   return -200 < point.x < 200 and -200 < point.y < 200

def draw(alive):
   "Draw screen objects."
   clear()
   goto(bird.x, bird.y)

   if alive:
       dot(10, 'green')
   else:
       dot(10, 'red')

   for ball in balls:
       goto(ball.x, ball.y)
       dot(20, 'black')

   update()

def move():
   "Update object positions."
   global score
   bird.y -= 5

   for ball in balls:
       ball.x -= 3

   if randrange(10) == 0:
       y = randrange(-199, 199)
       ball = vector(199, y)
       balls.append(ball)

   while len(balls) > 0 and not inside(balls[0]):
       balls.pop(0)
       score += 1
       print(f'get {score} scores')

   if not inside(bird):
       draw(False)
       return

   for ball in balls:
       if abs(ball - bird) < 15:
           draw(False)
           return

   draw(True)

   # 在鳥的位置,繪制分數
   goto(bird.x, bird.y)
   write(score, font=('Arial', 30, 'normal'))

   ontimer(move, 50)

setup(420, 420, 370, 0)
hideturtle()
up()
tracer(False)
onscreenclick(tap)
move()
done()
   

運行

復制上述代碼到一個 py 為后綴的文件,命名 flappy.py.

在文件所在目錄打開控制臺:運行pip install freegames,然后運行python flappy.py

 

分析

查看一個 py 文件中的源碼,最開始可以對他們進行區域劃分。一般有這么幾個區域:

  • 導入
  • 全局變量
  • 函數
  • 調用流程

我們可以先大致看幾個區域的變量和函數定義,然后從調用流程入手,一步步的分析代碼。

這個游戲代碼是一個第三方庫 freegames 的一部分。從最上面導入依賴部分可以看出,主要是依賴于 turtle 這個庫。

from turtle import *的最后是個*,表示導入了 turtle 里面所有東西,一般是不建議導入太多內容的,一是可能加載太多沒用的代碼,二是可能出現同名的類或函數。目前這只是個小游戲,后面也用到不少 turtle 里面的函數,所以這么寫勉強可以接受。

往下看,整個代碼用到很多函數,只要是 import 沒有明確導入的,以及非本 python 文件寫的函數,其實都是這個*帶來的 turtle 內部函數了。如果你不知道神馬意思,記得我我課程里介紹過超全的在線文檔嗎?https://devdocs.io,你只需要搜一下turtle就可以看到相關解釋了。

導入依賴部分還導入了 freegames 庫里面一些工具類和函數:from freegames import vector,看單詞就可以知道是個向量,用來表示坐標。

接下來是幾個函數:tap,inside,draw,move。

Flappy Bird, 是一個幾年前一位越南開發者做的游戲,風靡一時,容易上癮,褒貶不一。DE8UG 認為這是一個不錯的游戲,目前我們看到的這個 python 代碼,雖然沒有把小鳥和障礙物完全描述出來,但是從學習和娛樂角度來看,已經足夠了。

故事很簡單:一個小鳥,需要不斷拍動翅膀往前飛,同時躲避障礙物。

針對小鳥和障礙物的行為,就不難理解這幾個函數了。

tap 表示扇動翅膀,我們用點擊屏幕來模擬飛行。

inside 判斷障礙物是否在屏幕內。

draw 用來繪制小鳥和障礙物,這里其實都是點,不同的是小鳥為綠色表示正常,紅色表示失敗。障礙物都用黑色表示。這里有個傳入的參數 alive,用來根據小鳥的死活來繪制不同的顏色。同時,繪制障礙物時,注意用 goto 調整不同的位置,以繪制出不同位置的障礙物小球。

move 函數的功能就比較多了,首先要有小鳥的自動降落,表示如果不扇動翅膀就會掉到地上死翹翹了。然后需要繪制黑色小球表示障礙物。這里障礙物相對小鳥是往左移動的,所以 x 設置為-3(函數最后有 ontimer(move, 50)表示定時移動)。接下來是隨機模擬不同位置的障礙物,這里主要是縱坐標 y 在屏幕內的變化。接下來判斷如果障礙物已經不再屏幕內,就從列表里面移除。我這里添加了一個 score 變量,在順利躲避了障礙之后,用來累計分數。之后判斷 bird 的位置如果不在屏幕內,就給上面的 draw 函數添加參數 False,然后 return 退出。一切正常的話,就循環判斷所有的障礙物,判斷小鳥和障礙物的位置是否小與一個閾值,這里寫的 15。當小于這個值,表示相撞,小鳥就死翹翹了。最后在鳥的位置,繪制分數,這會是一個動態刷新的過程。

感謝各位的閱讀,以上就是“Python怎么實現小游戲flappy-bird”的內容了,經過本文的學習后,相信大家對Python怎么實現小游戲flappy-bird這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

红原县| 乾安县| 沾益县| 玉山县| 大关县| 嵊州市| 西华县| 睢宁县| 天祝| 淮北市| 定远县| 讷河市| 盐池县| 福安市| 灵武市| 阿尔山市| 灌阳县| 高邑县| 漯河市| 库尔勒市| 尚志市| 莱阳市| 高唐县| 甘谷县| 化德县| 玉屏| 策勒县| 阿城市| 抚顺县| 泰来县| 葫芦岛市| 正蓝旗| 华亭县| 吉水县| 藁城市| 丹凤县| 从江县| 临猗县| 陆丰市| 临西县| 蕉岭县|