早就知道pygame模塊,就是沒怎么深入研究過,恰逢這周未沒約到妹子,只能自己在家玩自己啦,一時(shí)興起,花了幾個(gè)小時(shí)寫了個(gè)打飛機(jī)程序。
很有意思,跟大家分享下。
先看一下項(xiàng)目結(jié)構(gòu)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
再曬下項(xiàng)目成果圖
?微信掃碼添加,備注 “飛機(jī)” 領(lǐng)取騰訊文檔-在線文檔https://docs.qq.com/doc/DU3NjWWxyc2ZURXll
實(shí)現(xiàn)步驟
一、首先在 config/settings.py 中進(jìn)行以下功能的實(shí)現(xiàn)
- 游戲初始化
- 游戲混音器初始化
- 背景音樂初始化
- 我方飛機(jī)掛了音樂
- 敵方飛機(jī)掛了音樂
- 子彈發(fā)射音樂
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import pygame
pygame.init() # 游戲初始化
pygame.mixer.init() # 混音器初始化
# 游戲背景音樂
pygame.mixer.music.load("material/sound/game_music.wav")
pygame.mixer.music.set_volume(0.2)
# 子彈發(fā)射音樂
bullet_sound = pygame.mixer.Sound("material/sound/bullet.wav")
bullet_sound.set_volume(0.2)
# 我方飛機(jī)掛了的音樂
me_down_sound = pygame.mixer.Sound("material/sound/game_over.wav")
me_down_sound.set_volume(0.2)
# 敵方飛機(jī)掛了的音樂
enemy1_down_sound = pygame.mixer.Sound("material/sound/enemy1_down.wav")
enemy1_down_sound.set_volume(0.2)
config/settings.py
注:游戲素材滑動到文章底部點(diǎn)擊鏈接即可下載
二、小試牛刀
飛機(jī)和子彈都是可移動的,那么怎么實(shí)現(xiàn)讓它們動起來呢(我方飛機(jī)可以玩家進(jìn)行操控,敵機(jī)就是隨機(jī)性的出現(xiàn),子彈暫由我方飛機(jī)發(fā)射)。
在Pygame中,所有移動對象都可看做是一個(gè)精靈(sprite),精靈之間能夠進(jìn)行相互的交互通信,例如如何讓碰撞檢測更加精準(zhǔn)等等。
那么先讓我們先在屏幕上制作一個(gè)游戲板,根據(jù) settings.py 配置,并讓它有聲音播放,首先我們在 bin/main.py 中這么寫:
我們可以直接運(yùn)行它,那么我們會看到以下畫面,并且還會有激情的聲音吆?。?!但是我們要將文件配置為絕對路徑才可以運(yùn)行,因?yàn)閯倓傇趕ettings中的加載的音樂文件為相對路徑。
#! /usr/bin/env python
# -*- coding: utf-8 -*-
import sys
from config.settings import *
bg_size = 480, 852 # 初始化游戲背景大小(寬, 高)
screen = pygame.display.set_mode(bg_size) # 設(shè)置背景對話框
pygame.display.set_caption("飛機(jī)大戰(zhàn)") # 設(shè)置標(biāo)題
background = pygame.image.load(os.path.join(BASE_DIR, "material/image/background.png")) # 加載背景圖片,并設(shè)置為不透明
def main():
pygame.mixer.music.play(loops=-1) # loops 對應(yīng)的值為 -1 則音樂會無限循環(huán)播放
while True:
# 繪制背景圖
screen.blit(background, (0, 0))
# 響應(yīng)用戶的操作(一定要有響應(yīng)的用戶操作)
for event in pygame.event.get():
if event.type == 12: # 如果用戶按下屏幕上的關(guān)閉按鈕,觸發(fā)QUIT事件,程序退出
pygame.quit()
sys.exit()
# 再而我們將背景圖像并輸出到屏幕上面
pygame.display.flip()
if __name__ == '__main__':
main()
?接下來呢,我們將要制作我方飛機(jī),敵方飛機(jī)和子彈如何讓它們展示在游戲畫板上,繼而讓它們變得可移動起來,請看代碼實(shí)現(xiàn)方案...
從游戲畫板上添加飛機(jī),首先我們應(yīng)怎樣在屏幕上輸出飛機(jī)???
上述講過,pygame中的 sprite(精靈)可使一張圖片或者一個(gè)靜態(tài)物體動起來,那么制作飛機(jī)需要考慮并做些什么呢?文章來源:http://www.zghlxwxcb.cn/news/detail-400406.html
- 飛機(jī)的初始位置
- 通過按鍵 上下左右 來調(diào)控飛機(jī)的位置移動
- 飛機(jī)只能呆在制作的游戲畫板中
- 飛機(jī)的速度
- 飛機(jī)死亡的加載
- 設(shè)定一個(gè)狀態(tài)標(biāo)識飛機(jī)的存活
- 讓飛機(jī)具有動態(tài)的噴氣式效果
那么如何實(shí)現(xiàn)以上的功能呢?接下來結(jié)合上述的示例代碼我們先將我方飛機(jī)繪制到畫板上方,并且我們通過按鍵 J 判定我方飛機(jī)的存活狀態(tài)為死亡,繪制飛機(jī)的死亡畫面并重置飛機(jī)文章來源地址http://www.zghlxwxcb.cn/news/detail-400406.html
"""
創(chuàng)建飛機(jī)
在pygame中, 所有可移動的對象均叫可看作一個(gè)精靈(sprite)
該類并實(shí)現(xiàn)了碰撞方法 spritecollide
我方飛機(jī)和敵方飛機(jī)指定掩
到了這里,關(guān)于Python之路—200行Python代碼搞了個(gè)打飛機(jī)游戲??!的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!