Python完美还原超级玛丽游戏附代码与视频

作者:顾木子吖 时间:2022-03-20 16:57:41 

导语🎁

哈喽!哈喽!我是木木子😎,今日游戏更新——超级玛丽华丽上线🎊啦!

“超级玛丽”有多少人还记得这款经典游戏?对于90、00后应该不大熟悉,但多多少少印象中见过

那个戴帽子的大胡子穿着背带裤的马里奥🤣!

Python完美还原超级玛丽游戏附代码与视频

🎞这款游戏1985年发售,因上手简单、情节有趣等因素迅速走红!

Python完美还原超级玛丽游戏附代码与视频

陪伴70后、80后走过了青涩难忘的童年超级玛丽成了大家心目中的经典!

如果你的童年也曾被魔性的 灯~灯灯~灯~灯灯~灯洗脑那就接着来怀旧一番吧~

今天木木子就带着大家自制一款超级玛丽游戏,还原度超高哦~还在等什么动动手就能拥有属于自

己的”超级玛丽“游戏呢,赶快学起来吧👩🏻‍🤝‍👩🏻~

Python完美还原超级玛丽游戏附代码与视频

正文🎁

嗯呐~写游戏Python还是用的Pygame模块啦

1)准备中🛒

1.1环境安装🎑

Python3、Pycharm、Pygame模块很多自带的模块等。

模块安装统一用的豆瓣镜像源:


pip install -i https://pypi.douban.com/simple/ +模块名。

1.2图片素材+背景音乐+字体(可修改)🎑

Python完美还原超级玛丽游戏附代码与视频

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)完整的游戏🛒

由于代码太多太多了如下图所示:所以还是放在文末自己拿完整的代码哈!

Python完美还原超级玛丽游戏附代码与视频

4)效果展示(仅部分)🛒

4.1 展示动态视频一波,完美。🎑

超级马里奥动态视频

4.2 Part 1 游戏运行界面——🎑

Python完美还原超级玛丽游戏附代码与视频

4.3 Part 2 三条命——🎑

Python完美还原超级玛丽游戏附代码与视频

4.4 Part 3 吃了蘑菇的马里奥——🎑

Python完美还原超级玛丽游戏附代码与视频

总结🎁

虽然现在市面上冲击着各种游戏,但在我们心目中马里奥依旧是那个留着意式大胡子,上天盾地,

无所不能,头顶金币,脚踏乌龟拯救公主的超级英雄!

对游戏感兴趣的小伙伴儿赶紧自己动手造一个吧~

Python完美还原超级玛丽游戏附代码与视频

你们的支持是我最大的动力!!记得三连哦~mua 欢迎大家阅读往期的文章哦~

关注小编获取更多精彩内容!

Python完美还原超级玛丽游戏附代码与视频

来源:https://blog.csdn.net/weixin_55822277/article/details/120846031

标签:Python,超级玛丽,游戏
0
投稿

猜你喜欢

  • 浅析python 通⽤爬⾍和聚焦爬⾍

    2021-06-13 00:14:23
  • python2 与 python3 实现共存的方法

    2023-06-13 23:56:29
  • CSS实现元素透明的那些事

    2009-09-07 12:22:00
  • python面试题之列表声明实例分析

    2022-01-10 12:46:51
  • phpmyadmin 数据导入导出问题

    2007-08-06 15:23:00
  • 将mater库中的系统存储过程批量生成*.sql文件 通用且非常实用

    2012-06-06 20:03:43
  • Oracle系统表外键的更名

    2010-07-26 13:07:00
  • Python3 sys.argv[ ]用法详解

    2021-08-03 00:16:29
  • 为什么python比较流行

    2023-06-26 02:24:22
  • Python函数基础实例详解【函数嵌套,命名空间,函数对象,闭包函数等】

    2023-12-10 15:45:59
  • python3 tkinter实现点击一个按钮跳出另一个窗口的方法

    2023-10-27 01:19:11
  • 触手生春【4.14】CSS与HTML结构

    2008-12-09 18:10:00
  • tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)

    2023-11-08 23:30:21
  • python设计微型小说网站(基于Django+Bootstrap框架)

    2023-03-15 01:54:18
  • 微信小程序开发之获取用户手机号码(php接口解密)

    2023-11-15 03:34:59
  • Python正则表达式re.search()用法详解

    2021-08-28 03:24:46
  • 在select语句中使用top的一些小技巧

    2009-03-12 12:21:00
  • jupyter notebook清除输出方式

    2021-05-08 02:51:13
  • Python流程控制 while循环实现解析

    2023-02-07 04:16:33
  • Pytes正确的配置使用日志功能

    2023-07-18 05:51:17
  • asp之家 网络编程 m.aspxhome.com