真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python如何實現(xiàn)小游戲?pong

本篇內(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)同步一站式服務解決您的所有建站問題。

游戲動圖:

Python如何實現(xiàn)小游戲?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 里面所有東西,一般是不建議導入太多內(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ù)學習!


當前題目:Python如何實現(xiàn)小游戲?pong
網(wǎng)頁鏈接:http://weahome.cn/article/pcjpih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部