python開發(fā)飛機(jī)大戰(zhàn)游戲
本文實(shí)例為大家分享了python開發(fā)飛機(jī)大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
import pygameimport randomimport math # 數(shù)學(xué)模塊 # 初始化界面pygame.init()# 設(shè)置窗口大小windows = pygame.display.set_mode((800, 600))# 設(shè)置窗口標(biāo)題pygame.display.set_caption('小趙同學(xué)')# 引入圖片 logoicon = 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軸# 停止移動就可以將palyerStep改為0。控制一個變量來指定飛機(jī)指定移動playerStep = 0 # 添加背景音樂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)) # 指定字體放到那個位置 windows.blit(score_render, (10, 10)) # 游戲結(jié)束的變量over = Falseover_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) # 隨機(jī)產(chǎn)生Xself.y = random.randint(50, 250) # 隨機(jī)產(chǎn)生Yself.step = random.randint(2, 4) # 隨機(jī)產(chǎn)生速度 # 當(dāng)被射中時恢復(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中過一邊,所以隨機(jī)產(chǎn)生一個敵人的參數(shù)并且保存到列表中 enemis.append(Enemy()) # 顯示敵人并且實(shí)現(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.stepif e.x > 750 or e.x < 0: # 判斷敵人是否到了邊界 e.step *= -1 # 敵人碰到界面往返 e.y += 40 # 設(shè)置敵人往下沉 # 判斷敵人的位置如果到達(dá)指定的地方則游戲結(jié)束 if e.y > 436:over = Trueprint('游戲結(jié)束啦')enemis.clear() # 設(shè)置飛機(jī)及飛機(jī)移動范圍的函數(shù) == 飛機(jī)類型def fiji_type(): # 設(shè)置飛機(jī)的坐標(biāo)和飛機(jī)X Y軸最大的移動位置 global X, Y # 5. 設(shè)置飛機(jī) windows.blit(playerimg, (X, Y)) # 6.飛機(jī)移動 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 # 子彈移動的速度 # 擊中敵人 def hit(self):global scorefor 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 = Truewhile running: # 4.背景 # 每個循環(huán)是畫一張畫組成的 # 畫出來bgcolor windows.blit(bgcolor, (0, 0)) # 調(diào)用這個字體 show_score() # event.get操作事件 for event in pygame.event.get():# 判斷操作類型是不是QUITif event.type == pygame.QUIT: # 如果程序?yàn)镕alse就會停止則關(guān)閉 running = False# 7.控制飛機(jī)的移動# 通過控制鍵盤的事件來控制(playerStep值)飛機(jī)的移動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)用飛機(jī)的類型的函數(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.顯示飛機(jī)4.移動飛機(jī)5.控制出界6.獲取鍵盤事件7.顯示敵人8.敵人移動9.下沉和隨機(jī)位置10.顯示多個敵人11.響應(yīng)空格鍵12.添加子彈13.發(fā)射子彈14.射中檢測之距離15.射中檢測16.添加音效 17.添加并顯示分?jǐn)?shù)18.游戲結(jié)束19.結(jié)束提示’’’
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向2. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )3. 小技巧處理div內(nèi)容溢出4. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)5. Java中equals()知識點(diǎn)總結(jié)6. css代碼優(yōu)化的12個技巧7. jsp網(wǎng)頁實(shí)現(xiàn)貪吃蛇小游戲8. ASP中if語句、select 、while循環(huán)的使用方法9. 將properties文件的配置設(shè)置為整個Web應(yīng)用的全局變量實(shí)現(xiàn)方法10. MyBatis JdbcType 與Oracle、MySql數(shù)據(jù)類型對應(yīng)關(guān)系說明
