" />

最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲

 更新時(shí)間:2022年05月08日 08:25:20   作者:Crius。  
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)簡(jiǎn)單的飛機(jī)大戰(zhàn)游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了python實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲的具體代碼,供大家參考,具體內(nèi)容如下

1、準(zhǔn)備環(huán)境

下載python(這里建議不需要安裝最新的,好像pygame還沒(méi)有對(duì)3.8支持的包,我也沒(méi)去試),安裝pygame模塊。

進(jìn)入cmd:

輸入“pip install pygame”——>顯示“successfully”安裝成功。

2、代碼塊:

import sys#退出程序
import pygame

class Settings():
? 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

class Enemy(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)

? def update(self):
? ? self.y += self.speed
? ? self.rect.y = self.y
??
? def blitme(self):#繪制
? ? self.screen.blit(self.image,self.rect) ? ?
? ??
class Bullet(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#把自身速度保存下來(lái)
? ? self.color = settings.bullet_color

? def update(self):#子彈移動(dòng) 子彈持續(xù)向上移動(dòng) 讓y坐標(biāo)減少即可
? ? self.y -= self.speed
? ? self.rect.y = self.y

? def drawme(self):#繪制方法
? ? #pygame.draw.rect(self.screen,self.color,self.rect)#繪制一個(gè)矩形上去 屏幕 顏色 位置及大小
? ? self.screen.blit(self.image,self.rect)

class Bg():#定義一個(gè)背景類
? def __init__(self,screen):
? ? self.screen = screen
? ? self.image = pygame.image.load("image/background.png")
? ? self.rect = self.image.get_rect()

? def blitme(self):#繪制自身
? ? self.screen.blit(self.image,self.rect)

class Hero():#繪制飛機(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è)置一個(gè)標(biāo)志位,控制按鍵按下與抬起
? ? self.moving_left = False
? ? self.centerx = float(self.screen_rect.centerx)#修改誤差,不讓它忽略小數(shù)
? ??
? def blitme(self):#繪制自身
? ? self.screen.blit(self.image,self.rect)

? def update(self):#控制飛機(jī)移動(dòng)
? ? if self.moving_right and self.rect.right < self.screen_rect.right:#控制飛機(jī)右邊不能超出屏幕邊界
? ? ? self.centerx += self.settings.hero_speed
? ? if self.moving_left and self.rect.left > 0:#控制到左邊距離大于0
? ? ? self.centerx -= self.settings.hero_speed
? ? self.rect.centerx = self.centerx

def check_events(screen,settings,hero,bullets):#事件檢測(cè)
? for event in pygame.event.get():
? ? if event.type == pygame.QUIT:
? ? ? pygame.quit()
? ? ? sys.exit()
? ? elif event.type == pygame.KEYDOWN:#判斷是否按鍵按下
? ? ? if event.key == pygame.K_RIGHT:#判斷是否按下方向右鍵
? ? ? ? hero.moving_right = True
? ? ? elif event.key == pygame.K_LEFT:
? ? ? ? hero.moving_left = True
? ? ? elif event.key == pygame.K_SPACE:
? ? ? ? new_bullet = Bullet(screen,settings,hero)
? ? ? ? bullets.add(new_bullet) ? ? ?
? ? elif event.type == pygame.KEYUP:
? ? ? if event.key == pygame.K_RIGHT:
? ? ? ? hero.moving_right = False
? ? ? elif event.key == pygame.K_LEFT:
? ? ? ? hero.moving_left = False

def update_screen(bg,hero,bullets,enemys,screen):
? bg.blitme()
? for bullet in bullets.sprites():
? ? bullet.drawme()
? hero.blitme()
? #enemy.blitme()
? enemys.draw(screen)
? pygame.display.flip()#刷新

def update_bullets(bullets):
? bullets.update()
? for bullet in bullets.sprites():#檢測(cè)子彈是否超出屏幕外,控制子彈刪除
? ? if bullet.rect.bottom<0:
? ? ? bullets.remove(bullets)

def update_enemys(enemys,bullets):
? enemys.update()
? pygame.sprite.groupcollide(bullets,enemys,True,True)#組的碰撞檢測(cè),傳遞兩個(gè)組,True代表碰撞后是否銷毀

def create_enemys(enemys,screen,settings):#控制多個(gè)敵人生成
? enemy = Enemy(screen,settings)
? enemys.add(enemy)
? number_enemys = screen.get_rect().width/(20+enemy.rect.width)#利用屏幕總寬度除以單個(gè)敵人所占空間得出一行最大敵人數(shù)
? for index in range(int(number_enemys)):
? ? if index==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)

def run_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)
??
? while True: ?
? ? check_events(screen,settings,hero,bullets)
? ? hero.update()
? ? update_bullets(bullets)
? ? update_enemys(enemys,bullets)
? ? #print(len(bullets.sprites()))#驗(yàn)證刪除子彈代碼是否生效
? ? update_screen(bg,hero,bullets,enemys,screen)
? ??

run_game()?

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實(shí)現(xiàn)淘寶秒殺功能的示例代碼

    Python實(shí)現(xiàn)淘寶秒殺功能的示例代碼

    這篇文章主要介紹了Python實(shí)現(xiàn)淘寶秒殺功能,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析

    基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析

    這篇文章主要介紹了基于python實(shí)現(xiàn)ROC曲線繪制廣場(chǎng)解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • python裝飾器"@"使用實(shí)例深入探究

    python裝飾器"@"使用實(shí)例深入探究

    這篇文章主要為大家介紹了python裝飾器"@"使用實(shí)例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python通過(guò)RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程

    Python通過(guò)RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程

    RabbitMQ是一個(gè)基于消息隊(duì)列的服務(wù)器程序,Python可以通過(guò)Pika庫(kù)來(lái)驅(qū)動(dòng)它,這里我們將來(lái)看一個(gè)Python通過(guò)RabbitMQ服務(wù)器實(shí)現(xiàn)交換機(jī)功能的實(shí)例教程:
    2016-06-06
  • Pycharm學(xué)習(xí)教程(6) Pycharm作為Vim編輯器使用

    Pycharm學(xué)習(xí)教程(6) Pycharm作為Vim編輯器使用

    這篇文章主要為大家詳細(xì)介紹了最全的Pycharm學(xué)習(xí)教程第六篇,Pycharm作為Vim編輯器使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • python判斷一個(gè)對(duì)象是否可迭代的例子

    python判斷一個(gè)對(duì)象是否可迭代的例子

    今天小編就為大家分享一篇python判斷一個(gè)對(duì)象是否可迭代的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-07-07
  • Python 正則表達(dá)式入門(中級(jí)篇)

    Python 正則表達(dá)式入門(中級(jí)篇)

    本文主要介紹子表達(dá)式,向前向后查找,回溯引用,有需要的朋友可以看下,希望對(duì)大家有所幫助
    2016-12-12
  • 淺談numpy溢出錯(cuò)誤

    淺談numpy溢出錯(cuò)誤

    本文主要介紹了淺談numpy溢出錯(cuò)誤,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法

    python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法

    今天小編就為大家分享一篇python一行sql太長(zhǎng)折成多行并且有多個(gè)參數(shù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹

    詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹

    這篇文章主要介紹了詳解pytest實(shí)現(xiàn)mark標(biāo)記功能詳細(xì)介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04

最新評(píng)論

平远县| 沿河| 塔河县| 泌阳县| 陵川县| 巍山| 泰宁县| 湘潭市| 台北市| 湖南省| 清流县| 景泰县| 子长县| 华容县| 应城市| 巨野县| 慈利县| 祁门县| 闸北区| 大化| 临汾市| 萨嘎县| 咸宁市| 宽甸| 惠来县| 烟台市| 黑山县| 应城市| 武功县| 盘锦市| 射洪县| 七台河市| 名山县| 古交市| 靖州| 深水埗区| 浦城县| 封丘县| 武汉市| 潮安县| 淅川县|