




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲本文實(shí)例為大家分享了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下
1、準(zhǔn)備環(huán)境
下載python(這里建議不需要安裝最新的,好像pygame還沒有對3.8支持的包,我也沒去試),安裝pygame模塊。
進(jìn)入cmd:
輸入pipinstallpygame顯示successfully安裝成功。
2、代碼塊:
importsys#退出程序
importpygame
classSettings():
def__init__(self):
self.screen_width=480
self.screen_height=852
self.bg_color=(255,192,203)
self.hero_speed=2#控制飛機(jī)移速
self.bullet_speed=4
self.bullet_width=4
self.bullet_height=8
self.bullet_color=(0,0,128)#設(shè)置子彈屬性
self.enemy_speed=1
classEnemy(pygame.sprite.Sprite):#創(chuàng)建敵人類
def__init__(self,screen,settings):
super(Enemy,self).__init__()
self.screen=screen
self.settings=settings
self.image=pygame.image.load("image/enemy1.png")
self.rect=self.image.get_rect()
self.rect.x=10
self.rect.y=10
self.speed=settings.enemy_speed
self.y=float(self.rect.y)
defupdate(self):
self.y+=self.speed
self.rect.y=self.y
defblitme(self):#繪制
self.screen.blit(self.image,self.rect)
classBullet(pygame.sprite.Sprite):#繼承sprite精靈
def__init__(self,screen,settings,hero):
super(Bullet,self).__init__()#初始化父類
self.screen=screen
self.settings=settings
self.image=pygame.image.load('image/bullet1.png')#圖片繪制子彈
self.rect=self.image.get_rect()
#self.rect=pygame.Rect(0,0,settings.bullet_width,settings.bullet_height)
self.rect.centerx=hero.rect.centerx#子彈與飛機(jī)中心保持一致
self.rect.y=hero.rect.y#y坐標(biāo)也保持一致
self.y=float(hero.rect.y)#減小誤差
self.speed=settings.bullet_speed#把自身速度保存下來
self.color=settings.bullet_color
defupdate(self):#子彈移動子彈持續(xù)向上移動讓y坐標(biāo)減少即可
self.y-=self.speed
self.rect.y=self.y
defdrawme(self):#繪制方法
#pygame.draw.rect(self.screen,self.color,self.rect)#繪制一個矩形上去屏幕顏色位置及大小
self.screen.blit(self.image,self.rect)
classBg():#定義一個背景類
def__init__(self,screen):
self.screen=screen
self.image=pygame.image.load("image/background.png")
self.rect=self.image.get_rect()
defblitme(self):#繪制自身
self.screen.blit(self.image,self.rect)
classHero():#繪制飛機(jī)
def__init__(self,screen,settings):
self.screen=screen
self.settings=settings#控制飛機(jī)移速
self.image=pygame.image.load("image/hero1.png")
self.rect=self.image.get_rect()
self.screen_rect=screen.get_rect()
#self.rect.x=self.screen_rect.width/2-self.rect.width/2#保證居中,屏幕寬度一半減去自身寬度一半
self.rect.centerx=self.screen_rect.centerx#利用中心點(diǎn)坐標(biāo)
self.rect.bottom=self.screen_rect.bottom#botom自身高度,位于最下方
self.moving_right=False#設(shè)置一個標(biāo)志位,控制按鍵按下與抬起
self.moving_left=False
self.centerx=float(self.screen_rect.centerx)#修改誤差,不讓它忽略小數(shù)
defblitme(self):#繪制自身
self.screen.blit(self.image,self.rect)
defupdate(self):#控制飛機(jī)移動
ifself.moving_rightandself.rect.rightself.screen_rect.right:#控制飛機(jī)右邊不能超出屏幕邊界
self.centerx+=self.settings.hero_speed
ifself.moving_leftandself.rect.left0:#控制到左邊距離大于0
self.centerx-=self.settings.hero_speed
self.rect.centerx=self.centerx
defcheck_events(screen,settings,hero,bullets):#事件檢測
foreventinpygame.event.get():
ifevent.type==pygame.QUIT:
pygame.quit()
sys.exit()
elifevent.type==pygame.KEYDOWN:#判斷是否按鍵按下
ifevent.key==pygame.K_RIGHT:#判斷是否按下方向右鍵
hero.moving_right=True
elifevent.key==pygame.K_LEFT:
hero.moving_left=True
elifevent.key==pygame.K_SPACE:
new_bullet=Bullet(screen,settings,hero)
bullets.add(new_bullet)
elifevent.type==pygame.KEYUP:
ifevent.key==pygame.K_RIGHT:
hero.moving_right=False
elifevent.key==pygame.K_LEFT:
hero.moving_left=False
defupdate_screen(bg,hero,bullets,enemys,screen):
bg.blitme()
forbulletinbullets.sprites():
bullet.drawme()
hero.blitme()
#enemy.blitme()
enemys.draw(screen)
pygame.display.flip()#刷新
defupdate_bullets(bullets):
bullets.update()
forbulletinbullets.sprites():#檢測子彈是否超出屏幕外,控制子彈刪除
ifbullet.rect.bottom0:
bullets.remove(bullets)
defupdate_enemys(enemys,bullets):
enemys.update()
pygame.sprite.groupcollide(bullets,enemys,True,True)#組的碰撞檢測,傳遞兩個組,True代表碰撞后是否銷毀
defcreate_enemys(enemys,screen,settings):#控制多個敵人生成
enemy=Enemy(screen,settings)
enemys.add(enemy)
number_enemys=screen.get_rect().width/(20+enemy.rect.width)#利用屏幕總寬度除以單個敵人所占空間得出一行最大敵人數(shù)
forindexinrange(int(number_enemys)):
ifindex==0:
continue#終止當(dāng)前循環(huán),繼續(xù)下次循環(huán)
x=10+index*(20+enemy.rect.width)#敵人之間存在10像素間隔
new_enemy=Enemy(screen,settings)
new_enemy.rect.x=x
enemys.add(new_enemy)
defrun_game():
pygame.init()#創(chuàng)建可視化窗口5
settings=Settings()
screen=pygame.display.set_mode((settings.screen_width,settings.screen_height))#設(shè)置窗口大小
bg=Bg(screen)
hero=Hero(screen,settings)
#enemy=Enemy(screen,settings)
bullets=pygame.sprite.Group()#管理子彈
enemys=pygame.sprite.Group()#管理敵人
create_enemys(enemys,screen,settings)
whileTrue:
che
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025西安科技大學(xué)高新學(xué)院輔導(dǎo)員考試試題及答案
- 2025炎黃職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2025石家莊職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- 2025荊楚理工學(xué)院輔導(dǎo)員考試試題及答案
- 2025福建生物工程職業(yè)技術(shù)學(xué)院輔導(dǎo)員考試試題及答案
- T/ZGSCJXH 1-2019陳年白酒收藏評價指標(biāo)體系
- 綠色建筑設(shè)計管理
- 健康體檢教學(xué)課件
- 美的崗位薪酬結(jié)構(gòu)設(shè)計體系
- 湖北神農(nóng)架中和旅游有限公司招聘筆試題庫2025
- GB∕T 2518-2019 連續(xù)熱鍍鋅和鋅合金鍍層鋼板及鋼帶
- 安徽省2022年中考地理真題試卷(圖片版含答案)
- 青海省部門統(tǒng)計數(shù)據(jù)直報系統(tǒng)
- 常見輸液反應(yīng)及處理
- 大氣商務(wù)勵志年終工作總結(jié)PPT模板課件
- 感悟親情作文指導(dǎo)
- 幼兒園辦園標(biāo)準(zhǔn)
- 10kV及以下架空配電線路設(shè)計技術(shù)規(guī)程
- 硅膠安全技術(shù)說明書(MSDS)
- 鋼筋加工下料自動計算表樣品
- 胸痛中心應(yīng)知應(yīng)會修改后
評論
0/150
提交評論