" />

亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法

    python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法

    這篇文章主要介紹了python獲取Linux下文件版本信息、公司名和產(chǎn)品名的方法,主要涉及了pefile模塊的用法,需要的朋友可以參考下
    2014-10-10
  • 使用Python來(lái)開(kāi)發(fā)微信功能

    使用Python來(lái)開(kāi)發(fā)微信功能

    這篇文章主要介紹了使用Python來(lái)開(kāi)發(fā)微信功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-06-06
  • Python 高效編程技巧分享

    Python 高效編程技巧分享

    工作中經(jīng)常要處理各種各樣的數(shù)據(jù),遇到項(xiàng)目趕進(jìn)度的時(shí)候自己寫(xiě)函數(shù)容易浪費(fèi)時(shí)間。Python 中有很多內(nèi)置函數(shù)幫你提高工作效率。
    2020-09-09
  • 通過(guò)實(shí)例了解python__slots__使用方法

    通過(guò)實(shí)例了解python__slots__使用方法

    這篇文章主要介紹了通過(guò)實(shí)例了解python__slots__使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Python遍歷某目錄下的所有文件夾與文件路徑

    Python遍歷某目錄下的所有文件夾與文件路徑

    這篇文章主要介紹了Python遍歷某目錄下的所有文件夾與文件路徑 以及輸出中文亂碼問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Python 對(duì)象序列化與反序列化之pickle json詳細(xì)解析

    Python 對(duì)象序列化與反序列化之pickle json詳細(xì)解析

    我們知道在Python中,一切皆為對(duì)象,實(shí)例是對(duì)象,類是對(duì)象,元類也是對(duì)象。本文正是要聊聊如何將這些對(duì)象有效地保存起來(lái),以供后續(xù)使用
    2021-09-09
  • python基礎(chǔ)教程之循環(huán)介紹

    python基礎(chǔ)教程之循環(huán)介紹

    這篇文章主要介紹了python基礎(chǔ)教程之循環(huán)介紹,本文講解了for循環(huán)、while循環(huán)、中斷循環(huán)等python的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2014-08-08
  • Python戀愛(ài)小助手之必拿下

    Python戀愛(ài)小助手之必拿下

    小編有個(gè)好兄弟最近在追妹子,跟妹子打得火熱!就差臨門(mén)一腳了,這一jio我?guī)兔ρa(bǔ)上去了!他問(wèn)有沒(méi)有什么酷炫的表白方式,想要一次成功,表白的方式有許多種今天小編來(lái)給大家?guī)?lái)兩個(gè)不得不同意的表白代碼
    2021-10-10
  • 老生常談進(jìn)程線程協(xié)程那些事兒

    老生常談進(jìn)程線程協(xié)程那些事兒

    下面小編就為大家?guī)?lái)一篇老生常談進(jìn)程線程協(xié)程那些事兒。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • 解決python中0x80072ee2錯(cuò)誤的方法

    解決python中0x80072ee2錯(cuò)誤的方法

    在本篇文章中小編給大家分享的是關(guān)于解決python中0x80072ee2錯(cuò)誤的方法,需要的朋友們可以參考下。
    2020-07-07

最新評(píng)論