亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

高陵县| 巫溪县| 榆林市| 浑源县| 宜良县| 渝中区| 峨边| 普格县| 黔江区| 兰溪市| 务川| 高州市| 芜湖市| 吉木萨尔县| 二手房| 应城市| 四子王旗| 平江县| 辽宁省| 田林县| 青冈县| 界首市| 兴安县| 定日县| 离岛区| 泽州县| 石城县| 惠东县| 台山市| 湄潭县| 阳朔县| 温州市| 卢龙县| 杭锦旗| 墨江| 尖扎县| 盐边县| 万盛区| 白城市| 涟水县| 噶尔县|