国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲

這篇具有很好參考價(jià)值的文章主要介紹了用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Python是一門非常簡單的語言,快速入門之后可以做很多事情!比如爬蟲啊,數(shù)據(jù)分析啊,自動(dòng)化運(yùn)維啊,機(jī)器學(xué)習(xí),量化分析等等!但是入門到進(jìn)階的過程有時(shí)會非常痛苦,如果有一些好玩有趣的例子就好了。

比如通過游戲來學(xué)編程是一個(gè)非常好的途徑,今天在Github上發(fā)現(xiàn)一個(gè)非常好玩的打飛機(jī)游戲,大概就200多行,非常不錯(cuò)!

用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲,Python,python,游戲,pygame

關(guān)注公眾號Python專欄回復(fù)“飛機(jī)大戰(zhàn)”獲取源代碼

1、打飛機(jī)的游戲

打飛機(jī)的游戲估計(jì)很多人都玩過,雷霆戰(zhàn)機(jī)相信很多80后的小伙伴都玩過!

Python是一門非常簡單的語言,快速入門之后可以做很多事情!比如爬蟲啊,數(shù)據(jù)分析啊,自動(dòng)化運(yùn)維啊,機(jī)器學(xué)習(xí),量化分析等等!

但是入門到進(jìn)階的過程有時(shí)會非常痛苦,如果有一些好玩有趣的例子就好了。比如通過游戲來學(xué)編程是一個(gè)非常好的途徑,今天在Github上發(fā)現(xiàn)一個(gè)非常好玩的打飛機(jī)游戲,大概就200多行,非常不錯(cuò)!

2、代碼量200多行

看起來打飛機(jī)的游戲應(yīng)該蠻復(fù)雜的吧,結(jié)果我看了作者的源代碼之后,發(fā)現(xiàn)才200多行!

而且結(jié)構(gòu)非常清晰完整,最重要的人家不僅代碼寫的漂亮,注釋非常完整,讓別人看的一目了然,好的代碼習(xí)慣真的很重要,德藝雙馨??!

1.代碼的結(jié)構(gòu)

用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲,Python,python,游戲,pygame

2.游戲的角色文件

gameRole 整個(gè)游戲分三個(gè)角色,下面我一一來解釋一下,思路其實(shí)非常清晰的。

1)一個(gè)是子彈

用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲,Python,python,游戲,pygame

初始化子彈的圖片,然后得到它在畫布上的坐標(biāo),并控制它的移動(dòng)速度

2)敵機(jī)

會隨機(jī)出一堆敵人的飛機(jī),直管往前沖,從屏幕的上方往下方蜂擁而至,不需要考慮其他的行為!

用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲,Python,python,游戲,pygame

敵機(jī)有幾個(gè)重要的屬性,比如它的飛行圖片和擊落的圖片,然后獲取的屏幕上的坐標(biāo)。敵機(jī)的行為就一個(gè)飛,而且是只會往前飛。

3)我方戰(zhàn)機(jī)

 

# 玩家類
class?Player(pygame.sprite.Sprite):
? ?def?__init__(self, plane_img, player_rect, init_pos):
? ? ? ?pygame.sprite.Sprite.__init__(self)
? ? ? ?self.image = [] ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??# 用來存儲玩家對象精靈圖片的列表
? ? ? ?for?i?in?range(len(player_rect)):
? ? ? ? ? ?self.image.append(plane_img.subsurface(player_rect[i]).convert_alpha())
? ? ? ?self.rect = player_rect[0] ? ? ? ? ? ? ? ? ? ? ?# 初始化圖片所在的矩形
? ? ? ?self.rect.topleft = init_pos ? ? ? ? ? ? ? ? ? ?# 初始化矩形的左上角坐標(biāo)
? ? ? ?self.speed =?8?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 初始化玩家速度,這里是一個(gè)確定的值
? ? ? ?self.bullets = pygame.sprite.Group() ? ? ? ? ? ?# 玩家飛機(jī)所發(fā)射的子彈的集合
? ? ? ?self.img_index =?0?? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 玩家精靈圖片索引
? ? ? ?self.is_hit = False ? ? ? ? ? ? ? ? ? ? ? ? ? ??# 玩家是否被擊中

? ?def?shoot(self, bullet_img):
? ? ? ?bullet = Bullet(bullet_img,?self.rect.midtop)
? ? ? ?self.bullets.add(bullet)

? ?def?moveUp(self):
? ? ? ?if?self.rect.top <=?0:
? ? ? ? ? ?self.rect.top =?0
? ? ? ?else:
? ? ? ? ? ?self.rect.top -=?self.speed

? ?def?moveDown(self):
? ? ? ?if?self.rect.top >= SCREEN_HEIGHT -?self.rect.height:
? ? ? ? ? ?self.rect.top = SCREEN_HEIGHT -?self.rect.height
? ? ? ?else:
? ? ? ? ? ?self.rect.top +=?self.speed

? ?def?moveLeft(self):
? ? ? ?if?self.rect.left <=?0:
? ? ? ? ? ?self.rect.left =?0
? ? ? ?else:
? ? ? ? ? ?self.rect.left -=?self.speed

? ?def?moveRight(self):
? ? ? ?if?self.rect.left >= SCREEN_WIDTH -?self.rect.width:
? ? ? ? ? ?self.rect.left = SCREEN_WIDTH -?self.rect.width
? ? ? ?else:
? ? ? ? ? ?self.rect.left +=?self.speed

我方的戰(zhàn)機(jī)稍微復(fù)雜一點(diǎn),因?yàn)槭悄兄鹘锹?!它有這么幾個(gè)主要的屬性,飛行的圖片,被擊落的圖片,屏幕坐標(biāo),它的子彈等等!然后我們需要控制它的飛機(jī)方向,向上,向下,左邊和右邊,發(fā)射子彈。

3.主游戲部分文件mainGame?

1)先是初始化游戲的界面大小,字體等等,讀取聲音和圖片和基本配置:

#?初始化游戲
pygame.init()
screen?=?pygame.display.set_mode((SCREEN_WIDTH,?SCREEN_HEIGHT))
pygame.display.set_caption('飛機(jī)大戰(zhàn)')

#?載入游戲音樂
bullet_sound?=?pygame.mixer.Sound('resources/sound/bullet.wav')
enemy1_down_sound?=?pygame.mixer.Sound('resources/sound/enemy1_down.wav')
game_over_sound?=?pygame.mixer.Sound('resources/sound/game_over.wav')
bullet_sound.set_volume(0.3)
enemy1_down_sound.set_volume(0.3)
game_over_sound.set_volume(0.3)
pygame.mixer.music.load('resources/sound/game_music.wav')
pygame.mixer.music.play(-1,?0.0)
pygame.mixer.music.set_volume(0.25)

#?載入背景圖
background?=?pygame.image.load('resources/image/background.png').convert()
game_over?=?pygame.image.load('resources/image/gameover.png')

filename?=?'resources/image/shoot.png'
plane_img?=?pygame.image.load(filename)
???????

2)游戲的邏輯部分

其實(shí)用一個(gè)大的while 循環(huán)來寫整個(gè)游戲的邏輯部分

 

while?running:
? ?# 控制游戲最大幀率為60
? ?clock.tick(60)

? ?# 控制發(fā)射子彈頻率,并發(fā)射子彈
? ?if?not player.is_hit:
? ? ? ?if?shoot_frequency %?15?==?0:
? ? ? ? ? ?bullet_sound.play()
? ? ? ? ? ?player.shoot(bullet_img)
? ? ? ?shoot_frequency +=?1
? ? ? ?if?shoot_frequency >=?15:
? ? ? ? ? ?shoot_frequency =?0

? ?# 生成敵機(jī)
? ?if?enemy_frequency %?50?==?0:
? ? ? ?enemy1_pos = [random.randint(0, SCREEN_WIDTH - enemy1_rect.width),?0]
? ? ? ?enemy1 = Enemy(enemy1_img, enemy1_down_imgs, enemy1_pos)
? ? ? ?enemies1.add(enemy1)
? ?enemy_frequency +=?1
? ?if?enemy_frequency >=?100:
? ? ? ?enemy_frequency =?0

? ?# 移動(dòng)子彈,若超出窗口范圍則刪除
? ?for?bullet?in?player.bullets:
? ? ? ?bullet.move()
? ? ? ?if?bullet.rect.bottom <?0:
? ? ? ? ? ?player.bullets.remove(bullet)

? ?# 移動(dòng)敵機(jī),若超出窗口范圍則刪除
? ?for?enemy?in?enemies1:
? ? ? ?enemy.move()
? ? ? ?# 判斷玩家是否被擊中
? ? ? ?if?pygame.sprite.collide_circle(enemy, player):
? ? ? ? ? ?enemies_down.add(enemy)
? ? ? ? ? ?enemies1.remove(enemy)
? ? ? ? ? ?player.is_hit = True
? ? ? ? ? ?game_over_sound.play()
? ? ? ? ? ?break
? ? ? ?if?enemy.rect.top > SCREEN_HEIGHT:
? ? ? ? ? ?enemies1.remove(enemy)

? ?# 將被擊中的敵機(jī)對象添加到擊毀敵機(jī)Group中,用來渲染擊毀動(dòng)畫
? ?enemies1_down = pygame.sprite.groupcollide(enemies1, player.bullets,?1,?1)
? ?for?enemy_down?in?enemies1_down:
? ? ? ?enemies_down.add(enemy_down)

? ?# 繪制背景
? ?screen.fill(0)
? ?screen.blit(background, (0,?0))

? ?# 繪制玩家飛機(jī)
? ?if?not player.is_hit:
? ? ? ?screen.blit(player.image[player.img_index], player.rect)
? ? ? ?# 更換圖片索引使飛機(jī)有動(dòng)畫效果
? ? ? ?player.img_index = shoot_frequency?// 8
? ?else:
? ? ? ?player.img_index = player_down_index?// 8
? ? ? ?screen.blit(player.image[player.img_index], player.rect)
? ? ? ?player_down_index +=?1
? ? ? ?if?player_down_index >?47:
? ? ? ? ? ?running = False

? ?# 繪制擊毀動(dòng)畫
? ?for?enemy_down?in?enemies_down:
? ? ? ?if?enemy_down.down_index ==?0:
? ? ? ? ? ?enemy1_down_sound.play()
? ? ? ?if?enemy_down.down_index >?7:
? ? ? ? ? ?enemies_down.remove(enemy_down)
? ? ? ? ? ?score +=?1000
? ? ? ? ? ?continue
? ? ? ?screen.blit(enemy_down.down_imgs[enemy_down.down_index?// 2], enemy_down.rect)
? ? ? ?enemy_down.down_index +=?1

? ?# 繪制子彈和敵機(jī)
? ?player.bullets.draw(screen)
? ?enemies1.draw(screen)

上面這一堆代碼其實(shí)就是干下面幾個(gè)事情:

  • 先繪制出背景幕布

  • 再繪制出玩家的戰(zhàn)機(jī),敵機(jī)

  • 綁定戰(zhàn)機(jī)和敵機(jī)的鼠標(biāo)和鍵盤響應(yīng)事件

  • 發(fā)射子彈,通過坐標(biāo)來判斷子彈和敵機(jī)的碰撞,以及敵機(jī)和玩家戰(zhàn)機(jī)的碰撞

  • 最后還要計(jì)算得分

整個(gè)源碼量很小,非常簡潔!大家可以試著讀一讀源碼,然后運(yùn)行一下,可以做一些修改,這樣的有趣的小游戲代碼,難度適中!對菜鳥快速了解Python的類,模塊的使用非常有幫助然后自己可以增加一些功能!

更多精彩教程歡迎B站搜索“千鋒教育”

千鋒教育Python全套視頻教程,輕松掌握Excel、Word、PPT、郵件、爬蟲、office辦公自動(dòng)化(宋如寧主講)文章來源地址http://www.zghlxwxcb.cn/news/detail-752335.html

到了這里,關(guān)于用Python開發(fā)一個(gè)迷你打飛機(jī)的游戲的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • pygame飛機(jī)大戰(zhàn)小游戲(python大作業(yè))

    pygame飛機(jī)大戰(zhàn)小游戲(python大作業(yè))

    ? python大作業(yè),在查看了老師給的鏈接發(fā)現(xiàn)教學(xué)視頻不完整,所以借用了同學(xué)的《Python編程 從入門到實(shí)踐》中的一個(gè)項(xiàng)目,學(xué)習(xí)模仿。 二、游戲具體介紹 這是一款由輝輝親自打造的太空對戰(zhàn)小游戲。 游戲背景:在廣袤無垠的太空里有一群藍(lán)精靈(不是)有一群邪惡的壞人,

    2024年02月11日
    瀏覽(31)
  • Python實(shí)驗(yàn),用pygame做飛機(jī)大戰(zhàn)游戲設(shè)計(jì)

    摘 要:根據(jù)課程要求,以及面向?qū)ο蟪绦蛟O(shè)計(jì)的編程思想,在Windows操作系統(tǒng)環(huán)境下,運(yùn)用PyCharm編譯程序,以Python語言為開發(fā)語言,最終實(shí)現(xiàn)飛機(jī)大戰(zhàn)游戲相應(yīng)的游戲操作功能。Python是一種跨平臺的、開源的、免費(fèi)的、解釋型的高級編程語言。它具有豐富的、強(qiáng)大的庫, 能夠

    2024年02月07日
    瀏覽(33)
  • 【python】 pygame學(xué)習(xí)示例 --飛機(jī)大戰(zhàn)小游戲制作

    【python】 pygame學(xué)習(xí)示例 --飛機(jī)大戰(zhàn)小游戲制作

    python版本:3.8.5 所需模塊:pygame random os pygame版本:20.1 開發(fā)環(huán)境:pycharm專業(yè)版 硬件環(huán)境:win11 8G內(nèi)存以上 使用python的第三方庫–pygame 制作飛機(jī)大戰(zhàn)小游戲 小游戲的內(nèi)容包括: 玩家player的移動(dòng) 子彈的發(fā)射 隕石的隨機(jī)掉落(包括旋轉(zhuǎn) 大小 下落角度) 玩家 子彈 隕石的碰撞交互

    2024年02月04日
    瀏覽(24)
  • Python開發(fā)小游戲:寫一個(gè)飛機(jī)大戰(zhàn)只需要500行代碼!

    Python開發(fā)小游戲:寫一個(gè)飛機(jī)大戰(zhàn)只需要500行代碼!

    ‘’’ :param background_image_path: 背景圖片的路徑地址 :param size: 游戲窗口的大小 :param title: 游戲窗口的標(biāo)題 :param font_name: 指定字體 :param font_size: 指定字體大小 :param speed: 背景圖滾動(dòng)整個(gè)窗口一次所用時(shí)間,單位為ms ‘’’ self.size = size self.screen = pygame.display.set_mode(size) self.tit

    2024年04月11日
    瀏覽(33)
  • Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

    Python3+pygame實(shí)現(xiàn)有趣好玩的飛機(jī)大戰(zhàn)游戲(附源碼及素材)

    版權(quán)聲明:原創(chuàng)不易,本文禁止抄襲、轉(zhuǎn)載,侵權(quán)必究! 開發(fā)環(huán)境 :Windows10 Python3.6.4 第三方庫 :Pygame1.9.6 IDE :PyCharm/Sublime Text 素材模塊 游戲圖片素材: BGM及音效素材: 字體素材: 源碼模塊 子彈模塊 普通子彈部分源碼: 超級子彈部分源碼: 敵機(jī)子彈部分源碼: 敵機(jī)模

    2024年02月11日
    瀏覽(26)
  • 很合適新手入門使用的Python游戲開發(fā)包pygame實(shí)例教程-01[開發(fā)環(huán)境配置與第一個(gè)界面]

    很合適新手入門使用的Python游戲開發(fā)包pygame實(shí)例教程-01[開發(fā)環(huán)境配置與第一個(gè)界面]

    我們假定你已經(jīng)安裝好了我們開發(fā)python程序的sublime text,如果不知道怎么安裝的可以參照我前面的博文。這里只需要解決的是配置好Pygame的問題。本篇博文主要解決開發(fā)環(huán)境配置以及第一個(gè)游戲界面的顯示問題。 文章原出處: https://blog.csdn.net/haigear/article/details/130173836 沒有

    2024年01月25日
    瀏覽(35)
  • python小游戲開發(fā)(飛機(jī)大戰(zhàn))

    python小游戲開發(fā)(飛機(jī)大戰(zhàn))

    目錄 一:背景? ? ?? 1. pygame 模塊初識 二.項(xiàng)目設(shè)計(jì)內(nèi)容 開發(fā)一款飛機(jī)大戰(zhàn)游戲,要求: (1)實(shí)現(xiàn)飛機(jī)的移動(dòng)、子彈發(fā)射,對本次游戲有一個(gè)初步的編寫及認(rèn)識。 (2)飛機(jī)的持續(xù)按鍵移動(dòng)和飛機(jī)自爆優(yōu)化。 (3)進(jìn)行基類的抽取,使代碼更具有層次性和簡化重復(fù)代碼。 (

    2024年02月16日
    瀏覽(27)
  • Pygame —— 一個(gè)好玩的游戲 Python 庫

    Pygame —— 一個(gè)好玩的游戲 Python 庫

    在電子游戲的世界里,每一個(gè)精彩跳躍、每一個(gè)刺激沖刺、每一次動(dòng)聽的背景音樂,都是通過精心設(shè)計(jì)的代碼和資源組合出來的奇幻體驗(yàn)。 想象一下,如果你能夠制作自己的電子游戲,將內(nèi)心的奇思妙想實(shí)現(xiàn)在屏幕上,那會是多么令人興奮和自豪的事情。這個(gè)夢想,并不遙遠(yuǎn)

    2024年02月20日
    瀏覽(26)
  • python游戲開發(fā)項(xiàng)目之飛機(jī)大戰(zhàn)(2)

    python游戲開發(fā)項(xiàng)目之飛機(jī)大戰(zhàn)(2)

    1.先獲取所有事件 注:用來獲取當(dāng)前發(fā)生的所有事件,并將其存儲在event_list列表中。 2.實(shí)現(xiàn)正常退出游戲 注:if event.type == pygame.QUIT這行代碼是一個(gè)條件判斷語句,用來檢查當(dāng)前遍歷到的事件類型是否是pygame.QUIT,表示嘗試關(guān)閉游戲窗口,加上這個(gè)模塊后我們運(yùn)行出的界面就

    2024年04月26日
    瀏覽(29)
  • Python 游戲開發(fā)與 Pygame

    第一章. Python 簡介 Python 簡介和歷史 Python 特點(diǎn)和優(yōu)勢 安裝 Python 第二章. 變量和數(shù)據(jù)類型 變量和標(biāo)識符 基本數(shù)據(jù)類型:數(shù)字、字符串、布爾值等 字符串操作 列表、元組和字典 第三章. 控制語句和函數(shù) 分支結(jié)構(gòu):if/else 語句 循環(huán)結(jié)構(gòu):for 和 while 循環(huán) 函數(shù) 參數(shù)傳遞與返回值

    2024年04月17日
    瀏覽(25)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包