2020年9月12日星期六

78 《零基礎入門學習Python》筆記 第078講:Pygame:初見

《零基礎入門學習Python》筆記  第078講:Pygame:初見



從這一節課開始,我們就來講遊戲開發,那麼在Python中提到遊戲開發,那肯定非Pygame 莫屬了,Pygame 是一個利用SDL 庫實現的模塊,我們先來安裝Pygame。
打開CMD,輸入pip install Pygame,回車即可。
  1. C:\Users\Admin>pip install pygame
  2. Collecting pygame
  3. Using cached https://files.pythonhosted.org/packages/e2/60/2b6c8fcbed5d8817ae43fd36308ed683961002376a7be04b0d65ebce8466/pygame-1.9.4-cp35-cp35m-win_amd64.whl
  4. Installing collected packages: pygame
  5. Successfully installed pygame-1.9.4
打開IDLE,驗證安裝成功。
  1. >>> import pygame
  2. pygame 1.9.4
  3. Hello from the pygame community. https://www.pygame.org/contribute.html
  4. >>> pygame.ver
  5. '1.9.4'
Pygame 作為一個遊戲模塊,主要具備哪些功能呢?
  • 繪製圖形:能夠繪製圓形、三角形、菱形、矩形這所有我們想像的到的圖形,這跟我們的tkinter一樣,能夠繪製這些圖形。
  • 顯示圖片:素材就是以圖片的形式提供的,需要把它們顯示出來。
  • 動畫效果。
  • 與鍵盤、鼠標和遊戲手柄等外設交互。
  • 播放聲音。
  • 支持碰撞檢測。
好了,既然是最後一個章節,現在應該不需要一步一步給大家講解了,目前最好的學習方法就是直接分析代碼,來學習Python。
首先看一下這節課的代碼:
  1. import pygame
  2. import sys
  3. # 初始化Pygame
  4. pygame.init()
  5. size = width, height = 800, 600
  6. speed = [-2, 1]
  7. bg = (255, 255, 255) # RGB 白色
  8. # 创建指定大小的窗口 Surface
  9. screen = pygame.display.set_mode(size)
  10. # 设置窗口标题
  11. pygame.display.set_caption("初次见面,请大家多多关照!")
  12. # 加在图片
  13. turtle = pygame.image.load("python.png")
  14. # 获得图像的位置矩形
  15. position = turtle.get_rect()
  16. while True:
  17. for event in pygame.event.get():
  18. if event.type == pygame.QUIT:
  19. sys.exit()
  20. # 移动图像
  21. position = position.move(speed)
  22. if position.left < 0 or position.right > width:
  23. # 翻转图像
  24. turtle = pygame.transform.flip(turtle, True, False)#水平翻转,垂直不翻转
  25. # 反方向移动
  26. speed[0] = -speed[0]
  27. if position.top < 0 or position.bottom > height:
  28. speed[1] = -speed[1]
  29. # 填充背景
  30. screen.fill(bg)
  31. # 更新图像
  32. screen.blit(turtle, position)
  33. # 更新界面
  34. pygame.display.flip()
  35. # 延迟10毫秒
  36. pygame.time.delay(10)
運行的效果就是:一隻小蟒蛇,到處走,撞牆之後自動掉頭,我們點右上角關閉,我們發現關閉不了,這是為什麼呢?
這是因為pygame 的事件循環和IDLE 的tkinter 事件循環是衝突的。直接雙擊以Python.exe運行,就可以關閉了。
我們現在來分析代碼,通過代碼來學習Pygame。
首先就是import pygame。import sys 是退出程序要用的。
第一個要執行的就是init(),初始化pygame,為什麼要初始化呢?因為我們的pygame 事實上是一個包,一個包裡麵包含了各種不同功能的模塊,init() 就是初始化這些模塊,讓它們做好準備,隨時待命。
下面接下來是一些變量的設置,我們還不管它們,接著往下看。
我們調用display.set_mode() 創建指定大小的窗口,創建的窗口就是一個Surface對象,size 就是上面定義的變量,實際上是一個元組。
然後設置標題。
我們使用image.load() 加載圖片,加載的圖片也是一個Surface對象。
把圖片加載進去,我們通過get_rect() 來獲得它的當前矩形位置,賦值給position。
然後我們就進入死循環,在死循環裡面,我們移動圖像位置。
我們如何停止程序呢?我們就是通過檢測是否點擊了X ,如果點擊了,就退出,sys.exit()。
移動圖像就是使用矩形位置對象的move() 方法,偏移位置就是speed,x軸偏移-2,y軸偏移+1。
下面兩個if 語句就是檢測是否出了邊界,通過矩形位置對象的left 、right、top、botton 屬性來判斷是否出界,如果要出界,就反方向走。同時,如果左右出界的話,還要水平翻轉一下。
下面填充背景為純白色(255,255,2550)
blit() 就是將一個圖像畫到另一個圖像上。
然後就是刷新界面。
最後就是延遲10毫秒,減緩圖像移動速度。
這節課到此結束,大家好好分析一下代碼,後面會加深難度哦。


0 留言:

發佈留言