最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python实现超级玛丽游戏系列教程01玛丽登场

    正文概述 掘金(豆约翰)   2020-12-22   600

    配套视频教程

    配套视频教程

    项目代码

    项目代码

    最终效果

    Python实现超级玛丽游戏系列教程01玛丽登场

    搭建项目结构

    Python实现超级玛丽游戏系列教程01玛丽登场

    定义游戏常量

    SCREEN_HEIGHT = 600
    SCREEN_WIDTH = 800
    
    SCREEN_SIZE = (SCREEN_WIDTH,SCREEN_HEIGHT)
    
    ORIGINAL_CAPTION = "SuperMario"
    
    GFX = None
    
    ## COLORS ##
    
    #            R    G    B
    GRAY         = (100, 100, 100)
    NAVYBLUE     = ( 60,  60, 100)
    WHITE        = (255, 255, 255)
    RED          = (255,   0,   0)
    GREEN        = (  0, 255,   0)
    FOREST_GREEN = ( 31, 162,  35)
    BLUE         = (  0,   0, 255)
    YELLOW       = (255, 255,   0)
    ORANGE       = (255, 128,   0)
    PURPLE       = (255,   0, 255)
    CYAN         = (  0, 255, 255)
    BLACK        = (  0,   0,   0)
    NEAR_BLACK    = ( 19,  15,  48)
    COMBLUE      = (233, 232, 255)
    GOLD         = (255, 215,   0)
    
    BGCOLOR = WHITE
    
    SIZE_MULTIPLIER = 2.5
    
    

    初始化游戏窗口

    tools.py

    import pygame as pg
    from . import constants as c
    
    class Control(object):
        def __init__(self, caption):
            pg.init()
            pg.display.set_caption(c.ORIGINAL_CAPTION)
            self.screen = pg.display.set_mode(c.SCREEN_SIZE)
            self.done = False
            self.clock = pg.time.Clock()
            self.caption = caption
            self.fps = 60
            self.show_fps = True
            self.keys = pg.key.get_pressed()
    
        def update(self):
            pg.display.get_surface().fill(c.BGCOLOR)
    
        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()
    
        def toggle_show_fps(self, key):
            if key == pg.K_F5:
                self.show_fps = not self.show_fps
    
        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)
    
    

    mario_level_1.py

    import sys
    import pygame as pg
    
    from data import tools
    from data import constants as c
    
    if __name__=='__main__':
        control = tools.Control(c.ORIGINAL_CAPTION)
        control.main()
        pg.quit()
        sys.exit()
    

    玛丽登场

    level1.py

    import pygame as pg
    from .. import constants as c
    from .. components import mario
    
    class Level1:
        def __init__(self):
            self.startup()
    
        def startup(self):
            self.mario = mario.Mario()
            self.setup_mario_location()
            self.all_sprites = pg.sprite.Group(self.mario)
    
        def setup_mario_location(self):
            self.mario.rect.x = 80
            self.mario.rect.bottom = c.SCREEN_HEIGHT - self.mario.rect.height
    
        def update(self, surface):
            """Updates level"""
            pg.display.get_surface().fill(c.BGCOLOR)
            self.all_sprites.draw(surface)
    

    mario.py

    import pygame as pg
    from .. import constants as c
    
    class Mario(pg.sprite.Sprite):
        def __init__(self):
            pg.sprite.Sprite.__init__(self)
            self.sprite_sheet = c.GFX['mario_bros']
    
            self.right_frames = []
            self.left_frames = []
            self.frame_index = 0
            self.load_from_sheet()
            self.image = self.right_frames[self.frame_index]
            self.rect = self.image.get_rect()
    
        def get_image(self, x, y, width, height):
            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.SIZE_MULTIPLIER),
                                        int(rect.height * c.SIZE_MULTIPLIER)))
            return image
    
        def load_from_sheet(self):
            self.right_frames.append(
                self.get_image(178, 32, 12, 16))  # right
    

    tools.py修改 Python实现超级玛丽游戏系列教程01玛丽登场


    起源地下载网 » Python实现超级玛丽游戏系列教程01玛丽登场

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元