您好,登錄后才能下訂單哦!
本篇內容主要講解“Python如何實現小游戲pong”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何實現小游戲pong”吧!
游戲動圖:
建議先仔細閱讀一下,然后再往后看 DE8UG 對源碼的分析。
from random import choice, random
from turtle import *
from freegames import vector
def value():
"Randomly generate value between (-5, -3) or (3, 5)."
return (3 + random() * 2) * choice([1, -1])
ball = vector(0, 0)
aim = vector(value(), value())
state = {1: 0, 2: 0}
def move(player, change):
"Move player position by change."
state[player] += change
def rectangle(x, y, width, height):
"Draw rectangle at (x, y) with given width and height."
up()
goto(x, y)
down()
begin_fill()
for count in range(2):
forward(width)
left(90)
forward(height)
left(90)
end_fill()
def draw():
"Draw game and move pong ball."
clear()
rectangle(-200, state[1], 10, 50)
rectangle(190, state[2], 10, 50)
ball.move(aim)
x = ball.x
y = ball.y
up()
goto(x, y)
dot(10)
update()
if y < -200 or y > 200:
aim.y = -aim.y
if x < -185:
low = state[1]
high = state[1] + 50
if low <= y <= high:
aim.x = -aim.x
else:
return
if x > 185:
low = state[2]
high = state[2] + 50
if low <= y <= high:
aim.x = -aim.x
else:
return
ontimer(draw, 50)
setup(420, 420, 370, 0)
hideturtle()
tracer(False)
listen()
onkey(lambda: move(1, 20), 'w')
onkey(lambda: move(1, -20), 's')
onkey(lambda: move(2, 20), 'i')
onkey(lambda: move(2, -20), 'k')
draw()
done()
復制上述代碼到一個 py 為后綴的文件,命名 pong.py.
在文件所在目錄打開控制臺:運行pip install freegames
,然后運行python pong.py
這個游戲代碼是一個第三方庫 freegames 的一部分。從最上面導入依賴部分可以看出,主要是依賴于 turtle 這個庫。
from turtle import *
的最后是個*,表示導入了 turtle 里面所有東西,一般是不建議導入太多內容的,一是可能加載太多沒用的代碼,二是可能出現同名的類或函數。目前這只是個小游戲,后面也用到不少 turtle 里面的函數,所以這么寫勉強可以接受。
往下看,整個代碼用到很多函數,只要是 import 沒有明確導入的,以及非本 python 文件寫的函數,其實都是這個*帶來的 turtle 內部函數了。如果你不知道神馬意思,記得我我課程里介紹過超全的在線文檔嗎?https://devdocs.io,你只需要搜一下turtle就可以看到相關解釋了。
導入依賴部分還導入了 freegames 庫里面一些工具類和函數:from freegames import vector,看單詞就可以知道是個向量,用來表示坐標。
接下來就是自定義的函數和游戲中要用到的全局變量。我們只要根據游戲中有哪些角色,他們該怎么移動,以及有哪些數據的變化,就可以很好的理解代碼了。
這個游戲里是兩類角色,一個小球,旁邊兩個擋板。小球上下左右移動,遇到上下的墻,以及左右的擋板會反彈,擋板可以根據鍵盤操作上下移動。
小球的移動是隨機的,所以先來個 value 函數,隨機給出一定范圍的移動坐標。
接下來表示游戲中的主要變量,小球,移動坐標,角色狀態。其中,小球初始位置為中間,aim 表示移動的位置,所以坐標結合上面的 value 隨機函數給出,接下來的狀態用來表示左右擋板的上下移動,用字典的 key 表示左右兩個玩家 1 和 2.
move 函數修改兩個玩家的上下坐標,玩家的鍵盤綁定在代碼最后的 onkey 中給出,即左邊玩家為 w/s,右邊玩家為 i/k,分別用來移動左右擋板。
rectangle 函數用來繪制左右玩家,通過參數 x,y 繪制坐標,width 和 height 繪制寬和高。
draw 函數是主要運行函數,函數最底下是一個定時器,不斷循環這個函數,直到小球出局。函數內部每次先用 clear 刷新,然后繪制左右玩家。接下來隨機移動小球,小球是在規定好的范圍內移動,碰到上下邊界需要反彈,即更改 y 坐標。接下來用 x 坐標分別和左右兩個玩家的擋板進行判斷,當小球的 y 坐標在擋板范圍內,相當于球被拍子擊中,需要反彈,即更換 x 坐標的正負號。否則小球出局,游戲結束。
到此,相信大家對“Python如何實現小游戲pong”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。