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

Python Pygame實戰(zhàn)之超級炸彈人游戲的實現(xiàn)

 更新時間:2022年03月17日 09:10:47   作者:嗨!栗子同學(xué)  
如今的玩家們在無聊的時候會玩些什么游戲呢?王者還是吃雞是最多的選擇。但在80、90年代的時候多是一些很簡單的游戲:《超級瑪麗》、《魂斗羅》等。本文將利用Pygame制作另一個經(jīng)典游戲—炸彈人,感興趣的可以了解一下

前言

如今的玩家們在無聊的時候會玩些什么游戲呢?

王者還是吃雞是最多的選擇。但在80、90年代的時候多是一些很簡單的游戲:《超級瑪麗》、《蜘蛛紙牌》、《魂斗羅》......

不知道還有人記得《炸彈人》這款懷舊的產(chǎn)品嘛?

啊這,不對不對,放錯圖片了下面這才是童年的正確打開方式

今天小編就帶大家懷舊一波,來給大家用代碼仿制一下童年大家玩兒過的《炸彈人》小游戲!

一、環(huán)境安裝

1.素材(圖片)

2.環(huán)境安裝

本文是由Pygame寫的小游戲。

涉及運行環(huán)境:Python3.7、Pycharm社區(qū)版、Pygame模塊。

pip install +模塊名 或pip install -i https://pypi.douban.com/simple/ +模塊名

二、代碼演示

1.配置文件

'''配置文件'''
import os
 
 
'''屏幕大小'''
SCREENSIZE = (640, 480)
'''塊大小'''
BLOCKSIZE = 30
'''FPS'''
FPS = 30
'''游戲地圖路徑'''
GAMEMAPPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/maps/1.map', 'resources/maps/2.map']]
'''墻路徑'''
WALLPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/misc/wall0.png', 'resources/images/misc/wall1.png', 'resources/images/misc/wall2.png']]
'''英雄路徑'''
HERODKPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/dk/left.png', 'resources/images/dk/right.png', 'resources/images/dk/up.png', 'resources/images/dk/down.png']]
HEROZELDAPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/zelda/left.png', 'resources/images/zelda/right.png', 'resources/images/zelda/up.png', 'resources/images/zelda/down.png']]
HEROBATMANPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/batman/left.png', 'resources/images/batman/right.png', 'resources/images/batman/up.png', 'resources/images/batman/down.png']]
'''水果路徑'''
FRUITPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/misc/banana.png', 'resources/images/misc/cherry.png']]
'''背景路徑'''
BACKGROUNDPATHS = [os.path.join(os.getcwd(), path) for path in \
    ['resources/images/misc/bg0.png', 'resources/images/misc/bg1.png', 'resources/images/misc/bg2.png']]
'''爆炸和發(fā)射路徑'''
BOMBPATH = os.path.join(os.getcwd(), 'resources/images/misc/bomb.png')
FIREPATH = os.path.join(os.getcwd(), 'resources/images/misc/fire.png')
'''背景音樂'''
BGMPATH = os.path.join(os.getcwd(), 'resources/audio/bgm.mp3')
'''一些顏色'''
YELLOW = (255, 255, 0)
BLUE = (0, 0, 255)
RED = (255, 0, 0)
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)

2.主程序

 
import sys
import cfg
import random
import pygame
from modules import *
 
 
'''游戲主程序'''
def main(cfg):
    # 初始化
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.play(-1, 0.0)
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('炸彈人小游戲')
    # 開始界面
    Interface(screen, cfg, mode='game_start')
    # 游戲主循環(huán)
    font = pygame.font.SysFont('Consolas', 15)
    for gamemap_path in cfg.GAMEMAPPATHS:
        # -地圖
        map_parser = mapParser(gamemap_path, bg_paths=cfg.BACKGROUNDPATHS, wall_paths=cfg.WALLPATHS, blocksize=cfg.BLOCKSIZE)
        # -水果
        fruit_sprite_group = pygame.sprite.Group()
        used_spaces = []
        for i in range(5):
            coordinate = map_parser.randomGetSpace(used_spaces)
            used_spaces.append(coordinate)
            fruit_sprite_group.add(Fruit(random.choice(cfg.FRUITPATHS), coordinate=coordinate, blocksize=cfg.BLOCKSIZE))
        # -我方Hero
        coordinate = map_parser.randomGetSpace(used_spaces)
        used_spaces.append(coordinate)
        ourhero = Hero(imagepaths=cfg.HEROZELDAPATHS, coordinate=coordinate, blocksize=cfg.BLOCKSIZE, map_parser=map_parser, hero_name='ZELDA')
        # -電腦Hero
        aihero_sprite_group = pygame.sprite.Group()
        coordinate = map_parser.randomGetSpace(used_spaces)
        aihero_sprite_group.add(Hero(imagepaths=cfg.HEROBATMANPATHS, coordinate=coordinate, blocksize=cfg.BLOCKSIZE, map_parser=map_parser, hero_name='BATMAN'))
        used_spaces.append(coordinate)
        coordinate = map_parser.randomGetSpace(used_spaces)
        aihero_sprite_group.add(Hero(imagepaths=cfg.HERODKPATHS, coordinate=coordinate, blocksize=cfg.BLOCKSIZE, map_parser=map_parser, hero_name='DK'))
        used_spaces.append(coordinate)
        # -炸彈bomb
        bomb_sprite_group = pygame.sprite.Group()
        # -用于判斷游戲勝利或者失敗的flag
        is_win_flag = False
        # -主循環(huán)
        screen = pygame.display.set_mode(map_parser.screen_size)
        clock = pygame.time.Clock()
        while True:
            dt = clock.tick(cfg.FPS)
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    pygame.quit()
                    sys.exit(-1)
                # --↑↓←→鍵控制上下左右, 空格鍵丟炸彈
                elif event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_UP:
                        ourhero.move('up')
                    elif event.key == pygame.K_DOWN:
                        ourhero.move('down')
                    elif event.key == pygame.K_LEFT:
                        ourhero.move('left')
                    elif event.key == pygame.K_RIGHT:
                        ourhero.move('right')
                    elif event.key == pygame.K_SPACE:
                        if ourhero.bomb_cooling_count <= 0:
                            bomb_sprite_group.add(ourhero.generateBomb(imagepath=cfg.BOMBPATH, digitalcolor=cfg.YELLOW, explode_imagepath=cfg.FIREPATH))
            screen.fill(cfg.WHITE)
            # --電腦Hero隨機(jī)行動
            for hero in aihero_sprite_group:
                action, flag = hero.randomAction(dt)
                if flag and action == 'dropbomb':
                    bomb_sprite_group.add(hero.generateBomb(imagepath=cfg.BOMBPATH, digitalcolor=cfg.YELLOW, explode_imagepath=cfg.FIREPATH))
            # --吃到水果加生命值(只要是Hero, 都能加)
            ourhero.eatFruit(fruit_sprite_group)
            for hero in aihero_sprite_group:
                hero.eatFruit(fruit_sprite_group)
            # --游戲元素都綁定到屏幕上
            map_parser.draw(screen)
            for bomb in bomb_sprite_group:
                if not bomb.is_being:
                    bomb_sprite_group.remove(bomb)
                explode_area = bomb.draw(screen, dt, map_parser)
                if explode_area:
                    # --爆炸火焰范圍內(nèi)的Hero生命值將持續(xù)下降
                    if ourhero.coordinate in explode_area:
                        ourhero.health_value -= bomb.harm_value
                    for hero in aihero_sprite_group:
                        if hero.coordinate in explode_area:
                            hero.health_value -= bomb.harm_value
            fruit_sprite_group.draw(screen)
            for hero in aihero_sprite_group:
                hero.draw(screen, dt)
            ourhero.draw(screen, dt)
            # --左上角顯示生命值
            pos_x = showText(screen, font, text=ourhero.hero_name+'(our):'+str(ourhero.health_value), color=cfg.YELLOW, position=[5, 5])
            for hero in aihero_sprite_group:
                pos_x, pos_y = pos_x+15, 5
                pos_x = showText(screen, font, text=hero.hero_name+'(ai):'+str(hero.health_value), color=cfg.YELLOW, position=[pos_x, pos_y])
            # --我方玩家生命值小于等于0/電腦方玩家生命值均小于等于0則判斷游戲結(jié)束
            if ourhero.health_value <= 0:
                is_win_flag = False
                break
            for hero in aihero_sprite_group:
                if hero.health_value <= 0:
                    aihero_sprite_group.remove(hero)
            if len(aihero_sprite_group) == 0:
                is_win_flag = True
                break
            pygame.display.update()
            clock.tick(cfg.FPS)
        if is_win_flag:
            Interface(screen, cfg, mode='game_switch')
        else:
            break
    Interface(screen, cfg, mode='game_end')
 
 
'''run'''
if __name__ == '__main__':
    while True:
        main(cfg)

三、效果展示

1.游戲界面

都是有音樂背景的啦!

2.游戲開始

3.游戲結(jié)束

以上就是Python Pygame實戰(zhàn)之超級炸彈人游戲的實現(xiàn)的詳細(xì)內(nèi)容,更多關(guān)于Python Pygame炸彈人游戲的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python?圖形繪制詳細(xì)代碼(一)

    Python?圖形繪制詳細(xì)代碼(一)

    這篇文章主要介紹了Python?圖形繪制詳細(xì)代碼,文章主要從最簡單圖像的開始,在同一圖上繪制兩條或多條線一些簡單操作,想了解的小伙伴可以學(xué)習(xí)一下,希望對你的學(xué)習(xí)有所幫助
    2021-12-12
  • Python實戰(zhàn)之實現(xiàn)康威生命游戲

    Python實戰(zhàn)之實現(xiàn)康威生命游戲

    這篇文章主要介紹了Python實戰(zhàn)之實現(xiàn)康威生命游戲,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • python實現(xiàn)多線程的方式及多條命令并發(fā)執(zhí)行

    python實現(xiàn)多線程的方式及多條命令并發(fā)執(zhí)行

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)多線程的方式及多條命令并發(fā)執(zhí)行,感興趣的小伙伴們可以參考一下
    2016-06-06
  • 利用Python進(jìn)行全面的GPU環(huán)境檢測與分析

    利用Python進(jìn)行全面的GPU環(huán)境檢測與分析

    這篇文章主要為大家詳細(xì)介紹了如何使用Python編寫一個強(qiáng)大的 GPU 診斷工具,它能夠全面收集和分析系統(tǒng)中的 GPU 相關(guān)信息,感興趣的可以了解下
    2025-01-01
  • Pandas如何操作Excel

    Pandas如何操作Excel

    Pandas提供了便捷的方法來處理Excel文件,主要通過pandas.read_excel()和DataFrame.to_excel()函數(shù),這些函數(shù)支持多種參數(shù)來定制讀取和寫入的行為,包括文件路徑、工作表名稱、數(shù)據(jù)類型、日期解析等
    2025-01-01
  • python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題

    python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題

    這篇文章主要介紹了python 解決數(shù)據(jù)庫寫入時float自動變?yōu)檎麛?shù)的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python學(xué)習(xí)必備知識匯總

    python學(xué)習(xí)必備知識匯總

    這篇文章主要介紹了python學(xué)習(xí)必備知識匯總的相關(guān)資料,需要的朋友可以參考下
    2017-09-09
  • Django中和時區(qū)相關(guān)的安全問題詳解

    Django中和時區(qū)相關(guān)的安全問題詳解

    這篇文章主要給大家介紹了關(guān)于Django中和時區(qū)相關(guān)的安全問題的相關(guān)資料,需要的朋友可以參考下
    2020-10-10
  • Python中11種NumPy高級操作總結(jié)

    Python中11種NumPy高級操作總結(jié)

    熬夜整了了11種Numpy的高級操作,每一種都有參數(shù)解釋與小例子輔助說明。文中的示例代碼講解詳細(xì),感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧
    2022-05-05
  • Python Requests訪問網(wǎng)絡(luò)更方便

    Python Requests訪問網(wǎng)絡(luò)更方便

    這篇文章主要介紹了使用Python Requests訪問網(wǎng)絡(luò),Python Requests 是一個非常強(qiáng)大的 HTTP 客戶端庫,用于發(fā)送 HTTP 請求,獲取響應(yīng)等操作,通過這個庫,你可以輕松地與 Web 服務(wù)進(jìn)行交互,實現(xiàn)各種網(wǎng)絡(luò)請求
    2024-01-01

最新評論

武穴市| 安乡县| 会宁县| 红安县| 通化市| 铁岭市| 沾益县| 灵宝市| 中西区| 稷山县| 安图县| 措勤县| 桦南县| 海南省| 南召县| 康定县| 兴义市| 清徐县| 绥芬河市| 温泉县| 雷州市| 中西区| 高阳县| 惠来县| 泾源县| 漳平市| 云安县| 四会市| 成都市| 内江市| 威远县| 河南省| 天等县| 德兴市| 如东县| 霍山县| 东乡县| 闽侯县| 林芝县| 玉山县| 额敏县|