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