本篇內(nèi)容主要講解“Python如何實現(xiàn)小游戲pong”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python如何實現(xiàn)小游戲pong”吧!
創(chuàng)新互聯(lián)建站2013年至今,先為黃埔等服務建站,黃埔等地企業(yè),進行企業(yè)商務咨詢服務。為黃埔企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
游戲動圖:
建議先仔細閱讀一下,然后再往后看 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 里面所有東西,一般是不建議導入太多內(nèi)容的,一是可能加載太多沒用的代碼,二是可能出現(xiàn)同名的類或函數(shù)。目前這只是個小游戲,后面也用到不少 turtle 里面的函數(shù),所以這么寫勉強可以接受。
往下看,整個代碼用到很多函數(shù),只要是 import 沒有明確導入的,以及非本 python 文件寫的函數(shù),其實都是這個*帶來的 turtle 內(nèi)部函數(shù)了。如果你不知道神馬意思,記得我我課程里介紹過超全的在線文檔嗎?https://devdocs.io,你只需要搜一下turtle就可以看到相關(guān)解釋了。
導入依賴部分還導入了 freegames 庫里面一些工具類和函數(shù):from freegames import vector,看單詞就可以知道是個向量,用來表示坐標。
接下來就是自定義的函數(shù)和游戲中要用到的全局變量。我們只要根據(jù)游戲中有哪些角色,他們該怎么移動,以及有哪些數(shù)據(jù)的變化,就可以很好的理解代碼了。
這個游戲里是兩類角色,一個小球,旁邊兩個擋板。小球上下左右移動,遇到上下的墻,以及左右的擋板會反彈,擋板可以根據(jù)鍵盤操作上下移動。
小球的移動是隨機的,所以先來個 value 函數(shù),隨機給出一定范圍的移動坐標。
接下來表示游戲中的主要變量,小球,移動坐標,角色狀態(tài)。其中,小球初始位置為中間,aim 表示移動的位置,所以坐標結(jié)合上面的 value 隨機函數(shù)給出,接下來的狀態(tài)用來表示左右擋板的上下移動,用字典的 key 表示左右兩個玩家 1 和 2.
move 函數(shù)修改兩個玩家的上下坐標,玩家的鍵盤綁定在代碼最后的 onkey 中給出,即左邊玩家為 w/s,右邊玩家為 i/k,分別用來移動左右擋板。
rectangle 函數(shù)用來繪制左右玩家,通過參數(shù) x,y 繪制坐標,width 和 height 繪制寬和高。
draw 函數(shù)是主要運行函數(shù),函數(shù)最底下是一個定時器,不斷循環(huán)這個函數(shù),直到小球出局。函數(shù)內(nèi)部每次先用 clear 刷新,然后繪制左右玩家。接下來隨機移動小球,小球是在規(guī)定好的范圍內(nèi)移動,碰到上下邊界需要反彈,即更改 y 坐標。接下來用 x 坐標分別和左右兩個玩家的擋板進行判斷,當小球的 y 坐標在擋板范圍內(nèi),相當于球被拍子擊中,需要反彈,即更換 x 坐標的正負號。否則小球出局,游戲結(jié)束。
到此,相信大家對“Python如何實現(xiàn)小游戲pong”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!