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

2023-11-13

♥️作者:小刘在C站

♥️个人主页:小刘主页

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

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

目录

一.什么是python

二.游戏代码效果呈现

  三.游戏主代码

四.cfg

五.README

六.requirements


一.什么是python

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

Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

炸弹人小游戏代码开源(python) 的相关文章

随机推荐

  • window MySQL5.6出现中文乱码,设置character_set_server 为 utf8

    使用该命令查看mysql字符集 SHOW VARIABLES LIKE character 发现character set server 为latin1 中文出现乱码 找到C ProgramData MySQL MySQL Server 5
  • 快来玩AI画图!StableDiffusion模型搭建与使用入门~

    1前言 最近AI很火 先是AI画图 然后就ChatGPT 后者我已经用了一段时间了 用来写作文挺不错的 但OpenAI屏蔽了中国IP 加上用户太多啥的 用起来没那么爽 但没办法全球只此一家 只能捏着鼻子用 而AI画图就不一样了 全是开源的
  • 强化学习应用简述---强化学习方向优秀科学家李玉喜博士创作

    强化学习 reinforcement learning 经过了几十年的研发 在一直稳定发展 最近取得了很多傲人的成果 后面会有越来越好的进展 强化学习广泛应用于科学 工程 艺术等领域 下面简单列举一些强化学习的成功案例 然后对强化学习做简介
  • ATT&CK实战系列-红队评估 (红日靶场3)Vulnstack三层网络域渗透靶场

    文章目录 环境配置 靶场介绍 靶场设置 外网渗透 信息收集 端口扫描 目录扫描 漏洞发现与利用 获取ssh账号密码 登录centos 提权 内网渗透 建立代理 内网信息收集 smb暴破 获取本地管理员密码 横向移动 使用psexec模块上线
  • OAK相机:启动报错X_LINK_DEVICE_NOT_FOUND

    OAK相机 启动报错X LINK DEVICE NOT FOUND 环境 报错 原因与解决 未设置 udev 规则 USB崩溃 排线接触不良或相机模块时钟干扰 环境 硬件 4 OV9782相机模组 OAK FFC 4P驱动模组 笔记本电脑
  • webpack之加载json数据格式

    webpack之加载json数据格式 webpack中可以加载的有用资源还有数据 如 json 文件 csv tsv xml 如果需要导入这些格式的数据 第一种方法是 我们需要两个 loader 去加载这些格式的数据 第二种方法是 我们可以
  • dronekit-sitl+MAVproxy+MissionPlanner进行无人机仿真

    以下教程为通过dronekit sitl MAVproxy和MissionPlanner进行无人机仿真 其中dronekit sitl用于模拟无人机 MAVproxy用于将无人机的数据转发到其他端口 MissionPlanner用于无人机的
  • css 背景图旋转 只让背景图片旋转180度的实现示例

    最近进行二次开发的时候有个图片用背景图要旋转一定角度 下图中如果只给 question添加背景通过CSS3的transfrom rotate肯定是会影响文字的展示 所以把背景图放到伪类中进行旋转就可以完美解决这个问题了 话不多说 上代码 d
  • Shell命令行下如何查找并替换多个文件中的字符

    如果你在shell命令行下 需要一种能快速查找并替换多个文件里字符的方法 那么下面这行命令你一定要记住或者收藏起来 它能帮到你的 find name html print0 xargs 0 perl pi e s SEARCHSTRING
  • 大数据技术——连接数据库报错:Cased by:javax.net.ssl.SSLHandshakeException:No appropriate protocol (protocol is dis

    问题 连接数据库报错 Cased by javax net ssl SSLHandshakeException No appropriate protocol protocol is disabled or cipher suites ar
  • css浮动改变鼠标箭头样式

    默认箭头样式 cursor default 系统默认箭头样式 手型 cursor pointer 手型 手型 cursor hand 手型 移动十字箭头 cursor move 移动十字箭头 帮助问号 cursor help 系统自带帮助问
  • 在openwrt上安装和配置git、ssh和python3

    简单记录在openwrt上安装配置git ssh和python3的流程 更新包管理器 openwrt 自带的包管理器是opkg 安装之前先更新一下 opkg update git和ssh一般放在一起配置 ssh配置完成才可以正常使用git
  • STM32的学习记录--2.WiFi模块的使用

    本次学习用的单片机是STM32F103C8T6 本次学习用的WiFi模块是ESP8266 本博客仅用于课余学习 不可商用 如有侵权 请告知我删除博客 谢谢配合 以下学习资料均在云盘 仅供学习交流 禁止用于商业用途 本文链接 个人博客 htt
  • 计算机视觉—— 相机标定

    目录 简介 一 相机模型 1 坐标系 2 坐标系变化 3 相机畸变模型 二 相机标定原理 三 张正友黑白棋盘格标定 2 1 算法思想 2 2 求解内参和外参的积 2 3 求解内参矩阵 2 4 求解外参矩阵 2 5 得到相机畸变矫正参数 2
  • 一文搞定Windows11+WSL+Pycharm开发环境及避坑

    WSL Pycharm开发环境搭建以及常见问题处理 Windows11 零 环境及背景 0 1 为什么需要这样的开发环境 0 2 什么是WSL 0 3 搭建环境 壹 Windows11 搭建WSL 1 1 启动 WSL 1 2 启动虚拟机平
  • Kibana忘记初始密码怎么办?

    在你elasticsearch的安装目录bin目录下面执行 bin gt elasticsearch reset password u elastic 执行结束之后就是下面初始化新的密码 注意 首次登录Kibana的登录名 elastic
  • Oracle数据库中神奇的dual表

    DUAL是oracle中非常神奇的一张表 有好多人用了很久oracle都不知道dual是干什么的 因为不是自己设计的表 一般处理的SQL也用不到 这里简单说下DUAL的用法 知道之后很多情况下DUAL查询还是很方便的 一 DUAL简介 1
  • Matlab:读取和处理大数据表格文本文件

    Matlab 读取和处理大数据表格文本文件 在实际的数据分析应用中 往往需要处理海量数据 针对大型数据文件 Matlab提供了快速高效的读取和处理工具 可以便捷地完成数据处理任务 本文将介绍如何使用Matlab读取和处理大型表格文本文件 第
  • c#控制台Console类

    c 控制台Console类 console表示控制台 是一个类 它封装了控制台的一些基本操作 输出 Console Write 输出一个或多个值后不换行 其后没有新行符 可以接着前面的字符继续写入 Console WriteLine 输出一
  • 炸弹人小游戏代码开源(python)

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 当遵从一心 踏浪而往 纵千山万水 也要抵达 目录 一 什么是python 二 游戏代码