飞机大战 python小项目
生活随笔
收集整理的這篇文章主要介紹了
飞机大战 python小项目
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
此文轉(zhuǎn)載自:https://blog.csdn.net/qq_36079986/article/details/110395731
記得剛學(xué)python那會,作過一個飛機大戰(zhàn)小項目,這個項目非常經(jīng)典,可以幫助初學(xué)者提高動手能力,今天把它分享出來
- 一、項目介紹
- 二、項目實現(xiàn)
- 1.首先安裝庫
- 2.主要python代碼
- 三、說明:代碼功能都在注釋里面,我就不做過多解釋了;與本項目有關(guān)的圖片數(shù)據(jù)我傳到資源里面了,大家可以免費下載,我把代碼和數(shù)據(jù)都打包到一起了,大家下載下來導(dǎo)入庫就可以直接一些了。
- 四、完整版代碼及數(shù)據(jù) 下載地址(下載就能用)
一、項目介紹
先放幾張圖片
二、項目實現(xiàn)
1.首先安裝庫
pip install pygame2.主要python代碼
import pygame from pygame.locals import * import random #https://blog.csdn.net/qq_36079986/article/details/110395731 class HeroPlane(object):# 創(chuàng)建一個飛機的英雄類def __init__(self,screen_temp): # 始化方法self.x = 200self.y = 500self.image = pygame.image.load('./img/hero1.png')self.screen = screen_temp# 因為在display方法中使用到了screen方法# 但是在類中沒有 也不能調(diào)用 # 所以說 以傳參的方法傳遞到類中self.bullet_list = []def display(self):# 創(chuàng)建一個展現(xiàn)飛機的方法herp_x1, herp_y1, herp_x2, herp_y2, herp_x3, herp_y3 = -100, -100, -100, -100, -100, -100self.screen.blit(self.image,(self.x, self.y))for bullet in self.bullet_list:###遍歷子彈類對象,賦值給bulletherp_x1, herp_y1, herp_x2, herp_y2, herp_x3, herp_y3 = bullet.display()###### bullet對象調(diào)用display方法, 顯示子彈bullet.move()if self.bullet_list[0].y < 0:del self.bullet_list[0]return herp_x1, herp_y1, herp_x2, herp_y2, herp_x3, herp_y3def move_left(self):self.x -= 50def move_right(self):self.x += 50def move_up(self):self.y -= 50def move_down(self):self.y += 50def fire(self):print(len(self.bullet_list),'個子彈##########################################')self.bullet_list.append(HeroBullet(self.screen,self.x, self.y)) class HeroBullet(object):def __init__(self,screen_temp,x_temp,y_temp):self.x = x_tempself.y = y_tempself.image = pygame.image.load('./img/bullet.png')self.screen = screen_tempdef display(self):self.screen.blit(self.image,(self.x - 22, self.y-22))self.screen.blit(self.image, (self.x + 39, self.y-22))self.screen.blit(self.image, (self.x + 100, self.y-22))return self.x - 22, self.y - 22, self.x + 39, self.y - 22, self.x + 100, self.y - 22def move(self):self.y -= 1 class EnemyPlane(object):def __init__(self,screen_temp):self.ra = random.randint(0,2)self.x = random.randint(0,400)self.y = 0self.image = pygame.image.load('./img/enemy1.png')self.screen = screen_tempself.bullet_list = []if 0<=self.x<=540:if self.ra == 0:self.flag = "left"elif self.ra == 1:self.flag = "right"else:self.flag = 'middle'def display(self):self.screen.blit(self.image, (self.x, self.y))def move(self):if self.x < 0:self.flag = "left"elif self.x > 450:self.flag = 'right'if self.flag == "left":self.x += 2elif self.flag == 'right':self.x -= 2self.y += 0.1def fire(self):if (random.randint(0,50) == 1):self.bullet_list.append(EnemyBullet(self.screen, self.x, self.y))# print(len(self.bullet_list),'顆敵方子彈')for bullet in self.bullet_list:bullet.display()bullet.move()if bullet.y > 700:del bullet class EnemyBullet(object):def __init__(self,screen_temp,x,y):self.x = x + 30self.y = y + 90self.image = pygame.image.load('./img/bullet-1.gif')self.screen = screen_tempdef display(self):self.screen.blit(self.image,(self.x, self.y))def move(self):self.y+= 10 def key_control(hero_temp):for event in pygame.event.get(): # 判斷輸入類型if event.type == QUIT:#判斷是否是點擊了退出按鈕print("exit")exit()elif event.type == KEYDOWN:#判斷是否是按下了鍵# 如果是鍵盤事件(鍵盤按下事件)if event.key == K_a or event.key == K_LEFT:hero_temp.move_left()elif event.key == K_d or event.key == K_RIGHT:hero_temp.move_right()elif event.key == K_w or event.key == K_UP:hero_temp.move_up()elif event.key == K_s or event.key == K_DOWN:hero_temp.move_down()elif event.key == K_SPACE:#檢測按鍵是否是空格鍵hero_temp.fire() def main():screen = pygame.display.set_mode((480, 650), 0, 32) # 使用screen資源來創(chuàng)建背景# 返回值是一個資源pygame.display.set_caption("aircraft game") # 設(shè)置窗口標題background = pygame.image.load('./img/background.png')## ./ 當前路徑 ../ 上一級路徑 / 根目錄hero = HeroPlane(screen)enemy_list = []j = 0while True:screen.blit(background, (0, 0)) # 資源中的blit方法能夠加載游戲的畫面herp_x1, herp_y1, herp_x2, herp_y2, herp_x3, herp_y3 = hero.display() #####刷新if len(enemy_list) <= 10:enemy_list.append(EnemyPlane(screen))if enemy_list[0].y >= 700:del enemy_list[0]for enemy_each in enemy_list :# enemy_each.fire()enemy_each.move()enemy_each.display()# print(len(enemy_list), '個敵機')if (enemy_each.x <= herp_x1 -10 <= enemy_each.x + 80 and enemy_each.y -10<= herp_y1<= enemy_each.y + 90) or (enemy_each.x -10 <= herp_x2<= enemy_each.x + 80 and enemy_each.y -10<= herp_y2<= enemy_each.y + 90) or (enemy_each.x-10 <= herp_x3<= enemy_each.x + 80 and enemy_each.y -10<= herp_y3<= enemy_each.y + 90):enemy_list.remove(enemy_each)# print(len(enemy_list), '個敵機')print('jizhon')# print(hero.x,type(hero.x))if j % 100 == 5:print(len(enemy_list),'個敵機')pygame.display.update() ### 加載游戲key_control(hero)# 調(diào)用鍵盤事件函數(shù)j += 1# print(herp_x1, herp_y1, herp_x2, herp_y2, herp_x3, herp_y3) if __name__ == '__main__':main()三、說明:代碼功能都在注釋里面,我就不做過多解釋了;與本項目有關(guān)的圖片數(shù)據(jù)我傳到資源里面了,大家可以免費下載,我把代碼和數(shù)據(jù)都打包到一起了,大家下載下來導(dǎo)入庫就可以直接一些了。
四、完整版代碼及數(shù)據(jù) 下載地址(下載就能用)
https://download.csdn.net/download/qq_36079986/13207925
歡迎一起完善項目
總結(jié)
以上是生活随笔為你收集整理的飞机大战 python小项目的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【研究】人大赵鑫老师报告:如何以初学者角
- 下一篇: 深度:中老年网民电商渗透率超40%,拼多