前言
如今的玩家们在无聊的时候会玩些什么游戏呢?
王者还是吃鸡是最多的选择。但在80、90年代的时候多是一些很简单的游戏:《超级玛丽》、《蜘蛛纸牌》、《魂斗罗》......
不知道还有人记得《炸弹人》这款怀旧的产品嘛?
啊这,不对不对,放错图片了下面这才是童年的正确打开方式
今天小编就带大家怀旧一波,来给大家用代码仿制一下童年大家玩儿过的《炸弹人》小游戏!
一、环境安装
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 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)
三、效果展示
1.游戏界面
都是有音乐背景的啦!
2.游戏开始
3.游戏结束
以上就是python pygame实战之超级炸弹人游戏的实现的详细内容,更多关于python pygame炸弹人游戏的资料请关注其它相关文章!