Python Pygame如何实现超级炸弹人游戏
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章给大家分享的是有关Python Pygame如何实现超级炸弹人游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、环境安装1.素材(图片)2.环境安装本文是由Py
千家信息网最后更新 2025年01月16日Python Pygame如何实现超级炸弹人游戏
这篇文章给大家分享的是有关Python Pygame如何实现超级炸弹人游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
一、环境安装
1.素材(图片)
2.环境安装
本文是由Pygame写的小游戏。
涉及运行环境:Python3.7、Pycharm社区版、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']]'''爆炸和发射路径'''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 sysimport cfgimport randomimport pygamefrom 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)
三、效果展示
1.游戏界面
都是有音乐背景的啦!
2.游戏开始
3.游戏结束
感谢各位的阅读!关于"Python Pygame如何实现超级炸弹人游戏"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
路径
炸弹
生命
模块
水果
环境
电脑
背景
主程序
内容
地图
大小
小游戏
屏幕
文件
更多
玩家
界面
篇文章
循环
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
深圳二手服务器回收单价
医疗软件开发优先级
广州荔枝网络技术公司上市
四川网络安全技能学校
安卓软件开发怎样收费
保护网络安全问题的对策
隐形正畸软件开发
12.9网络安全周主题
闵行区大型软件开发要多少钱
江苏什么是网络技术基础
北京安卓软件开发服务费
我国首部关于网络安全
大的表格怎么用数据库处理
二级网络安全等级软硬件要求
python寻找代理服务器
福州广域网络技术有限公司
软件开发公司市场总监简介
网络技术和经济发展的关系
视频加速服务器下载
深圳晨海电脑网络技术协助中心
如何访问服务器上的数据库
驾驶证被监控列入数据库
银行网络安全责任书范文
信息网络安全许可
hns的服务器
网络安全政治心得500字
江西高科技软件开发材料
网络安全奖学金获奖提名人数
珠海软件开发市场价
河北管理系统软件开发