用pygame來制作你心中的那個游戲~可以進你的收藏夾嗎
第一章 pygame基礎使用操作
第二章 pygame創建人物顯示(待更新)
pygame基礎使用操作
- 用pygame來制作你心中的那個游戲~可以進你的收藏夾嗎
- pygame基礎使用操作
- 一、死亡使者
- 二、如何用pygame顯示視窗
- 使用到的庫
- 顯示視窗
- 顯示
- 事件
- 三、代碼升級成面向物件
- 面向物件的一些小思路
- 總結
pygame基礎使用操作
有沒有人像我一樣學習編程就是為了去制作游戲,c++是游戲行業的主流發展,但是pygame卻有著語法簡單,邏輯簡單的原因,適合做2d游戲開發,游戲的好壞與使用撰寫游戲的編程語言沒有關系,我也只是想完成很久以前,一直想做的事情,
一、死亡使者
做了GIF的效果圖,好像不是很好,唔~,見諒,見諒


總之要使用pygame實作死亡使者的攻擊,移動,復活,靜態動作等等,算是完成了主角的登場~~~~
什么敵人怎么辦,那我去拿ps改一下顏色
二、如何用pygame顯示視窗
pygame官方檔案
最頭疼的事情就是官方檔案英文看不懂,翻譯給我連代碼一起翻譯了

使用到的庫
import pygame
from sys import exit
from pygame.locals import *
1.pygame是最主要的庫,
2.pygame.locals 里面包括了pygame里面的一些定義,但是為了大家對于代碼的理解,不打算使用這個庫,
3.退出程式會使用到sys模塊的退出函式,也可以直接exit退出,
顯示視窗
pygame只需要簡單幾句代碼就可以完成視窗的顯示與事件的監聽,
代碼如下:
import pygame
import sys
pygame.display.init()
screen = pygame.display.set_mode([520, 520])
pygame.display.set_caption("死亡使者")
while True:
screen.fill(pygame.Color(255,255,255))
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.update()
這里會用到pygame的display方法,emmm,顯示函式,主要作用那肯定就是顯示視窗啦,已經不用我多說了吧,

顯示
- 使用display需要對display進行初始化也就是pygame.display.init(),
- 要顯示出一個視窗,肯定要先創建視窗物件 screen = pygame.display.set_mode([520, 520]),記住傳進去的引數是陣列,回傳的是視窗物件,以后進行的所有操作,都圍繞screen進行,
- pygame.display.set_caption(“死亡使者”),用來設定視窗名
pygame游戲實作原理就是通過對滑鼠,鍵盤事件的處理,進行創建圖片和圖片的移動,這個程序肯定需要不斷的重繪螢屏,也就是while True回圈
- 設定好的screen目前先給他填充一個白色,screen.fill(pygame.Color(255,255,255)),創建一個pygame可以使用的顏色物件就需要使用pygame.Color這個類傳進去的引數是rgb顏色體系
- pygame.display.updata()用來實作游戲的不斷重繪,一般寫在末尾,
事件
可以看到通過pygame.event.get()獲取所有的事件,其中當然包括了,滑鼠的移動,滑鼠鍵是否按下,鍵盤的每個按鍵,如果不進行事件處理,會導致無法退出,沒有任何操作性,
獲取到的事件通過for回圈遍歷,當event的型別為退出的時候,關閉程式
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
三、代碼升級成面向物件
代碼如下(示例):
import pygame
class PlayGame:
def __init__(self):
pygame.display.init()
self.screen = pygame.display.set_mode([800, 520])
self.clock = pygame.time.Clock()
pygame.display.set_caption("死亡使者")
self.map = pygame.image.load("./images/map/001map.png").convert()
def star_game(self):
while True:
self.clock.tick(60)
self.screen.blit(self.map, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame.display.update()
if __name__ == '__main__':
PlayGame().star_game()
if name == ‘main’: 這串代碼是不是寫起來很麻煩,這里悄悄告訴你們,敲main然后回車就可以了,相當于一個主程式的人口,然后只用創建主類就可以啦!
-
python 執行while Ture的速度是很快的,我們常常用不到這么快的速度,所以可以通過self.clock = pygame.time.Clock()去創建一個時鐘物件,然后在whileTure 回圈第一句呼叫self.clock.tick(60)代碼,相當于time.sleep(),那為什么不用time.sleep(),還不是這該死的優越感~~~~
-
面向物件總是不理解怎么辦,寫幾個pygame小游戲,包你透徹!!那從這里開始就要用面向物件的思路去理解代碼了,
-
self.screen.blit(self.map, (0, 0))將圖片貼到視窗

-
悄悄的貼了一張背景,這樣就不用寫screen.fill()函式了
創建地圖物件: self.map=pygame.image.load("./images/map/001map.png").convert()
在回圈里面顯示地圖物件:坐標當然是圖片左上角的位置
self.screen.blit(self.map, (0, 0))
面向物件的一些小思路
代碼如下:
import pygame
class PlayGame:
screen = None
def __init__(self):
pygame.display.init()
PlayGame.screen = pygame.display.set_mode([800, 520])
self.clock = pygame.time.Clock()
pygame.display.set_caption("死亡使者")
self.map = pygame.image.load("./images/map/001map.png").convert()
def star_game(self):
while True:
self.clock.tick(60)
PlayGame.screen.blit(self.map, (0, 0))
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
pygame.display.update()
if __name__ == '__main__':
PlayGame().star_game()
- 這里將視窗的物件screen由實體屬性轉換成類屬性,好處當然是更容易呼叫,這樣子想的話,后期多了人物等等重要的物件,都可以設定成類屬性,這樣子可以增加代碼的可讀性,當然不要想我一樣,懶得寫注釋,注釋的作用也是很重要的,只是當你熟練了這些基礎的操作,像默寫課文一樣可以寫出來的時候,注釋可以省略了
- 如果再往大了考慮,總會出現,需要的資料需要各種傳參來實作,為何不能未雨綢繆,將所有使用的資料放到data.py里面呢
主函式代碼如下:
import pygame
from data import *
class PlayGame:
def __init__(self):
pygame.display.init()
Screen.screen = pygame.display.set_mode([Screen.ScreenWeight, Screen.ScreenHeight])
Screen.clock = pygame.time.Clock()
Map.map = pygame.image.load("./images/map/001map.png").convert()
pygame.display.set_caption("死亡使者")
@staticmethod
def star_game():
while True:
Screen.clock.tick(60)
Screen.screen.blit(Map.map, Map.Map_pos)
EventGet.event_list = pygame.event.get()
EventGet.mouse = pygame.mouse.get_pos()
for event in EventGet.event_list:
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
if __name__ == '__main__':
PlayGame().star_game()
- @staticmethod將實體方法轉換成類方法,這樣就不會報黃了
- pygame.mouse.get_pos()獲取滑鼠的位置賦值給data中EventGet.mouse
- pygame.quit()關閉pygame
data.py代碼如下:
class Screen:
ScreenWeight = 800
ScreenHeight = 520
clock = None
screen = None
class Map:
map = None
Map_pos = (0, 0)
class EventGet:
event_list = None
mouse = None
- 保存了滑鼠移動的坐標,鍵盤的按鍵操作等事件,保存視窗物件,大小以及圖片物件,位置,
總結
很多想法都是自己撰寫游戲的時候,遇到的bug,寫代碼就像是建房子一樣,前期考慮的多一點,也就可以走的更遠吧,將一些公共資源保存到py檔案的變數中,方便呼叫,很多是自己的想法,參考即可,畢竟,我也只是個小萌新

代碼暫時沒有寫好,也就不發了,游戲的玩法以及操作希望得到大家的建議,~~~~ 持續禿頭中 ~~~~
所有圖片鏈接
提取碼:57mk
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/300352.html
標籤:其他
