91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Python如何實現小游戲?pong

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

本篇內容主要講解“Python如何實現小游戲pong”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“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”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

泸水县| 噶尔县| 邢台市| 淮北市| 延寿县| 高雄县| 麻城市| 洛浦县| 鹤山市| 花莲市| 闽清县| 贡觉县| 方正县| 将乐县| 泸西县| 通辽市| 夏津县| 仁化县| 西吉县| 观塘区| 文水县| 阜平县| 青田县| 盘锦市| 拉孜县| 柳江县| 隆回县| 枝江市| 仙游县| 柳河县| 安西县| 贵定县| 柘荣县| 隆化县| 申扎县| 广水市| 宁蒗| 射洪县| 天台县| 汉中市| 商河县|