Pygame實(shí)戰(zhàn)練習(xí)之飛機(jī)大戰(zhàn)游戲
導(dǎo)語(yǔ)
承載童年的紙飛機(jī)你還會(huì)疊嘛?
如果你是個(gè)80后或者90后,那你應(yīng)該記得小時(shí)候玩的紙飛機(jī)。
疊好后,哈口仙氣,飛出去,感覺(jué)棒棒噠。
雖然是一個(gè)極其簡(jiǎn)單的玩具,但那時(shí)候,很多熊孩子能傻傻地玩上一整天。
今天帶大家制作一款彩色版本另一個(gè)版本的飛機(jī)大冒險(xiǎn)~
歡迎閱讀往期另一個(gè)飛機(jī)大戰(zhàn)的文章:python開發(fā)飛機(jī)大戰(zhàn)游戲。
Are you ready?
一起開啟飛機(jī)大冒險(xiǎn)吧~
▼▼▼
正文
首先準(zhǔn)備好飛機(jī)大冒險(xiǎn)的圖片:
環(huán)境安裝:主要游戲模塊pygame。
pip install pygame pip install -i https://pypi.douban.com/simple/ pygame
游戲規(guī)則:這款飛機(jī)大戰(zhàn),使用鍵盤的上下左右鍵移動(dòng),擊中敵機(jī),一次得100分,積累下來(lái),得分,如撞到敵機(jī)跟敵方子彈則gameover。升級(jí)版的會(huì)視覺(jué)跟游戲效果會(huì)跟好,還設(shè)置有積分排行榜。
創(chuàng)建游戲界面:
pygame.init() # 設(shè)置游戲界面大小 screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) # 游戲界面標(biāo)題 pygame.display.set_caption('彩版飛機(jī)大戰(zhàn)') # 圖標(biāo) ic_launcher = pygame.image.load('resources/image/ic_launcher.png').convert_alpha() pygame.display.set_icon(ic_launcher) # 背景圖 background = pygame.image.load('resources/image/background.png').convert_alpha() # 游戲結(jié)束背景圖 game_over = pygame.image.load('resources/image/gameover.png') # 子彈圖片 plane_bullet = pygame.image.load('resources/image/bullet.png') # 飛機(jī)圖片 player_img1= pygame.image.load('resources/image/player1.png') player_img2= pygame.image.load('resources/image/player2.png') player_img3= pygame.image.load('resources/image/player_off1.png') player_img4= pygame.image.load('resources/image/player_off2.png') player_img5= pygame.image.load('resources/image/player_off3.png') # 敵機(jī)圖片 enemy_img1= pygame.image.load('resources/image/enemy1.png') enemy_img2= pygame.image.load('resources/image/enemy2.png') enemy_img3= pygame.image.load('resources/image/enemy3.png') enemy_img4= pygame.image.load('resources/image/enemy4.png')
設(shè)置玩家、子彈類:
class Bullet(pygame.sprite.Sprite): def __init__(self, bullet_img, init_pos): # 調(diào)用了父類的初始化方法來(lái)初始化sprite的屬性 pygame.sprite.Sprite.__init__(self)# 調(diào)用了父類的初始化方法來(lái)初始化sprite的屬性 self.image = bullet_img self.rect = self.image.get_rect() self.rect.midbottom = init_pos self.speed = 10 def move(self): self.rect.top -= self.speed class Player(pygame.sprite.Sprite): def __init__(self, player_rect, init_pos): pygame.sprite.Sprite.__init__(self) self.image = [] # 用來(lái)存儲(chǔ)玩家飛機(jī)圖片的列表 for i in range(len(player_rect)): self.image.append(player_rect[i].convert_alpha()) self.rect = player_rect[0].get_rect() # 初始化圖片所在的矩形 self.rect.topleft = init_pos # 初始化矩形的左上角坐標(biāo) self.speed = 8 # 初始化玩家飛機(jī)速度,這里是一個(gè)確定的值 self.bullets = pygame.sprite.Group() # 玩家飛機(jī)所發(fā)射的子彈的集合 self.img_index = 0 # 玩家飛機(jī)圖片索引 self.is_hit = False # 玩家是否被擊中
上下左右游戲的界面是有限制的所以要設(shè)置:
# 向上移動(dòng),需要判斷邊界 def moveUp(self): if self.rect.top <= 0: self.rect.top = 0 else: self.rect.top -= self.speed # 向下移動(dòng),需要判斷邊界 def moveDown(self): if self.rect.top >= SCREEN_HEIGHT - self.rect.height: self.rect.top = SCREEN_HEIGHT - self.rect.height else: self.rect.top += self.speed # 向左移動(dòng),需要判斷邊界 def moveLeft(self): if self.rect.left <= 0: self.rect.left = 0 else: self.rect.left -= self.speed # 向右移動(dòng),需要判斷邊界 def moveRight(self): if self.rect.left >= SCREEN_WIDTH - self.rect.width: self.rect.left = SCREEN_WIDTH - self.rect.width else: self.rect.left += self.speed
創(chuàng)建敵機(jī)類:
class Enemy(pygame.sprite.Sprite): def __init__(self, enemy_img, enemy_down_imgs, init_pos): pygame.sprite.Sprite.__init__(self) self.image = enemy_img self.rect = self.image.get_rect() self.rect.topleft = init_pos self.down_imgs = enemy_down_imgs self.speed = 2 self.down_index = 0 # 敵機(jī)移動(dòng),邊界判斷及刪除在游戲主循環(huán)里處理 def move(self): self.rect.top += self.speed
繪制游戲結(jié)束背景:
screen.blit(game_over, (0, 0)) # 游戲 Game Over 后顯示最終得分 font = pygame.font.Font(None, 48) text = font.render('Score: ' + str(score), True, (255, 255, 255)) text_rect = text.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = screen.get_rect().centery + 24 screen.blit(text, text_rect) # 使用系統(tǒng)字體 xtfont = pygame.font.SysFont('SimHei', 30) # 重新開始按鈕 textstart = xtfont.render('重新開始 ', True, (255, 255, 255)) text_rect = textstart.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = screen.get_rect().centery + 120 screen.blit(textstart, text_rect) # 排行榜按鈕 textstart = xtfont.render('排行榜 ', True, (255, 255, 255)) text_rect = textstart.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = screen.get_rect().centery + 180 screen.blit(textstart, text_rect)
效果如下:
排行榜設(shè)置界面等:
ef gameRanking(): screen2 = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) # 繪制背景 screen2.fill(0) screen2.blit(background, (0, 0)) # 使用系統(tǒng)字體 xtfont = pygame.font.SysFont('SimHei', 30) # 重新開始按鈕 textstart = xtfont.render('排行榜 ', True, (255, 0, 0)) text_rect = textstart.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = 50 screen.blit(textstart, text_rect) # 重新開始按鈕 textstart = xtfont.render('重新開始 ', True, (255, 0, 0)) text_rect = textstart.get_rect() text_rect.centerx = screen.get_rect().centerx text_rect.centery = screen.get_rect().centery + 120 screen2.blit(textstart, text_rect) # 獲取排行文檔內(nèi)容 arrayscore = read_txt(r'score.txt')[0].split('mr') # 循環(huán)排行榜文件顯示排行 for i in range(0, len(arrayscore)): # 游戲 Game Over 后顯示最終得分 font = pygame.font.Font(None, 48) # 排名重1到10 k=i+1 text = font.render(str(k) +" " +arrayscore[i], True, (255, 0, 0)) text_rect = text.get_rect() text_rect.centerx = screen2.get_rect().centerx text_rect.centery = 80 + 30*k # 繪制分?jǐn)?shù)內(nèi)容 screen2.blit(text, text_rect)
效果如下:
好啦!代碼的話很多,展示部分代碼結(jié)構(gòu)跟效果的哦!
往下看總效果:
總結(jié)
飛機(jī)大冒險(xiǎn)正式開始!起飛吧~
到此這篇關(guān)于Pygame實(shí)戰(zhàn)練習(xí)之飛機(jī)大戰(zhàn)游戲的文章就介紹到這了,更多相關(guān)Pygame 飛機(jī)大戰(zhàn)內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。