Pygame實戰(zhàn)練習之飛機大戰(zhàn)游戲
導語
承載童年的紙飛機你還會疊嘛?
如果你是個80后或者90后,那你應該記得小時候玩的紙飛機。
疊好后,哈口仙氣,飛出去,感覺棒棒噠。

雖然是一個極其簡單的玩具,但那時候,很多熊孩子能傻傻地玩上一整天。
今天帶大家制作一款彩色版本另一個版本的飛機大冒險~
歡迎閱讀往期另一個飛機大戰(zhàn)的文章:python開發(fā)飛機大戰(zhàn)游戲。
Are you ready?
一起開啟飛機大冒險吧~
▼▼▼
正文
首先準備好飛機大冒險的圖片:

環(huán)境安裝:主要游戲模塊pygame。
pip install pygame pip install -i https://pypi.douban.com/simple/ pygame
游戲規(guī)則:這款飛機大戰(zhàn),使用鍵盤的上下左右鍵移動,擊中敵機,一次得100分,積累下來,得分,如撞到敵機跟敵方子彈則gameover。升級版的會視覺跟游戲效果會跟好,還設置有積分排行榜。
創(chuàng)建游戲界面:
pygame.init()
# 設置游戲界面大小
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
# 游戲界面標題
pygame.display.set_caption('彩版飛機大戰(zhàn)')
# 圖標
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()
# 游戲結束背景圖
game_over = pygame.image.load('resources/image/gameover.png')
# 子彈圖片
plane_bullet = pygame.image.load('resources/image/bullet.png')
# 飛機圖片
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')
# 敵機圖片
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')
設置玩家、子彈類:
class Bullet(pygame.sprite.Sprite):
def __init__(self, bullet_img, init_pos):
# 調用了父類的初始化方法來初始化sprite的屬性
pygame.sprite.Sprite.__init__(self)# 調用了父類的初始化方法來初始化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 = [] # 用來存儲玩家飛機圖片的列表
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 # 初始化矩形的左上角坐標
self.speed = 8 # 初始化玩家飛機速度,這里是一個確定的值
self.bullets = pygame.sprite.Group() # 玩家飛機所發(fā)射的子彈的集合
self.img_index = 0 # 玩家飛機圖片索引
self.is_hit = False # 玩家是否被擊中
上下左右游戲的界面是有限制的所以要設置:
# 向上移動,需要判斷邊界
def moveUp(self):
if self.rect.top <= 0:
self.rect.top = 0
else:
self.rect.top -= self.speed
# 向下移動,需要判斷邊界
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
# 向左移動,需要判斷邊界
def moveLeft(self):
if self.rect.left <= 0:
self.rect.left = 0
else:
self.rect.left -= self.speed
# 向右移動,需要判斷邊界
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)建敵機類:
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
# 敵機移動,邊界判斷及刪除在游戲主循環(huán)里處理
def move(self):
self.rect.top += self.speed
繪制游戲結束背景:
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)
效果如下:

排行榜設置界面等:
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)
# 獲取排行文檔內容
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
# 繪制分數內容
screen2.blit(text, text_rect)
效果如下:

好啦!代碼的話很多,展示部分代碼結構跟效果的哦!
往下看總效果:

總結
飛機大冒險正式開始!起飛吧~

到此這篇關于Pygame實戰(zhàn)練習之飛機大戰(zhàn)游戲的文章就介紹到這了,更多相關Pygame 飛機大戰(zhàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

