目录
- 导语🎁
- 正文🎁
- 1)准备中🛒
- 1.1环境安装🎑
- 1.2图片素材+背景音乐+字体(可修改)🎑
- 2.1 运行程序:mario_level_1.py。🎑
- 2.2 配置音乐文字等setup.py。🎑
- 2.3游戏音乐设置game_sound.py。🎑
- 2.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 ofSuper Mario Bros for the NES.\"\"\"import sysimport pygame as pgfrom data.main import mainimport cProfileif __name__==\'__main__\':main()pg.quit()sys.exit()
2.2 配置音乐文字等setup.py。🎑
__author__ = \'Python源码基地\'\"\"\"This module initializes the display and creates dictionaries of resources.\"\"\"import osimport pygame as pgfrom . import toolsfrom .import constants as cORIGINAL_CAPTION = c.ORIGINAL_CAPTIONos.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 pgfrom . import setupfrom . import constants as cclass Sound(object):\"\"\"Handles all sound for the game\"\"\"def __init__(self, overhead_info):\"\"\"Initialize the class\"\"\"self.sfx_dict = setup.SFXself.music_dict = setup.MUSICself.overhead_info = overhead_infoself.game_info = overhead_info.game_infoself.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.NORMALelif self.overhead_info.state == c.GAME_OVER:pg.mixer.music.load(self.music_dict[\'game_over\'])pg.mixer.music.play()self.state = c.GAME_OVERdef update(self, game_info, mario):\"\"\"Updates sound object with game info\"\"\"self.game_info = game_infoself.mario = marioself.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_DOWNelif self.state == c.FAST_COUNT_DOWN:if self.overhead_info.time == 0:self.sfx_dict[\'count_down\'].stop()self.state = c.WORLD_CLEARelif 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:passelif self.state == c.MARIO_DEAD:passelif self.state == c.GAME_OVER:passdef play_music(self, key, state):\"\"\"Plays new music\"\"\"pg.mixer.music.load(self.music_dict[key])pg.mixer.music.play()self.state = statedef stop_music(self):\"\"\"Stops playback\"\"\"pg.mixer.music.stop()
2.4取得的分数🎑
__author__ = \'源码基地:#959755565#\'import pygame as pgfrom .. import setupfrom .. import constants as cclass Digit(pg.sprite.Sprite):\"\"\"Individual digit for score\"\"\"def __init__(self, image):super(Digit, self).__init__()self.image = imageself.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 = xself.y = yif flag_pole:self.y_vel = -4else:self.y_vel = -3self.sprite_sheet = setup.GFX[\'item_objects\']self.create_image_dict()self.score_string = str(score)self.create_digit_list()self.flag_pole_score = flag_poledef 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\'] = image0self.image_dict[\'1\'] = image1self.image_dict[\'2\'] = image2self.image_dict[\'4\'] = image4self.image_dict[\'5\'] = image5self.image_dict[\'8\'] = image8self.image_dict[\'3\'] = image9self.image_dict[\'7\'] = image10self.image_dict[\'9\'] = image11def 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 imagedef 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.ydef update(self, score_list, level_info):\"\"\"Updates score movement\"\"\"for number in self.digit_list:number.rect.y += self.y_velif 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 = 0def 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 欢迎大家阅读往期的文章哦~
关注小编获取更多精彩内容!
到此这篇关于Python完美还原超级玛丽游戏附代码与视频的文章就介绍到这了,更多相关Python 超级玛丽内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- python游戏实战项目之童年经典超级玛丽
- python 实现超级玛丽游戏
- python实现超级玛丽游戏