python语言实现飞机大战
生活随笔
收集整理的這篇文章主要介紹了
python语言实现飞机大战
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
第一步:pygame的安裝
同時按下win+R打開運行
Enter打開命令提示符,先輸入pip -V查看pip版本號,主要是為了查看pip是否正常。
然后先嘗試安裝pygame測試下能否正常安裝,輸入命令pip install pygame。
因為我的電腦已經安裝過了,所以不會顯示安裝過程。
素材
最好新建一個飛機大戰的項目文件夾,然后先把圖片素材放進去,我就提供兩張,貌似還有水印,也可以直接去百度,有很多資源的,記得要把名字起好,做到能見名知意。
首先是地圖:
然后是我方飛機和敵方飛機:
最后是子彈:
飛機精靈庫
接下來就是代碼時間,在項目里先創建一個飛機大戰所有精靈的python文件
import random import pygame#定義屏幕大小的常量 SCREEN_RECT=pygame.Rect(0,0,520,700) #刷新的幀率 FRAME_PER_SEC=60 #創建敵機的定時器常量 CREATE_ENEMY_EVENT=pygame.USEREVENT #英雄發射子彈事件 HERO_FIRE_EVENT=pygame.USEREVENT+1class GameSprite (pygame.sprite.Sprite):'''飛機大戰游戲精靈'''def __init__(self,image_name,speed=1):#調用父類的初始化方法super().__init__()#定義對象的屬性self.image = pygame.image.load(image_name)self.rect = self.image.get_rect()self.speed = speeddef update(self):#在屏幕的垂直方向上移動self.rect.y += self.speedclass Background(GameSprite):'''游戲背景精靈'''def __init__(self,is_alt=False):#1.調用父類方法實現精靈的創建(image/rect/speed)super().__init__("./地圖.png")#2.判斷是否交替圖像,如果是,需要設置初始位置if is_alt:self.rect.y=-self.rect.heightdef update(self):#1.調用父類的方法實現super().update()#2.判斷屏幕是否移出屏幕,如果移出屏幕將圖像設置到屏幕的上方if self.rect.y>=SCREEN_RECT.height:self.rect.y=-self.rect.heightclass Enemy(GameSprite):'''敵機精靈'''def __init__(self):#1.調用父類方法,創建敵機精靈,同時指定敵機圖片super().__init__("./敵機.png")#2.指定敵機的初始隨機速度 2-4self.speed=random.randint(2,4)#3.指定敵機的初始隨機位置self.rect.bottom=0max_x=SCREEN_RECT.width-self.rect.widthself.rect.x=random.randint(0,max_x)passdef update(self):#1.調用父類方法,保持垂直方向的飛行super().update()#2.判斷是否飛出屏幕,如果是,需要從精靈組刪除敵機if self.rect.y>=SCREEN_RECT.height:#print("飛出屏幕,需要從精靈組刪除……")#kill方法可以將精靈從所有的精靈組中移出,精靈就會被自動銷毀self.kill()def __del__(self):#print("敵機陣亡 %s"%self.rect)passclass Hero(GameSprite):'''英雄精靈'''def __init__(self):#1.調用父類方法,設置image&speedsuper().__init__("./飛機.png",0)#2.設置英雄的初始位置self.rect.centerx=SCREEN_RECT.centerxself.rect.bottom=SCREEN_RECT.bottom-50#3.創建子彈的精靈組self.bullets=pygame.sprite.Group()def update(self):#英雄在水平方向移動self.rect.x += self.speed#控制英雄不能離開屏幕if self.rect.x<0:self.rect.x=0elif self.rect.right>SCREEN_RECT.right:self.rect.right=SCREEN_RECT.rightdef fire(self):#print("發射子彈")#1.創建子彈精靈bullet=BUllet()#2.設置精靈的位置bullet.rect.bottom=self.rect.ybullet.rect.centerx=self.rect.centerx#3.將精靈添加到精靈組self.bullets.add(bullet)class BUllet(GameSprite):'''子彈精靈'''def __init__(self):#調用父類方法,設置子彈圖片,設置初始速度super().__init__("./子彈.png",-2)def update(self):#調用父類方法,讓子彈沿垂直方向飛行super().update()#判斷子彈是否飛出屏幕if self.rect.bottom<0:self.kill()def __del__(self):pass這里邊是飛機大戰的所有精靈和精靈組,保存好之后,再寫飛機大戰的主程序。
飛機大戰主程序
import pygame from plane_sprites import *class PlaneGame(object):'''飛機大戰主游戲'''def __init__(self):print("游戲初始化")#1.創建游戲的窗口self.screen=pygame.display.set_mode(SCREEN_RECT.size)#2.創建游戲的時鐘self.clock=pygame.time.Clock()#3.調用私有方法,精靈和精靈組的創建self.__create_sprites()#4.設置定時器事件,創建敵機 1spygame.time.set_timer(CREATE_ENEMY_EVENT,300)#5.設置定時器事件,創建子彈 0.5spygame.time.set_timer(HERO_FIRE_EVENT,300)def __create_sprites(self):#創建背景精靈和精靈組bg1=Background()bg2=Background(True)self.back_group=pygame.sprite.Group(bg1,bg2)#創建敵機的精靈組self.enemy_group=pygame.sprite.Group()#創建英雄的精靈和精靈組self.hero=Hero()self.hero_group=pygame.sprite.Group(self.hero)def start_game(self):print("游戲開始……")while True:#1.設置刷新幀率self.clock.tick(FRAME_PER_SEC)#2.事件監聽self.__event_handler()#3.碰撞檢測self.__check_collide()#4.更新/繪制精靈組self.__update_sprites()#5.更新屏幕顯示pygame.display.update()passdef __event_handler(self):for event in pygame.event.get():#判斷是否退出游戲if event.type==pygame.QUIT:PlaneGame.__game_over()elif event.type==CREATE_ENEMY_EVENT:#print("敵機出場……")#創建敵機精靈enemy=Enemy()#將敵機精靈添加到敵機精靈組self.enemy_group.add(enemy)elif event.type==HERO_FIRE_EVENT:self.hero.fire()#使用鍵盤提供的方法獲取鍵盤按鍵——按鍵元組keys_pressed=pygame.key.get_pressed()#判斷元組中對應的按鍵索引值 1if keys_pressed[pygame.K_RIGHT]:#print("向右移動……")self.hero.speed = 5elif keys_pressed[pygame.K_LEFT]:#print("向左移動……")self.hero.speed = -5else:self.hero.speed = 0def __check_collide(self):#1.子彈摧毀敵機pygame.sprite.groupcollide(self.hero.bullets,self.enemy_group,True,True)#2.敵機撞毀英雄enemies=pygame.sprite.spritecollide(self.hero,self.enemy_group,True)#3.判斷列表是否有內容if len(enemies)>0:#讓英雄犧牲self.hero.kill()#結束游戲PlaneGame.__game_over()def __update_sprites(self):self.back_group.update()self.back_group.draw(self.screen)self.enemy_group.update()self.enemy_group.draw(self.screen)self.hero_group.update()self.hero_group.draw(self.screen)self.hero.bullets.update()self.hero.bullets.draw(self.screen)@staticmethoddef __game_over():print("游戲結束")pygame.quit()exit()if __name__ == '__main__':#創建游戲對象game = PlaneGame()#啟動游戲game.start_game()至于為什么要分兩個文件,emmmm,這個,python嘛,完全面向對象的編程語言,當然要找個對象了,兩個人在一起才不孤單,三個的話。。。。。
游戲界面
作死模式:
作為游戲的開發者,怎么能認慫呢,盤它!!!
不足之處
時間有限,只粗糙的寫了很簡單的一部分,不過注釋我都寫的很充分了,大家可以根據注釋改進一下,比如加上分數或者設置關卡之類的,加油。
結語
附上我最近看到的一句很有感觸的話:
“在自己的價值觀沒有實現之前,一切的陪伴都是累贅。”
總結
以上是生活随笔為你收集整理的python语言实现飞机大战的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《信息学奥赛一本通》分治算法 找数
- 下一篇: 《算法竞赛入门经典》(第二版) 习题2-