目录
- 导语
- 正文
- 1)准备中
- 1.1环境安装
- 1.2图片素材+背景音乐+字体(可修改)
- 2)开始敲代码
- 2.1 运行程序:mario_level_1.py。
- 2.2 配置音乐文字等setup.py。
- 2.3游戏音乐设置game_sound.py。
- 2.4取得的分数
- 3)完整的游戏
- 4)效果展示(仅部分)
- 4.1 展示动态视频一波,完美。
- 4.2 part 1 游戏运行界面——
- 4.3 part 2 三条命——
- 4.4 part 3 吃了蘑菇的马里奥——
- 总结
导语
哈喽!哈喽!我是木木子,今日游戏更新——超级玛丽华丽上线啦!
“超级玛丽”有多少人还记得这款经典游戏?对于90、00后应该不大熟悉,但多多少少印象中见过
那个戴帽子的大胡子穿着背带裤的马里奥🤣!
这款游戏1985年发售,因上手简单、情节有趣等因素迅速走红!
陪伴70后、80后走过了青涩难忘的童年超级玛丽成了大家心目中的经典!
如果你的童年也曾被魔性的 灯~灯灯~灯~灯灯~灯洗脑那就接着来怀旧一番吧~
今天木木子就带着大家自制一款超级玛丽游戏,还原度超高哦~还在等什么动动手就能拥有属于自
己的”超级玛丽“游戏呢,赶快学起来吧🤝~
正文
嗯呐~写游戏python还是用的pygame模块啦
1)准备中
1.1环境安装
python3、pycharm、pygame模块很多自带的模块等。
模块安装统一用的豆瓣镜像源:
pip install -i https://pypi.douban.com/simple/ +模块名。
1.2图片素材+背景音乐+字体(可修改)
2)开始敲代码
2.1 运行程序:mario_level_1.py。
#!/usr/bin/env python __author__ = '超级玛丽-源码基地' """ this is an attempt to recreate the first level of super mario bros for the nes. """ import sys import pygame as pg from data.main import main import cprofile if __name__=='__main__': main() pg.quit() sys.exit()
2.2 配置音乐文字等setup.py。
__author__ = 'python源码基地' """ this module initializes the display and creates dictionaries of resources. """ import os import pygame as pg from . import tools from .import constants as c original_caption = c.original_caption os.environ['sdl_video_centered'] = '1' pg.init() pg.event.set_allowed([pg.keydown, pg.keyup, pg.quit]) pg.display.set_caption(c.original_caption) screen = pg.display.set_mode(c.screen_size) screen_rect = screen.get_rect() fonts = tools.load_all_fonts(os.path.join("resources","fonts")) music = tools.load_all_music(os.path.join("resources","music")) gfx = tools.load_all_gfx(os.path.join("resources","graphics")) sfx = tools.load_all_sfx(os.path.join("resources","sound"))
2.3游戏音乐设置game_sound.py。
__author__ = 'python顾木子吖' import pygame as pg from . import setup from . import constants as c class sound(object): """handles all sound for the game""" def __init__(self, overhead_info): """initialize the class""" self.sfx_dict = setup.sfx self.music_dict = setup.music self.overhead_info = overhead_info self.game_info = overhead_info.game_info self.set_music_mixer() def set_music_mixer(self): """sets music for level""" if self.overhead_info.state == c.level: pg.mixer.music.load(self.music_dict['main_theme']) pg.mixer.music.play() self.state = c.normal elif self.overhead_info.state == c.game_over: pg.mixer.music.load(self.music_dict['game_over']) pg.mixer.music.play() self.state = c.game_over def update(self, game_info, mario): """updates sound object with game info""" self.game_info = game_info self.mario = mario self.handle_state() def handle_state(self): """handles the state of the soundn object""" if self.state == c.normal: if self.mario.dead: self.play_music('death', c.mario_dead) elif self.mario.invincible \ and self.mario.losing_invincibility == false: self.play_music('invincible', c.mario_invincible) elif self.mario.state == c.flagpole: self.play_music('flagpole', c.flagpole) elif self.overhead_info.time == 100: self.play_music('out_of_time', c.time_warning) elif self.state == c.flagpole: if self.mario.state == c.walking_to_castle: self.play_music('stage_clear', c.stage_clear) elif self.state == c.stage_clear: if self.mario.in_castle: self.sfx_dict['count_down'].play() self.state = c.fast_count_down elif self.state == c.fast_count_down: if self.overhead_info.time == 0: self.sfx_dict['count_down'].stop() self.state = c.world_clear elif self.state == c. time_warning: if pg.mixer.music.get_busy() == 0: self.play_music('main_theme_sped_up', c.sped_up_normal) elif self.mario.dead: self.play_music('death', c.mario_dead) elif self.state == c.sped_up_normal: if self.mario.dead: self.play_music('death', c.mario_dead) elif self.mario.state == c.flagpole: self.play_music('flagpole', c.flagpole) elif self.state == c.mario_invincible: if (self.mario.current_time - self.mario.invincible_start_timer) > 11000: self.play_music('main_theme', c.normal) elif self.mario.dead: self.play_music('death', c.mario_dead) elif self.state == c.world_clear: pass elif self.state == c.mario_dead: pass elif self.state == c.game_over: pass def play_music(self, key, state): """plays new music""" pg.mixer.music.load(self.music_dict[key]) pg.mixer.music.play() self.state = state def stop_music(self): """stops playback""" pg.mixer.music.stop()
2.4取得的分数
__author__ = '源码基地:#959755565#' import pygame as pg from .. import setup from .. import constants as c class digit(pg.sprite.sprite): """individual digit for score""" def __init__(self, image): super(digit, self).__init__() self.image = image self.rect = image.get_rect() class score(object): """scores that appear, float up, and disappear""" def __init__(self, x, y, score, flag_pole=false): self.x = x self.y = y if flag_pole: self.y_vel = -4 else: self.y_vel = -3 self.sprite_sheet = setup.gfx['item_objects'] self.create_image_dict() self.score_string = str(score) self.create_digit_list() self.flag_pole_score = flag_pole def create_image_dict(self): """creates the dictionary for all the number 图片 needed""" self.image_dict = {} image0 = self.get_image(1, 168, 3, 8) image1 = self.get_image(5, 168, 3, 8) image2 = self.get_image(8, 168, 4, 8) image4 = self.get_image(12, 168, 4, 8) image5 = self.get_image(16, 168, 5, 8) image8 = self.get_image(20, 168, 4, 8) image9 = self.get_image(32, 168, 5, 8) image10 = self.get_image(37, 168, 6, 8) image11 = self.get_image(43, 168, 5, 8) self.image_dict['0'] = image0 self.image_dict['1'] = image1 self.image_dict['2'] = image2 self.image_dict['4'] = image4 self.image_dict['5'] = image5 self.image_dict['8'] = image8 self.image_dict['3'] = image9 self.image_dict['7'] = image10 self.image_dict['9'] = image11 def get_image(self, x, y, width, height): """extracts image from sprite sheet""" image = pg.surface([width, height]).convert() rect = image.get_rect() image.blit(self.sprite_sheet, (0, 0), (x, y, width, height)) image.set_colorkey(c.black) image = pg.transform.scale(image, (int(rect.width*c.brick_size_multiplier), int(rect.height*c.brick_size_multiplier))) return image def create_digit_list(self): """creates the group of 图片 based on score received""" self.digit_list = [] self.digit_group = pg.sprite.group() for digit in self.score_string: self.digit_list.append(digit(self.image_dict[digit])) self.set_rects_for_images() def set_rects_for_images(self): """set the rect attributes for each image in self.image_list""" for i, digit in enumerate(self.digit_list): digit.rect = digit.image.get_rect() digit.rect.x = self.x + (i * 10) digit.rect.y = self.y def update(self, score_list, level_info): """updates score movement""" for number in self.digit_list: number.rect.y += self.y_vel if score_list: self.check_to_delete_floating_scores(score_list, level_info) if self.flag_pole_score: if self.digit_list[0].rect.y <= 120: self.y_vel = 0 def draw(self, screen): """draws score numbers onto screen""" for digit in self.digit_list: screen.blit(digit.image, digit.rect) def check_to_delete_floating_scores(self, score_list, level_info): """check if scores need to be deleted""" for i, score in enumerate(score_list): if int(score.score_string) == 1000: if (score.y - score.digit_list[0].rect.y) > 130: score_list.pop(i) else: if (score.y - score.digit_list[0].rect.y) > 75: score_list.pop(i)
3)完整的游戏
由于代码太多太多了如下图所示:所以还是放在文末自己拿完整的代码哈!
4)效果展示(仅部分)
4.1 展示动态视频一波,完美。
超级马里奥动态视频
4.2 part 1 游戏运行界面——
4.3 part 2 三条命——
4.4 part 3 吃了蘑菇的马里奥——
总结
虽然现在市面上冲击着各种游戏,但在我们心目中马里奥依旧是那个留着意式大胡子,上天盾地,
无所不能,头顶金币,脚踏乌龟拯救公主的超级英雄!
对游戏感兴趣的小伙伴儿赶紧自己动手造一个吧~
你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~
关注www.887551.com获取更多精彩内容!
到此这篇关于python完美还原超级玛丽游戏附代码与视频的文章就介绍到这了,更多相关python 超级玛丽内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
黄山市民网:https://www.huangshanshimin.com/