python開(kāi)發(fā)飛機(jī)大戰(zhàn)游戲
本文實(shí)例為大家分享了python開(kāi)發(fā)飛機(jī)大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
import pygame import random import math # 數(shù)學(xué)模塊 # 初始化界面 pygame.init() # 設(shè)置窗口大小 windows = pygame.display.set_mode((800, 600)) # 設(shè)置窗口標(biāo)題 pygame.display.set_caption("小趙同學(xué)") # 引入圖片 logo icon = pygame.image.load('logo.jpg') pygame.display.set_icon(icon) # 4.游戲獲取背景 bgcolor = pygame.image.load('bj.png') # 5.設(shè)置玩家飛機(jī) playerimg = pygame.image.load('fj.png') X = 350 # 設(shè)置玩家X軸 Y = 480 # 設(shè)置玩家Y軸 # 停止移動(dòng)就可以將palyerStep改為0。控制一個(gè)變量來(lái)指定飛機(jī)指定移動(dòng) playerStep = 0 # 添加背景音樂(lè) pygame.mixer.music.load('bj.mp3') pygame.mixer.music.play(-1) # 添加射中的音效 # bao_music = pygame.mixer.Sound('bj.mp3') # 分?jǐn)?shù) score = 0 # 添加字體和大小 font = pygame.font.Font('freesansbold.ttf', 32) # 字體類 def show_score(): # 顯示的文字 text = f"Score:{score}" # 渲染然后顯示 顯示text True表示24位的字 score_render = font.render(text, True, (0, 255, 0)) # 指定字體放到那個(gè)位置 windows.blit(score_render, (10, 10)) # 游戲結(jié)束的變量 over = False over_font = pygame.font.Font('freesansbold.ttf', 64) # 結(jié)束的提示語(yǔ) def check_over(): if over: text = "Game Over" render = font.render(text, True, (255, 0, 0)) windows.blit(render, (320, 200)) # 8.添加敵人. # 11.添加多個(gè)敵人 number_enemy = 6 # 敵人類 class Enemy: def __init__(self): # self.img = pygame.image.load('enemy.png') self.x = random.randint(200, 600) # 隨機(jī)產(chǎn)生X self.y = random.randint(50, 250) # 隨機(jī)產(chǎn)生Y self.step = random.randint(2, 4) # 隨機(jī)產(chǎn)生速度 # 當(dāng)被射中時(shí)恢復(fù)位置 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) # 開(kāi)根號(hào) # 保存所有的敵人 enemis = [] for i in range(number_enemy): # 每次循環(huán)都都在class Enemy中過(guò)一邊,所以隨機(jī)產(chǎn)生一個(gè)敵人的參數(shù)并且保存到列表中 enemis.append(Enemy()) # 顯示敵人并且實(shí)現(xiàn)敵人的移動(dòng)下沉 def enemy(): # 循環(huán)保存敵人的列表,每個(gè)敵人都過(guò)在這個(gè)for循環(huán)里被限制了移動(dòng)的軌跡 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 # 設(shè)置敵人往下沉 # 判斷敵人的位置如果到達(dá)指定的地方則游戲結(jié)束 if e.y > 436: over = True print("游戲結(jié)束啦") enemis.clear() # 設(shè)置飛機(jī)及飛機(jī)移動(dòng)范圍的函數(shù) == 飛機(jī)類型 def fiji_type(): # 設(shè)置飛機(jī)的坐標(biāo)和飛機(jī)X Y軸最大的移動(dòng)位置 global X, Y # 5. 設(shè)置飛機(jī) windows.blit(playerimg, (X, Y)) # 6.飛機(jī)移動(dòng) X += plagerStep # 預(yù)防飛機(jī)出界 if X > 680: X = 680 if X < 0: X = 0 # 子彈的類 class Bullet: def __init__(self): self.img = pygame.image.load('bullet.png') self.x = X + 55 # 設(shè)置子彈的X軸 self.y = Y + 5 # 子彈出現(xiàn)在玩家的上方 self.step = 2 # 子彈移動(dòng)的速度 # 擊中敵人 def hit(self): global score for e in enemis: if distance(self.x, self.y, e.x, e.y) < 30: # 射中了 bullets.remove(self) e.reset() # 重置敵人 # 沒(méi)擊中加10分 score += 10 bullets = [] # 保存現(xiàn)有的子彈 # 顯示子彈移動(dòng) def show_bullets(): for b in bullets: windows.blit(b.img, (b.x, b.y)) b.hit() # 查看是否擊中了敵人 b.y -= b.step # 往上移動(dòng) # 判斷子彈是否出了界面 if b.y < 0: bullets.remove(b) # 3.游戲主循環(huán) running = True while running: # 4.背景 # 每個(gè)循環(huán)是畫(huà)一張畫(huà)組成的 # 畫(huà)出來(lái)bgcolor windows.blit(bgcolor, (0, 0)) # 調(diào)用這個(gè)字體 show_score() # event.get操作事件 for event in pygame.event.get(): # 判斷操作類型是不是QUIT if event.type == pygame.QUIT: # 如果程序?yàn)镕alse就會(huì)停止則關(guān)閉 running = False # 7.控制飛機(jī)的移動(dòng) # 通過(guò)控制鍵盤(pán)的事件來(lái)控制(playerStep值)飛機(jī)的移動(dòng) if event.type == pygame.KEYDOWN: # 判斷按下鍵盤(pán)右鍵,按下則移動(dòng) if event.key == pygame.K_RIGHT: plagerStep = 3 # 判斷按下左鍵 elif event.key == pygame.K_LEFT: plagerStep = -3 # 判斷按下空格健的反應(yīng) elif event.key == pygame.K_SPACE: # 創(chuàng)建一個(gè)子彈 b = Bullet() bullets.append(b) # 判斷松來(lái)按鍵停止, if event.type == pygame.KEYUP: plagerStep = 0 # 調(diào)用飛機(jī)的類型的函數(shù) fiji_type() # 調(diào)用敵人這個(gè)函數(shù) enemy() show_bullets() # 顯示子彈 # 游戲結(jié)束語(yǔ) check_over() # 刷新更新數(shù)據(jù) pygame.display.update() # global 設(shè)置全局變量 ''' 游戲結(jié)構(gòu) 1.設(shè)置窗口大小 2.背景圖 3.顯示飛機(jī) 4.移動(dòng)飛機(jī) 5.控制出界 6.獲取鍵盤(pán)事件 7.顯示敵人 8.敵人移動(dòng) 9.下沉和隨機(jī)位置 10.顯示多個(gè)敵人 11.響應(yīng)空格鍵 12.添加子彈 13.發(fā)射子彈 14.射中檢測(cè)之距離 15.射中檢測(cè) 16.添加音效 17.添加并顯示分?jǐn)?shù) 18.游戲結(jié)束 19.結(jié)束提示 '''
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python批量將csv文件轉(zhuǎn)化成xml文件的實(shí)例
將 csv 格式轉(zhuǎn)換成xml格式有許多方法,可以用數(shù)據(jù)庫(kù)的方式,也有許多軟件可以將 csv 轉(zhuǎn)換成xml。但是比較麻煩,本文利用 Python 一鍵批量將 csv 文件轉(zhuǎn)化成 xml 文件。2021-05-05Python Request類源碼實(shí)現(xiàn)方法及原理解析
這篇文章主要介紹了Python Request類源碼實(shí)現(xiàn)方法及原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08歸納整理Python中的控制流語(yǔ)句的知識(shí)點(diǎn)
這篇文章主要?dú)w納整理了Python中的控制流語(yǔ)句的知識(shí)點(diǎn),來(lái)自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下2015-04-04python和C++共享內(nèi)存?zhèn)鬏攬D像的示例
這篇文章主要介紹了python和C++共享內(nèi)存?zhèn)鬏攬D像的示例,幫助大家利用python處理圖片,感興趣的朋友可以了解下2020-10-10python寫(xiě)入已存在的excel數(shù)據(jù)實(shí)例
下面小編就為大家分享一篇python寫(xiě)入已存在的excel數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05基于Python和TFIDF實(shí)現(xiàn)提取文本中的關(guān)鍵詞
TFIDF 的工作原理是按比例增加一個(gè)詞語(yǔ)在文檔中出現(xiàn)的次數(shù),但會(huì)被它所在的文檔數(shù)量抵消。本文將利用TFIDF實(shí)現(xiàn)提取文本中的關(guān)鍵詞,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-04-04