导语哈喽!哈喽!我是木木子,今日游戏更新——超级玛丽华丽上线啦!\"超级玛丽\"有多少人还记得这款经典游戏?对于90、00后应该不大熟悉,但多多少少印象中见过那个戴帽子的大胡子穿着背带裤的马里奥!
这款游戏1985年发售,因上手简单、情节有趣等因素迅速走红!
陪伴70后、80后走过了青涩难忘的童年超级玛丽成了大家心目中的经典!如果你的童年也曾被魔性的灯~灯灯~灯~灯灯~灯洗脑那就接着来怀旧一番吧~今天木木子就带着大家自制一款超级玛丽游戏,还原度超高哦~还在等什么动动手就能拥有属于自己的\"超级玛丽\"游戏呢,赶快学起来吧~
正文嗯呐~写游戏计算机编程语言还是用的Pygame模块啦
1)准备中
1.1环境安装Python3、Pycharm、Pygame模块很多自带的模块等。模块安装统一用的豆瓣镜像源:
点安装我是https://pypi.douban.com/simple/模块名。
1.2图片素材背景音乐字体(可修改)
2)开始敲代码
2.1 运行程序:马里奥_level_1.py
#!/usr/bin/env python__author__=\'超级玛丽-源码基地:#959755565# \' \'\"这是一次为不另说明创造第一级超级马里奥兄弟的尝试\' \' \'导入系统从数据中导入py游戏作为pg。主导入主导入c profile if _ _ name _ _=\' _ _ main _ _ \' : main()pg。退出()系统。退出()
2.2 配置音乐文字等setup.py。
__author__=\'Python源码基地:#959755565#人\' \' \' \'此模块初始化显示并创建资源字典。\'\' \'将osimport pygame作为pgfrom导入。从导入工具。将常量导入为cori ginal _ CAPTION=c . ORIGINAL _ CAPTION OS。SDL附近视频_居中]=\' 1 \' pg。init()pg。事件。set _ allowed([pg。按键页KEYUP。页.退出])pg。展示。设置字幕(c . ORIGINAL _ CAPTION)屏幕=pg。展示。设置模式(屏幕大小)屏幕RECT=屏幕。get _ rect()font=tools。加载所有字体(操作系统。路径。加入(\'资源\',\'字体\'))音乐=工具。load _ all _ MUSIC(OS。路径。加入(\'资源\',\'音乐\'))GFX=工具。load _ all _ gfx(OS。路径。join(\'资源\',\'图形\')SFX=工具。load _ all _ SFX(OS。
2.3游戏音乐设置game_sound.py。
__author__=\'Python源码基地:#959755565# \'将简介及安装作为pgfrom导入。从导入设置。导入常量为\' class声音(对象): \' \' \'处理游戏的所有声音\' \' \' def __init__(self,overhead_info): \' \' \'初始化类\' \' \' self.sfx_dict=setup .SFX self.music_dict=setup .音乐自我。开销信息=开销信息本身。游戏信息=开销信息。GAME _ info自我。\' set _ MUSIC _ mixer()def set _ MUSIC _ mixer(self): \' \' \'设置音乐的级别‘’如果自我。开销_信息。状态==c .水平: pg。搅拌机。音乐。dict[\' main _ theme \']]pg。搅拌机。音乐。玩()自我。状态=c .正常的elif自我。开销_信息。状态==c .游戏
_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 pgfrom .. import setupfrom .. import constants as cclass Digit(pg.sprite.Sprite): \"\"\"Inpidual 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 130: score_list.pop(i) else: if (score.y - score.digit_list[0].rect.y) > 75: score_list.pop(i)
3)完整的游戏由于代码太多太多了如下图所示:所以还是放在文末自己拿完整的代码哈!
4)效果展示(仅部分)4.0 展示动态视频一波,完美。超级马里奥动态视频
4.1 Part 1 游戏运行界面——
4.2 Part 2 三条命——
4.3 Part 3 吃了蘑菇的马里奥——
总结虽然现在市面上冲击着各种游戏,但在我们心目中马里奥依旧是那个留着意式大胡子,上天遁地,无所不能,头顶金币,脚踏乌龟拯救公主的超级英雄!对游戏感兴趣的小伙伴儿赶紧自己动手造一个吧~
你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~
关注小编获取更多精彩内容!私信小编06获取源码吖!