炸弹人小游戏代码开源(python)

♥️作者:小刘在C站

♥️个人主页:小刘主页

♥️每天分享云计算网络运维课堂笔记,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!

♥️夕阳下,是最美的绽放,当遵从一心,踏浪而往,纵千山万水, 也要抵达。

目录

一.什么是python

二.游戏代码效果呈现

  三.游戏主代码

四.cfg

五.README

六.requirements


一.什么是python

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。   Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, [ 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码

二.游戏代码效果呈现

炸弹人小游戏代码开源(python)

  三.游戏主代码

”’

Function:

    炸弹人小游戏

”’

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’)

    # 游戏主循环

    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

        # -主循环

        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:

                    # –爆炸火焰范围内的Hero生命值将持续下降

                    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则判断游戏结束

            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)

四.cfg

”’配置文件”’

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’]]

”’爆炸和发射路径”’

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)

五.README

# Introduction

https://mp.weixin.qq.com/s/XzB_cJMFEtz6p_MvqiaCrA

# Environment

“`

OS: Windows10

Python: Python3.5+(have installed necessary dependencies)

“`

# Usage

“`

Step1:

pip install -r requirements.txt

Step2:

run “python Game19.py”

“`

# Game Display

![giphy](demonstration/running.gif)

六.requirements

pygame

本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/1ff26b083b.html