返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python怎么实现超级玛丽游戏
  • 154
分享到

基于Python怎么实现超级玛丽游戏

2023-06-30 13:06:35 154人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

本文小编为大家详细介绍“基于python怎么实现超级玛丽游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现超级玛丽游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果演示基础源码1.基

本文小编为大家详细介绍“基于python怎么实现超级玛丽游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现超级玛丽游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

效果演示

基于Python怎么实现超级玛丽游戏

基础源码

1.基础设置(tools部分)

这个部分设置马里奥以及游戏中蘑菇等怪的的移动设置。

import osimport pygame as pgkeybinding = {    'action':pg.K_s,    'jump':pg.K_a,    'left':pg.K_LEFT,    'right':pg.K_RIGHT,    'down':pg.K_DOWN}class Control(object):    """Control class for entire project. Contains the game loop, and contains    the event_loop which passes events to States as needed. Logic for flipping    states is also found here."""    def __init__(self, caption):        self.screen = pg.display.get_surface()        self.done = False        self.clock = pg.time.Clock()        self.caption = caption        self.fps = 60        self.show_fps = False        self.current_time = 0.0        self.keys = pg.key.get_pressed()        self.state_dict = {}        self.state_name = None        self.state = None    def setup_states(self, state_dict, start_state):        self.state_dict = state_dict        self.state_name = start_state        self.state = self.state_dict[self.state_name]    def update(self):        self.current_time = pg.time.get_ticks()        if self.state.quit:            self.done = True        elif self.state.done:            self.flip_state()        self.state.update(self.screen, self.keys, self.current_time)    def flip_state(self):        previous, self.state_name = self.state_name, self.state.next        persist = self.state.cleanup()        self.state = self.state_dict[self.state_name]        self.state.startup(self.current_time, persist)        self.state.previous = previous    def event_loop(self):        for event in pg.event.get():            if event.type == pg.QUIT:                self.done = True            elif event.type == pg.KEYDOWN:                self.keys = pg.key.get_pressed()                self.toggle_show_fps(event.key)            elif event.type == pg.KEYUP:                self.keys = pg.key.get_pressed()            self.state.get_event(event)    def toggle_show_fps(self, key):        if key == pg.K_F5:            self.show_fps = not self.show_fps            if not self.show_fps:                pg.display.set_caption(self.caption)    def main(self):        """Main loop for entire program"""        while not self.done:            self.event_loop()            self.update()            pg.display.update()            self.clock.tick(self.fps)            if self.show_fps:                fps = self.clock.get_fps()                with_fps = "{} - {:.2f} FPS".fORMat(self.caption, fps)                pg.display.set_caption(with_fps)class _State(object):    def __init__(self):        self.start_time = 0.0        self.current_time = 0.0        self.done = False        self.quit = False        self.next = None        self.previous = None        self.persist = {}    def get_event(self, event):        pass    def startup(self, current_time, persistant):        self.persist = persistant        self.start_time = current_time    def cleanup(self):        self.done = False        return self.persist    def update(self, surface, keys, current_time):        passdef load_all_gfx(directory, colorkey=(255,0,255), accept=('.png', 'jpg', 'bmp')):    graphics = {}    for pic in os.listdir(directory):        name, ext = os.path.splitext(pic)        if ext.lower() in accept:            img = pg.image.load(os.path.join(directory, pic))            if img.get_alpha():                img = img.convert_alpha()            else:                img = img.convert()                img.set_colorkey(colorkey)            graphics[name]=img    return graphicsdef load_all_music(directory, accept=('.wav', '.mp3', '.ogg', '.mdi')):    songs = {}    for song in os.listdir(directory):        name,ext = os.path.splitext(song)        if ext.lower() in accept:            songs[name] = os.path.join(directory, song)    return songsdef load_all_fonts(directory, accept=('.ttf')):    return load_all_music(directory, accept)def load_all_sfx(directory, accept=('.wav','.mpe','.ogg','.mdi')):    effects = {}    for fx in os.listdir(directory):        name, ext = os.path.splitext(fx)        if ext.lower() in accept:            effects[name] = pg.mixer.Sound(os.path.join(directory, fx))    return effects

2.设置背景音乐以及场景中的文字(setup部分)

该部分主要设置场景中的背景音乐,以及字体的显示等设置。

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"))

3.设置游戏规则(load_screen)

from .. import setup, toolsfrom .. import constants as cfrom .. import game_soundfrom ..components import infoclass LoadScreen(tools._State):    def __init__(self):        tools._State.__init__(self)    def startup(self, current_time, persist):        self.start_time = current_time        self.persist = persist        self.game_info = self.persist        self.next = self.set_next_state()        info_state = self.set_overhead_info_state()        self.overhead_info = info.OverheadInfo(self.game_info, info_state)        self.sound_manager = game_sound.Sound(self.overhead_info)    def set_next_state(self):        """Sets the next state"""        return c.LEVEL1    def set_overhead_info_state(self):        """sets the state to send to the overhead info object"""        return c.LOAD_SCREEN    def update(self, surface, keys, current_time):        """Updates the loading screen"""        if (current_time - self.start_time) < 2400:            surface.fill(c.BLACK)            self.overhead_info.update(self.game_info)            self.overhead_info.draw(surface)        elif (current_time - self.start_time) < 2600:            surface.fill(c.BLACK)        elif (current_time - self.start_time) < 2635:            surface.fill((106, 150, 252))        else:            self.done = Trueclass GameOver(LoadScreen):    """A loading screen with Game Over"""    def __init__(self):        super(GameOver, self).__init__()    def set_next_state(self):        """Sets next state"""        return c.MAIN_MENU    def set_overhead_info_state(self):        """sets the state to send to the overhead info object"""        return c.GAME_OVER    def update(self, surface, keys, current_time):        self.current_time = current_time        self.sound_manager.update(self.persist, None)        if (self.current_time - self.start_time) < 7000:            surface.fill(c.BLACK)            self.overhead_info.update(self.game_info)            self.overhead_info.draw(surface)        elif (self.current_time - self.start_time) < 7200:            surface.fill(c.BLACK)        elif (self.current_time - self.start_time) < 7235:            surface.fill((106, 150, 252))        else:            self.done = Trueclass TimeOut(LoadScreen):    """Loading Screen with Time Out"""    def __init__(self):        super(TimeOut, self).__init__()    def set_next_state(self):        """Sets next state"""        if self.persist[c.LIVES] == 0:            return c.GAME_OVER        else:            return c.LOAD_SCREEN    def set_overhead_info_state(self):        """Sets the state to send to the overhead info object"""        return c.TIME_OUT    def update(self, surface, keys, current_time):        self.current_time = current_time        if (self.current_time - self.start_time) < 2400:            surface.fill(c.BLACK)            self.overhead_info.update(self.game_info)            self.overhead_info.draw(surface)        else:            self.done = True

4.设置游戏内菜单等(main_menu)

import pygame as pgfrom .. import setup, toolsfrom .. import constants as cfrom .. components import info, marioclass Menu(tools._State):    def __init__(self):        """Initializes the state"""        tools._State.__init__(self)        persist = {c.COIN_TOTAL: 0,                   c.SCORE: 0,                   c.LIVES: 3,                   c.TOP_SCORE: 0,                   c.CURRENT_TIME: 0.0,                   c.LEVEL_STATE: None,                   c.CAMERA_START_X: 0,                   c.MARIO_DEAD: False}        self.startup(0.0, persist)    def startup(self, current_time, persist):        """Called every time the game's state becomes this one.  Initializes        certain values"""        self.next = c.LOAD_SCREEN        self.persist = persist        self.game_info = persist        self.overhead_info = info.OverheadInfo(self.game_info, c.MAIN_MENU)        self.sprite_sheet = setup.GFX['title_screen']        self.setup_background()        self.setup_mario()        self.setup_cursor()    def setup_cursor(self):        """Creates the mushroom cursor to select 1 or 2 player game"""        self.cursor = pg.sprite.Sprite()        dest = (220, 358)        self.cursor.image, self.cursor.rect = self.get_image(            24, 160, 8, 8, dest, setup.GFX['item_objects'])        self.cursor.state = c.PLAYER1    def setup_mario(self):        """Places Mario at the beginning of the level"""        self.mario = mario.Mario()        self.mario.rect.x = 110        self.mario.rect.bottom = c.GROUND_HEIGHT    def setup_background(self):        """Setup the background image to blit"""        self.background = setup.GFX['level_1']        self.background_rect = self.background.get_rect()        self.background = pg.transform.scale(self.background,                                   (int(self.background_rect.width*c.BACKGROUND_MULTIPLER),                                    int(self.background_rect.height*c.BACKGROUND_MULTIPLER)))        self.viewport = setup.SCREEN.get_rect(bottom=setup.SCREEN_RECT.bottom)        self.image_dict = {}        self.image_dict['GAME_NAME_BOX'] = self.get_image(            1, 60, 176, 88, (170, 100), setup.GFX['title_screen'])    def get_image(self, x, y, width, height, dest, sprite_sheet):        """Returns images and rects to blit onto the screen"""        image = pg.Surface([width, height])        rect = image.get_rect()        image.blit(sprite_sheet, (0, 0), (x, y, width, height))        if sprite_sheet == setup.GFX['title_screen']:            image.set_colorkey((255, 0, 220))            image = pg.transform.scale(image,                                   (int(rect.width*c.SIZE_MULTIPLIER),                                    int(rect.height*c.SIZE_MULTIPLIER)))        else:            image.set_colorkey(c.BLACK)            image = pg.transform.scale(image,                                   (int(rect.width*3),                                    int(rect.height*3)))        rect = image.get_rect()        rect.x = dest[0]        rect.y = dest[1]        return (image, rect)    def update(self, surface, keys, current_time):        """Updates the state every refresh"""        self.current_time = current_time        self.game_info[c.CURRENT_TIME] = self.current_time        self.update_cursor(keys)        self.overhead_info.update(self.game_info)        surface.blit(self.background, self.viewport, self.viewport)        surface.blit(self.image_dict['GAME_NAME_BOX'][0],                     self.image_dict['GAME_NAME_BOX'][1])        surface.blit(self.mario.image, self.mario.rect)        surface.blit(self.cursor.image, self.cursor.rect)        self.overhead_info.draw(surface)    def update_cursor(self, keys):        """Update the position of the cursor"""        input_list = [pg.K_RETURN, pg.K_a, pg.K_s]        if self.cursor.state == c.PLAYER1:            self.cursor.rect.y = 358            if keys[pg.K_DOWN]:                self.cursor.state = c.PLAYER2            for input in input_list:                if keys[input]:                    self.reset_game_info()                    self.done = True        elif self.cursor.state == c.PLAYER2:            self.cursor.rect.y = 403            if keys[pg.K_UP]:                self.cursor.state = c.PLAYER1    def reset_game_info(self):        """Resets the game info in case of a Game Over and restart"""        self.game_info[c.COIN_TOTAL] = 0        self.game_info[c.SCORE] = 0        self.game_info[c.LIVES] = 3        self.game_info[c.CURRENT_TIME] = 0.0        self.game_info[c.LEVEL_STATE] = None        self.persist = self.game_info

5.main()

from . import setup,toolsfrom .states import main_menu,load_screen,level1from . import constants as cdef main():    """Add states to control here."""    run_it = tools.Control(setup.ORIGINAL_CAPTION)    state_dict = {c.MAIN_MENU: main_menu.Menu(),                  c.LOAD_SCREEN: load_screen.LoadScreen(),                  c.TIME_OUT: load_screen.TimeOut(),                  c.GAME_OVER: load_screen.GameOver(),                  c.LEVEL1: level1.Level1()}    run_it.setup_states(state_dict, c.MAIN_MENU)    run_it.main()

6.调用以上函数实现

import sysimport pygame as pgfrom 小游戏.超级玛丽.data.main import mainimport cProfileif __name__=='__main__':    main()    pg.quit()    sys.exit()

读到这里,这篇“基于Python怎么实现超级玛丽游戏”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网Python频道。

--结束END--

本文标题: 基于Python怎么实现超级玛丽游戏

本文链接: https://lsjlt.com/news/329217.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于Python怎么实现超级玛丽游戏
    本文小编为大家详细介绍“基于Python怎么实现超级玛丽游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现超级玛丽游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果演示基础源码1.基...
    99+
    2023-06-30
  • 基于Python实现超级玛丽游戏的示例代码
    目录效果演示基础源码1.基础设置(tools部分)2.设置背景音乐以及场景中的文字(setup部分)3.设置游戏规则(load_screen)4.设置游戏内菜单等(main_menu...
    99+
    2024-04-02
  • python快速实现简易超级玛丽小游戏
    《超级玛丽》是一款超级马里奥全明星的同人作品,也是任天堂公司出品的著名横版游戏。 《超级马里奥》是一款经典的像素冒险过关游戏。最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易、碧琪公主、奇诺...
    99+
    2023-09-01
    python 开发语言 qt pygame 小游戏开发
  • python游戏实战项目之童年经典超级玛丽
    导语 “超级玛丽”——有多少人还记得这款经典游戏?那个戴帽子的大胡子穿着背带裤的马里奥! 带您重温经典的回忆,超级马里奥拯救不开心!炫酷来袭。 如果您的童年,也曾被魔性的 灯~灯...
    99+
    2024-04-02
  • Java实现经典游戏超级玛丽的示例代码
    目录前言主要设计功能截图代码实现游戏主界面马里奥小怪总结前言 在你的童年记忆里,是否有一个蹦跳、顶蘑菇的小人? 如果你回忆起了它,你定然会觉得现在它幼稚、无聊,画面不漂亮,游戏不精彩...
    99+
    2024-04-02
  • C语言90后怀旧游戏超级玛丽的实现流程
    在你的童年记忆里,是否有一个蹦跳、顶蘑菇的小人已经被遗忘? 如果你回忆起了它,你定然会觉得现在它幼稚、无聊,画面不漂亮,游戏不精彩……但请你记住:这才是真正的游戏,它给了你无限的欢...
    99+
    2024-04-02
  • Python完美还原超级玛丽游戏附代码与视频
    目录导语🎁正文🎁1)准备中🛒1.1环境安装🎑1.2图片素材+背景音乐+字体(可修改)🎑2)开始敲代码&...
    99+
    2024-04-02
  • 保姆级教你用Python制作超级玛丽游戏(文末赠书)
    名字:阿玥的小东东 学习:Python、C/C++ 主页链接:阿玥的小东东的博客_CSDN博客-python&&c++高级知识,过年必备,C/C++知识讲解领域博主 目录 贪吃蛇游戏 弹珠游戏 超级玛丽(爷青回~)来源地址:htt...
    99+
    2023-09-22
    pygame python 游戏
  • 基于Python怎么实现射击小游戏
    本文小编为大家详细介绍“基于Python怎么实现射击小游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现射击小游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.游戏画面1.1开始1....
    99+
    2023-06-29
  • 基于Python实现五子棋游戏
    本文实例为大家分享了Python实现五子棋游戏的具体代码,供大家参考,具体内容如下 了解游戏的规则是我们首先需要做的事情,如果不知晓规则,那么我们肯定寸步难行。 五子棋游戏规则: 1...
    99+
    2024-04-02
  • 基于Python实现骰子小游戏
    目录导语一、环境准备 二、代码展示三、效果展示导语 哈喽!大家晚上好,我是木木子吖,很久没给大家更新游戏代码的类型啦~ 骰子,是现在娱乐场所最常见的一种玩乐项目。一般骰子分...
    99+
    2023-02-28
    Python实现骰子游戏 Python骰子游戏 Python游戏
  • 基于Python+Pygame怎么实现经典赛车游戏
    这篇文章主要介绍“基于Python+Pygame怎么实现经典赛车游戏”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于Python+Pygame怎么实现经典赛车游戏”文章能帮助大家解决问题。一、环境...
    99+
    2023-06-30
  • 基于JS怎么实现Flappy Bird游戏
    本文小编为大家详细介绍“基于JS怎么实现Flappy Bird游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于JS怎么实现Flappy Bird游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习...
    99+
    2023-06-30
  • 基于Python实现炸弹人小游戏
    目录前言效果展示开发工具环境搭建原理简介主要代码前言 今天用Python实现的是一个炸弹人小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6....
    99+
    2024-04-02
  • 基于Python如何实现围棋游戏
    本篇内容主要讲解“基于Python如何实现围棋游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python如何实现围棋游戏”吧!1.导入模块tkinter:ttk覆盖tkinter部分对象...
    99+
    2023-06-30
  • Python Pygame如何实现超级炸弹人游戏
    这篇文章给大家分享的是有关Python Pygame如何实现超级炸弹人游戏的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。一、环境安装1.素材(图片)2.环境安装本文是由Pygame写的小游戏。涉及运行环...
    99+
    2023-06-29
  • 基于JS怎么实现消消乐游戏
    这篇文章主要讲解了“基于JS怎么实现消消乐游戏”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于JS怎么实现消消乐游戏”吧!游戏的准备工作首先我们思考游戏的机制: 游戏有一个“棋盘”,是一个...
    99+
    2023-06-30
  • C++基于easyx怎么实现迷宫游戏
    本篇内容介绍了“C++基于easyx怎么实现迷宫游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果:#define _CRT_...
    99+
    2023-06-30
  • 基于Python怎么制作flappybird游戏
    本篇内容主要讲解“基于Python怎么制作flappybird游戏”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python怎么制作flappybird游戏”吧!开发工具**Python**...
    99+
    2023-06-30
  • 基于Python+Pygame实现经典赛车游戏
    目录导语一、环境安装二、代码展示1.主程序main.py2.地图设置maps.py三、效果展示1.游戏界面2.游戏运行中3.15分到手导语 哈喽!哈喽~我是木木子,很久没给大家更新游...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作