python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲_第1頁
python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲_第2頁
python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲_第3頁
python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲_第4頁
python實(shí)現(xiàn)簡單的飛機(jī)大戰(zhàn)游戲_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論