python3 用pygame 简单建一个飞船模型
本文所用到的ship.bmp和alien.bmp的下載? ?鏈接: https://pan.baidu.com/s/1Dn5yaQGZLIsN0BohM8PzoA ?密碼: 38ie
第一部分:認(rèn)識(shí)pygame的簡單的一些函數(shù),利用命令簡單地構(gòu)造畫面
我用我個(gè)人的理解逐漸剖析如何在python3中建一個(gè)窗口,里面放置一個(gè)飛船。
首先我們先來分析一些事情:
?事情1:用python3,創(chuàng)建游戲窗口需要以下代碼:
? ? ? ?導(dǎo)入pygame,就是執(zhí)行import pygame
? ? ? ?導(dǎo)入sys,就是執(zhí)行import sys,這個(gè)主要是一會(huì)調(diào)用sys.exit()結(jié)束游戲用的
? ? ? ?首先是執(zhí)行pygame.init()? ? 這個(gè)語句會(huì)初始化pygame,使得pygame可用,里面初始化了很多組建,大約9個(gè)以內(nèi),具體什么也忘記了
? ? ? ?其次是設(shè)置窗口大小,執(zhí)行pygame.display.set_mode((1000,800)),這個(gè)執(zhí)行完畢后,以后入職建立無限循環(huán),那么就可以把它畫進(jìn)去。
? ? ? ?然后值設(shè)置窗口說明,執(zhí)行pygame.display.set_caption("some caption like.....")
? ? ? ?如果要設(shè)置窗口的背景顏色,那么還需要定義一個(gè)顏色,例如(255,0,255)
? ? ? 接下來建立一個(gè)無限循環(huán),就可以畫出剛才定義好的窗口,代碼如下:
import sys import pygame pygame.init() screen = pygame.display.set_mode((1000,900)) pygame.display.set_caption("alien invasion") color = (0,255,255) while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(color)pygame.display.flip()事情2:
畫一個(gè)飛船,并且顯示在事情1定義的screen中:
import sys import pygamepygame.init() screen = pygame.display.set_mode((1000,900))#create ship screen_rect = screen.get_rect() ship_image = pygame.image.load('image/ship.bmp') ship_rect = ship_image.get_rect() ship_rect.centerx = screen_rect.centerx ship_rect.bottom = screen_rect.bottompygame.display.set_caption("alien invasion") color = (0,255,255) while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()#這里一定注意,先執(zhí)行填充顏色,再執(zhí)行填充位圖,很好理解,否則飛船會(huì)被顏色覆蓋#先執(zhí)行screen.fill(color)screen.fill(color)#后執(zhí)行填充位圖screen.blit(....)screen.blit(ship_image,ship_rect)pygame.display.flip()執(zhí)行結(jié)果:
其實(shí),代碼可以簡寫為如下形式:
import sys import pygamepygame.init() screen = pygame.display.set_mode((1000,900))#create ship screen_rect = screen.get_rect() ship_image = pygame.image.load('image/ship.bmp') ship_rect = ship_image.get_rect() #以下兩句是改變飛船位置的,如果不改變位置,則使用默認(rèn)位置,也就是左上角 #ship_rect.centerx = screen_rect.centerx #ship_rect.bottom = screen_rect.bottompygame.display.set_caption("alien invasion") color = (0,255,255) while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(color)screen.blit(ship_image,ship_rect)pygame.display.flip()執(zhí)行結(jié)果如下:
?
更簡單的情況,畫一個(gè)飛船,直接傳給screen去顯示:
import sys import pygame pygame.init() screen = pygame.display.set_mode((1000,800)) ship = pygame.image.load('ship.bmp') ship_rect = ship.get_rect() pygame.display.set_caption("alien invasion")while True:screen.fill((255,4,245))screen.blit(ship,ship_rect)pygame.display.flip()個(gè)人看法:在一個(gè)screen內(nèi)建ship,其實(shí)只要建screen和ship,并且直接把ship的圖像和位置傳給screen即可。screen.blit(圖片,圖片位置)
?
接下來,心血來潮,再在screen底部中央畫一個(gè)alien.bmp,先把a(bǔ)lien.bmp放置在python3代碼文件同一個(gè)文件夾下,然后編寫如下代碼:
import sys import pygame pygame.init() screen = pygame.display.set_mode((1000,800)) pygame.display.set_caption("alien invasion") photo = pygame.image.load('alien.bmp') photo_rect = photo.get_rect() screen_rect = screen.get_rect()#set the ship on the center of the screen photo_rect.centerx = screen_rect.centerx photo_rect.bottom = screen_rect.bottom while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()#screen.blit(photo,photo_rect)screen.fill((255,34,54))screen.blit(photo,photo_rect)pygame.display.flip()執(zhí)行結(jié)果:
第二部分:進(jìn)階
接下來,我們熟悉pygame的簡單構(gòu)造過程后,把上述代碼放在類和函數(shù)中實(shí)現(xiàn),實(shí)現(xiàn)模塊化編程,如下:
ship.py文件:
#ship.py import pygame class Ship(): """創(chuàng)建ship"""def __init__(self,screen):self.screen = screenself.screen_rect = screen.get_rect()self.image = pygame.image.load('image/ship.bmp')self.image_rect = self.image.get_rect()self.image_rect.centerx = self.screen_rect.centerxself.image_rect.bottom = self.screen_rect.bottomdef blitme(self):"""在screen中畫創(chuàng)建出的ship"""self.screen.blit(self.image,self.image_rect)~?下面是文件3.py
#文件3.py import sys import pygame from ship import Ship def run_game(): """創(chuàng)建動(dòng)畫"""pygame.init()screen = pygame.display.set_mode((1000,800))pygame.display.set_caption("ship is come here")#create a exampleship = Ship(screen)color = (255,255,255)while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(color)#screen.blit(ship.image,ship.image_rect)ship.blitme()pygame.display.flip() run_game()然后把ship.bmp,放在當(dāng)前文件夾的image文件夾下?,準(zhǔn)備運(yùn)行
在ubuntu中執(zhí)行命令(在windows中執(zhí)行命令是python 3.py)
python3 3.py運(yùn)行結(jié)果:
接下來,繼續(xù)優(yōu)化程序,把顏色,caption,screen的寬度和高度等信息單獨(dú)放在一個(gè)設(shè)置文件中,那么現(xiàn)在我們一共有3個(gè)程序文件了,還有一個(gè)圖片文件,所以要運(yùn)行程序共需要4個(gè)程序,
文件ship.py
#文件ship.py import pygame class Ship():"""創(chuàng)建ship"""def __init__(self,screen):self.screen = screenself.screen_rect = screen.get_rect()self.image = pygame.image.load('image/ship.bmp')self.image_rect = self.image.get_rect()self.image_rect.centerx = self.screen_rect.centerxself.image_rect.bottom = self.screen_rect.bottomdef blitme(self):"""在screen中畫ship"""self.screen.blit(self.image,self.image_rect)文件settings.py
class Settings():def __init__(self):self.color = (255,255,255)self.set_width = 1000self.set_height = 800self.caption = "alien ship"文件ship_game.py
#文件ship_game.py #它的功能是:構(gòu)造動(dòng)畫的主程序 import sys import pygame from settings import Settings from ship import Ship def run_game():pygame.init()myset = Settings()screen = pygame.display.set_mode((myset.set_width,myset.set_height))pygame.display.set_caption(myset.caption)#create a exampleship = Ship(screen)while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(myset.color)#screen.blit(ship.image,ship.image_rect)ship.blitme()pygame.display.flip() run_game()文件ship.bmp放在當(dāng)前文件夾image下,
接下來運(yùn)行文件,ubuntu中是:
python3 ship_game.pywindows中是(注意windows中如果相對(duì)路徑找不到ship.bmp文件,那就使用絕對(duì)路徑):
python ship_game.py?
?
總結(jié)
以上是生活随笔為你收集整理的python3 用pygame 简单建一个飞船模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 的 外连查询
- 下一篇: pygame中Rect(left, to