🐲情人節必備,和女友一起玩新版飛機大戰!
本文目錄:
- 🐲情人節必備,和女友一起玩新版飛機大戰!
- 💦成果展示!
- 💦應用知識
- 💦游戲特色
- 💦代碼展示和說明
- 🐹背景設定
- 🐹敵人設定
- 🐹飛機設定
- 🐹 子彈設定
- 🐹攻擊設定
- 🐹游戲主程式
- 💦完整代碼+決議+圖片+音樂
- 🐸最后的福利
👻👻👻hello大家好,我是Dream,今天我又來了,帶著我研究了一個星期的寶貝來了🤣🤣🤣好了,進入今天的主題: 用pygame重新定義飛機大戰,請大家前排就坐!!
💦成果展示!


🚀這是展示的圖片,是不是很好奇呀,先別著急,先給個點贊+收藏唄,接下來我們一起開淦!
💦應用知識
??在這里我們主要用到了Python中的pygame模塊來實作的,同時應用了random和math以及win32com.client庫
??為確保游戲平衡,我們設定了如下規則:
??1.設定三款子彈,分別是輕型子彈,重型子彈和全屏子彈,其中:
輕型子彈每次在螢屏中只能同時存在三枚,數量不受限,只能打一個目標;
重型子彈最多可以打11枚,每次可以攻擊多個目標;
全屏子彈總共有兩發,全屏受到攻擊
??2.在這里我設定了新的圖示,設定兩位敵人,分別是我們熟悉的小伙伴,
??3.我們自由操控戰斗機進行左右上下移動,通過子彈消滅敵機進行得分,只要敵機不飛到游戲螢屏低端游戲便可以繼續下去!
💦游戲特色
👑1.“帥氣的背景圖片”,可以看到這背景圖非常的貼近主題呀:
👑2.有趣的角色設定,讓我們帥氣吳兄擔任被打的角色,實屬大快人心
👑3.好玩搞笑的語音:
大碗牢飯作為背景音樂,實屬增加歡快的氣氛;
每次不同子彈擊落不同的敵人會有不同的搞笑語音發出

👑4.子彈種類的不同和分數的設定又為游戲提供了操作性空間
💦代碼展示和說明
🚩這個游戲的代碼我總共寫了四百多行吧,花了一周左右的時間,反復改了很多次,就是希望把最好的帶給大家??????
🐹背景設定
這里用pygame.image.load實作背景的選取;pygame.mixer.music.load完成背景音樂的制作;以及font.render完成字體的設定,注釋詳細,大家可以慢慢看:
import pygame
import random
import math # 數學模塊
import win32com.client as win
speak = win.Dispatch("SAPI.SpVoice")
# 初始化界面
pygame.init()
# 設定視窗大小
windows = pygame.display.set_mode((800, 700))
# 設定視窗標題
pygame.display.set_caption("吳亦凡版打飛機")
# 引入圖片 logo
icon = pygame.image.load('吳亦凡.png')
pygame.display.set_icon(icon)
# 4.游戲獲取背景
bgcolor = pygame.image.load('監獄3.png')
# 5.設定玩家飛機
playerimg = pygame.image.load('我的飛機.png')
X = 350 # 設定玩家X軸
Y = 480 # 設定玩家Y軸
# 停止移動就可以將palyerStep改為0,控制一個變數來指定飛機指定移動
plagerStep = 0
playerStep=0
# 添加背景音樂
pygame.mixer.music.load('大碗牢飯.mp3')
pygame.mixer.music.play(loops=0, start=20)
pygame.mixer.music.set_volume(0.3)
# 添加射中的音效
# bao_music = pygame.mixer.Sound('臥槽.mp3')
# bao_music.set_volume(1)
# bao_music.play()
# 分數
score = 0
# 添加字體和大小
font = pygame.font.Font('simkai.ttf', 32)
# 字體類
def show_score():
# 顯示的文字
text = f"Score:{score}"
# 渲染然后顯示 顯示text True表示24位的字
score_render = font.render(text, True, (0, 255, 0))
# 指定字體放到那個位置
windows .blit(score_render, (10, 10))
text = f"Bigbullets:{len(Bullets)}"
# 渲染然后顯示 顯示text True表示24位的字
score_render = font.render(text, True, (0, 255, 0))
# 指定字體放到那個位置
windows.blit(score_render, (10, 50))
# 游戲結束的變數
over = False
over_font = pygame.font.Font('simkai.ttf', 64)
# 結束的提示語
def check_over():
if over:
bgcolor = pygame.image.load('吳亦凡.webp')
windows.blit(bgcolor, (175, 150))
my_font = pygame.font.SysFont("simkai.ttf", 100)
text = "Game over"
render =my_font.render(text, True, (255, 0, 0),(0, 255, 0))
windows.blit(render, (200, 50))
defeat_music = pygame.mixer.Sound('臥槽.mp3')
defeat_music.set_volume(0.5)
defeat_music.play()
🐹敵人設定
🏃這里完成對敵人類的撰寫,pygame.image.load制作出敵人的外形; enemis = [] 以串列來儲存產生的敵機,在之后便于對敵機狀態的操作;
a = bx - ex
b = by - ey
return math.sqrt(a * a + b * b) # 開根號
🏃這里運用數學知識,根據三角形兩邊長求斜邊的長度,算出斜邊的長度代表子彈敵人間的距離,從而實作撞擊爆炸功能;
# 敵人類
class Enemy:
def __init__(self):
#
self.img = pygame.image.load('凡哥.jpg')
self.x = random.randint(200, 600) # 隨機產生X
self.y = random.randint(50, 250) # 隨機產生Y
self.step = random.randint(2, 4) # 隨機產生速度
# 當被射中時恢復位置
def reset(self):
self.x = random.randint(200, 600)
self.y = random.randint(50, 180)
class Enemy1:
def __init__(self):
self.img = pygame.image.load('田斌.jpg')
self.x = random.randint(0, 600) # 隨機產生X
self.y = random.randint(0, 250) # 隨機產生Y
self.step = random.randint(2, 3) # 隨機產生速度
# 當被射中時恢復位置
def reset(self):
self.x = random.randint(200, 600)
self.y = random.randint(50, 180)
def distance(bx, by, ex, ey):
a = bx - ex
b = by - ey
return math.sqrt(a * a + b * b) # 開根號
# 保存所有的敵人
enemis = []
for i in range(6): # 每次回圈都都在class Enemy中過一邊,所以隨機產生一個敵人的引數并且保存到串列中
enemis.append(Enemy())
# Enemis= []
# if len(Bullets)>25:
# for i in range(6):
# Enemis.append(Enemy1())
Enemis = []
# 顯示敵人并且實作敵人的移動下沉
def enemy(): # 回圈保存敵人的串列,每個敵人都過在這個for回圈里被限制了移動的軌跡
global over
for e in enemis:
windows.blit(e.img, (e.x, e.y))
e.x += e.step
if e.x > 750 or e.x < 0: # 判斷敵人是否到了邊界
e.step *= -1 # 敵人碰到界面往返
e.y += 40 # 設定敵人往下沉
# 判斷敵人的位置如果到達指定的地方則游戲結束
if e.y > 460:
over = True
print("游戲結束啦")
enemis.clear()
def enemy1(): # 回圈保存敵人的串列,每個敵人都過在這個for回圈里被限制了移動的軌跡
global over
for e in Enemis:
windows.blit(e.img, (e.x, e.y))
e.x += e.step
if e.x > 750 or e.x < 0: # 判斷敵人是否到了邊界
e.step *= -1 # 敵人碰到界面往返
e.y += 40 # 設定敵人往下沉
# 判斷敵人的位置如果到達指定的地方則游戲結束
if e.y > 460:
over = True
print("游戲結束啦")
🐹飛機設定
🏃這里實作對我們飛機移動范圍的控制,使其移動范圍適合我們螢屏的大小:
windows.blit(playerimg, (X, Y)) 定義其在X和Y軸進行移動;
if X > 680: 預防飛機出界
# 設定飛機及飛機移動范圍的函式 == 飛機型別
def fiji_type(): # 設定飛機的坐標和飛機X Y軸最大的移動位置
global X, Y
# 5. 設定飛機
windows.blit(playerimg, (X, Y))
# 6.飛機移動
X += plagerStep
Y += playerStep
# 預防飛機出界
if X > 680:
X = 680
if X < 0:
X = 0
if Y> 640:
Y = 640
if Y< 0:
Y = 0
🐹 子彈設定
🏃在這里我們設定出三款子彈,以及規定他們射擊不同目標的得分和發出的聲音:
self.img = pygame.image.load(‘giao.jpg’) 設定子彈的形狀
if distance(self.x, self.y, e.x, e.y) < 300: 設定爆炸條件
bao_music = pygame.mixer.Sound(‘怕啥來啥.mp3’) 設定不同子彈擊中目標的聲音
class bigbig:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X -180# 設定子彈的X軸
self.y = Y + 5 # 子彈出現在玩家的上方
self.step =6# 子彈移動的速度
# 擊中敵人
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
# 射中了
# bullets.remove(self)
e.reset() # 重置敵人
bao_music = pygame.mixer.Sound('怕啥來啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
# 擊中加10分c
score += 20
for e in Enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
# 射中了
# bullets.remove(self)
e.reset() # 重置敵人
bao_music = pygame.mixer.Sound('怕啥來啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
# 擊中加10分
score += 20
class bigbig1:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X-30# 設定子彈的X軸
self.y = Y + 5 # 子彈出現在玩家的上方
self.step = 6 # 子彈移動的速度
# 擊中敵人
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
# 射中了
# bullets.remove(self)
e.reset() # 重置敵人
bao_music = pygame.mixer.Sound('怕啥來啥.mp3')
bao_music.set_volume(0.3)
bao_music.play()
# 擊中加10分
score += 20
class bigbig2:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X+120# 設定子彈的X軸
self.y = Y + 5 # 子彈出現在玩家的上方
self.step = 6# 子彈移動的速度
# 擊中敵人
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
# 射中了
# bullets.remove(self)
e.reset() # 重置敵人
bao_music = pygame.mixer.Sound('怕啥來啥.mp3')
bao_music.set_volume(0.6)
bao_music.play()
# 擊中加10分
score += 20
class bigbig3:
def __init__(self):
self.img = pygame.image.load('giao.jpg')
self.x = X+270# 設定子彈的X軸
self.y = Y + 5 # 子彈出現在玩家的上方
self.step = 6# 子彈移動的速度
# 擊中敵人
def hit(self):
global score
for e in enemis:
if distance(self.x, self.y, e.x, e.y) < 300:
# 射中了
# bullets.remove(self)
e.reset() # 重置敵人
bao_music = pygame.mixer.Sound('怕啥來啥.mp3')
bao_music.set_volume(0.6)
bao_music.play()
# 擊中加10分
score += 20
🐹攻擊設定
🏃這里是不同子彈射擊不同目標時的狀態:
# 顯示子彈移動
def show_bullets():
for b in bullets:
windows.blit(b.img, (b.x, b.y))
b. hit() # 查看是否擊中了敵人
b.y -= b.step # 往上移動
# 判斷子彈是否出了界面
if b.y < 0:
bullets.remove(b)
for c in Bullets:
windows.blit(c.img, (c.x, c.y))
c.hit() # 查看是否擊中了敵人
c.y -= c.step # 往上移動
# 判斷子彈是否出了界面
# if c.y < 0:
# Bullets.remove(b)
for d in big_bullets:
windows.blit(d.img, (d.x, d.y))
d.hit() # 查看是否擊中了敵人
d.y -= d.step # 往上移動
# 判斷子彈是否出了界面
# if c.y < 0:
# Bullets.remove(b)
🐹游戲主程式
🏃這里是我們的主回圈, if event.type == pygame.KEYDOWN: 實作鍵盤操控我們的飛機;
🏃**#飛機移動** :fiji_type()
🏃**#呼叫敵人這個函式** :enemy()enemy1()
🏃 # 顯示子彈 :show_bullets()
🏃 # 游戲結束語 : check_over()
🏃 # 重繪更新資料 :pygame.display.update()
running = True
while running:
# 4.背景
# 每個回圈是畫一張畫組成的
# 畫出來bgcolor
windows.blit(bgcolor, (0, 0))
# 呼叫這個字體
show_score()
# event.get操作事件
for event in pygame.event.get():
# 判斷操作型別是不是QUIT
if event.type == pygame.QUIT:
# 如果程式為False就會停止則關閉
running = False
# 7.控制飛機的移動
# 通過控制鍵盤的事件來控制(playerStep值)飛機的移動
if event.type == pygame.KEYDOWN:
# 判斷按下鍵盤右鍵,按下則移動
if event.key == pygame.K_RIGHT:
plagerStep = 3
# 判斷按下左鍵
elif event.key == pygame.K_DOWN:
playerStep = 3
elif event.key == pygame.K_UP:
playerStep = -3
elif event.key == pygame.K_LEFT:
plagerStep = -3
# 判斷按下空格健的反應
elif event.key == pygame.K_c:
# 創建一個子彈
if len(bullets)<3:
b = Bullet()
bullets.append(b)
elif event.key == pygame.K_SPACE:
if len (Bullets) >10:
bao_music = pygame.mixer.Sound('導師.mp3')
bao_music.set_volume(1 )
bao_music.play()
Enemis.append(Enemy1())
elif len(Bullets) <50:
c=BigBullet()
Bullets.append(c)
elif event.key == pygame.K_v:
if len(big_bullets) < 10:
c = bigbig()
d =bigbig1()
e=bigbig2()
f=bigbig3()
g=bigbig4()
big_bullets.append(c)
big_bullets.append(d)
big_bullets.append(e)
big_bullets.append(f)
big_bullets.append(g)
💦完整代碼+決議+圖片+音樂
這里是此程式所有需要的東西了,需要的小伙伴自取一下,可以直接拿去用:
用pygame重新定義飛機大戰,搞笑+創新十足+原始碼決議圖片音頻+拿去直接用!
快給你的小伙伴們露兩手吧!
🐸最后的福利
??????最后一點小福利帶給大家:如果想快速上手python的小伙伴們,這個詳細整理PPT可以迅速幫助大家打牢python基礎,需要的小伙伴們可以下載一下 Python入門基礎教程全套+小白速成+學不會來找我!
好啦,這就是今天要給大家分享的全部內容了
如果你喜歡的話,就不要吝惜你的一鍵三連了~??????
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/292964.html
標籤:python
