欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2022年03月17日 09:10:47   作者:嗨!栗子同學  
如今的玩家們在無聊的時候會玩些什么游戲呢?王者還是吃雞是最多的選擇。但在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隨機行動
            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)的詳細內(nèi)容,更多關于Python Pygame炸彈人游戲的資料請關注腳本之家其它相關文章!

相關文章

  • 使用Python破解RAR文件密碼的代碼實例

    使用Python破解RAR文件密碼的代碼實例

    這篇文章主要介紹了使用Python破解RAR文件密碼的代碼實例,rar 壓縮文件資源又不少是被加密的,密碼通常也比較簡單,我們可以通過暴力破解的方式來獲取,通常耗時也比較小,需要的朋友可以參考下
    2023-11-11
  • python 創(chuàng)建彈出式菜單的實現(xiàn)代碼

    python 創(chuàng)建彈出式菜單的實現(xiàn)代碼

    這篇文章主要介紹了python 創(chuàng)建彈出式菜單的實現(xiàn)代碼的相關資料,需要的朋友可以參考下
    2017-07-07
  • Python實現(xiàn)多視頻畫面拼接

    Python實現(xiàn)多視頻畫面拼接

    這篇文章主要為大家詳細介紹了如何利用Python實現(xiàn)多視頻畫面拼接功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-10-10
  • Python3 shutil(高級文件操作模塊)實例用法總結(jié)

    Python3 shutil(高級文件操作模塊)實例用法總結(jié)

    在本篇文章里小編給大家整理的是一篇關于Python3 shutil實例用法內(nèi)容,有興趣的朋友們可以學習下。
    2020-02-02
  • python實現(xiàn)進制轉(zhuǎn)化的示例代碼

    python實現(xiàn)進制轉(zhuǎn)化的示例代碼

    本文主要介紹了python實現(xiàn)進制轉(zhuǎn)化的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • Python中最大最小賦值小技巧(分享)

    Python中最大最小賦值小技巧(分享)

    下面小編就為大家分享一篇Python中最大最小賦值小技巧,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • pyqt串口通信的項目實踐

    pyqt串口通信的項目實踐

    串口通信工業(yè)控制上面常用的,本文主要介紹了pyqt串口通信的項目實踐,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-12-12
  • 詳解分布式任務隊列Celery使用說明

    詳解分布式任務隊列Celery使用說明

    這篇文章主要介紹了詳解分布式任務隊列Celery使用說明,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-11-11
  • GPU狀態(tài)監(jiān)測?nvidia-smi?命令的用法詳解

    GPU狀態(tài)監(jiān)測?nvidia-smi?命令的用法詳解

    這篇文章主要介紹了GPU狀態(tài)監(jiān)測?nvidia-smi?命令的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Python特殊屬性property原理及使用方法解析

    Python特殊屬性property原理及使用方法解析

    這篇文章主要介紹了Python特殊屬性property原理及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10

最新評論