人妖在线一区,国产日韩欧美一区二区综合在线,国产啪精品视频网站免费,欧美内射深插日本少妇

新聞動(dòng)態(tài)

Python完美還原超級(jí)瑪麗游戲附代碼與視頻

發(fā)布日期:2021-12-14 13:39 | 文章來源:gibhub

導(dǎo)語🎁

哈嘍!哈嘍!我是木木子😎,今日游戲更新——超級(jí)瑪麗華麗上線🎊啦!

“超級(jí)瑪麗”有多少人還記得這款經(jīng)典游戲?對(duì)于90、00后應(yīng)該不大熟悉,但多多少少印象中見過

那個(gè)戴帽子的大胡子穿著背帶褲的馬里奧🤣!

🎞這款游戲1985年發(fā)售,因上手簡單、情節(jié)有趣等因素迅速走紅!

陪伴70后、80后走過了青澀難忘的童年超級(jí)瑪麗成了大家心目中的經(jīng)典!

如果你的童年也曾被魔性的 燈~燈燈~燈~燈燈~燈洗腦那就接著來懷舊一番吧~

今天木木子就帶著大家自制一款超級(jí)瑪麗游戲,還原度超高哦~還在等什么動(dòng)動(dòng)手就能擁有屬于自

己的”超級(jí)瑪麗“游戲呢,趕快學(xué)起來吧👩🏻‍🤝‍👩🏻~

正文🎁

嗯吶~寫游戲Python還是用的Pygame模塊啦

1)準(zhǔn)備中🛒

1.1環(huán)境安裝🎑

Python3、Pycharm、Pygame模塊很多自帶的模塊等。

模塊安裝統(tǒng)一用的豆瓣鏡像源:​

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

1.2圖片素材+背景音樂+字體(可修改)🎑

2)開始敲代碼🛒

2.1 運(yùn)行程序:mario_level_1.py。🎑

#!/usr/bin/env python
__author__ = '超級(jí)瑪麗-源碼基地'
 
"""
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游戲音樂設(shè)置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取得的分?jǐn)?shù)🎑

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

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

​4)效果展示(僅部分)🛒

4.1 展示動(dòng)態(tài)視頻一波,完美。🎑

超級(jí)馬里奧動(dòng)態(tài)視頻

4.2 Part 1 游戲運(yùn)行界面——🎑

​4.3 Part 2 三條命——🎑

4.4 Part 3 吃了蘑菇的馬里奧——🎑

總結(jié)🎁

雖然現(xiàn)在市面上沖擊著各種游戲,但在我們心目中馬里奧依舊是那個(gè)留著意式大胡子,上天盾地,

無所不能,頭頂金幣,腳踏烏龜拯救公主的超級(jí)英雄!

對(duì)游戲感興趣的小伙伴兒趕緊自己動(dòng)手造一個(gè)吧~

你們的支持是我最大的動(dòng)力??!記得三連哦~mua 歡迎大家閱讀往期的文章哦~

關(guān)注小編獲取更多精彩內(nèi)容!

到此這篇關(guān)于Python完美還原超級(jí)瑪麗游戲附代碼與視頻的文章就介紹到這了,更多相關(guān)Python 超級(jí)瑪麗內(nèi)容請(qǐng)搜索本站以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持本站!

版權(quán)聲明:本站文章來源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。

相關(guān)文章

實(shí)時(shí)開通

自選配置、實(shí)時(shí)開通

免備案

全球線路精選!

全天候客戶服務(wù)

7x24全年不間斷在線

專屬顧問服務(wù)

1對(duì)1客戶咨詢顧問

在線
客服

在線客服:7*24小時(shí)在線

客服
熱線

400-630-3752
7*24小時(shí)客服服務(wù)熱線

關(guān)注
微信

關(guān)注官方微信
頂部