- B站主页:https://space.bilibili.com/1707990930
- 欢迎点赞收藏评论如有错误请指正!
- Python&Java领域博主
- 你们的支持是我最大的动力
大家好,我是爱丽
这个Python中的马里奥游戏代码是用PyGame库设计的图形用户界面(GUI)。
谈到游戏的玩法,这是一个单人游戏,玩家(马里奥)必须躲避从龙身上发出的火球。
每一关都有更多的困难,一旦关卡增加,区域就会变得越来越小。在这个超级马里奥Python教程中,你可以学习如何用Python制作超级马里奥游戏。
文章目录- Python 中的马里奥游戏:项目信息
- 第一步:项目搭建
- Step 1、新建一个项目
- Step 2、创建一个 python 文件
- Step 3、命名你的 Python 文件
- Step 4、实际代码。
- 导入模块
- 开始游戏的代码部分
- 游戏级别
- 主要模块
- 游戏结束
- 完整的源代码
- 》》》CSDN直播课&解答群《《《
要开始用Python创建一个马里奥游戏,请确保你的电脑中安装了PyCharm IDE。
顺便说一下,如果你是Python编程的新手,你不知道什么是可以使用的Python IDE,我这里有一个适合你的零基础入门到精通的教程。可以添加CSDN官方微信免费获取:
Python 中的马里奥游戏:项目信息首先打开Pycharm IDE,然后创建一个 “项目名称”,创建好项目名称后点击 "创建 "按钮。
创建项目名称后,“右键单击”您的项目名称,然后单击“新建”,然后单击“ python 文件”。
第三次创建python文件后,在点击“输入”之后命名你的python文件。
你可以自由复制下面给出的代码并下载下面的完整源代码。
导入模块import pygame import sys
给出的代码正在导入所有模块。
开始游戏的代码部分def start_game(): canvas.fill(BLACK) start_img = pygame.image.load('start.png') start_img_rect = start_img.get_rect() start_img_rect.center = (WINDOW_WIDTH/2, WINDOW_HEIGHT/2) canvas.blit(start_img, start_img_rect) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() game_loop() pygame.display.update()
在这个模块中,这是超级马里奥的开始游戏部分。
输出:
def check_level(SCORE): global LEVEL if SCORE in range(0, 10): cactus_img_rect.bottom = 50 fire_img_rect.top = WINDOW_HEIGHT - 50 LEVEL = 1 elif SCORE in range(10, 20): cactus_img_rect.bottom = 100 fire_img_rect.top = WINDOW_HEIGHT - 100 LEVEL = 2 elif SCORE in range(20, 30): cactus_img_rect.bottom = 150 fire_img_rect.top = WINDOW_HEIGHT - 150 LEVEL = 3 elif SCORE > 30: cactus_img_rect.bottom = 200 fire_img_rect.top = WINDOW_HEIGHT - 200 LEVEL = 4
如果你通过给定级别的挑战,则在此模块中这是游戏的级别。
主要模块def game_loop(): while True: global dragon dragon = Dragon() flames = Flames() mario = Mario() add_new_flame_counter = 0 global SCORE SCORE = 0 global HIGH_SCORE flames_list = [] pygame.mixer.music.load('mario_theme.wav') pygame.mixer.music.play(-1, 0.0) while True: canvas.fill(BLACK) check_level(SCORE) dragon.update() add_new_flame_counter += 1 if add_new_flame_counter == ADD_NEW_FLAME_RATE: add_new_flame_counter = 0 new_flame = Flames() flames_list.append(new_flame) for f in flames_list: if f.flames_img_rect.left <= 0: flames_list.remove(f) SCORE += 1 f.update() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: mario.up = True mario.down = False elif event.key == pygame.K_DOWN: mario.down = True mario.up = False if event.type == pygame.KEYUP: if event.key == pygame.K_UP: mario.up = False mario.down = True elif event.key == pygame.K_DOWN: mario.down = True mario.up = False score_font = font.render('Score:'+str(SCORE), True, GREEN) score_font_rect = score_font.get_rect() score_font_rect.center = (200, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(score_font, score_font_rect) level_font = font.render('Level:'+str(LEVEL), True, GREEN) level_font_rect = level_font.get_rect() level_font_rect.center = (500, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(level_font, level_font_rect) top_score_font = font.render('Top Score:'+str(topscore.high_score),True,GREEN) top_score_font_rect = top_score_font.get_rect() top_score_font_rect.center = (800, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(top_score_font, top_score_font_rect) canvas.blit(cactus_img, cactus_img_rect) canvas.blit(fire_img, fire_img_rect) mario.update() for f in flames_list: if f.flames_img_rect.colliderect(mario.mario_img_rect): game_over() if SCORE > mario.mario_score: mario.mario_score = SCORE pygame.display.update() CLOCK.tick(FPS)
在这个模块中,这是游戏的主要模块,由布尔值和其他循环和条件组成。
游戏结束def game_over(): pygame.mixer.music.stop() music = pygame.mixer.Sound('mario_dies.wav') music.play() topscore.top_score(SCORE) game_over_img = pygame.image.load('end.png') game_over_img_rect = game_over_img.get_rect() game_over_img_rect.center = (WINDOW_WIDTH/2, WINDOW_HEIGHT/2) canvas.blit(game_over_img, game_over_img_rect) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() music.stop() game_loop() pygame.display.update()
输出界面:
import pygame import sys pygame.init() WINDOW_WIDTH = 1200 WINDOW_HEIGHT = 600 FPS = 20 BLACK = (0, 0, 0) GREEN = (0, 255, 0) ADD_NEW_FLAME_RATE = 25 cactus_img = pygame.image.load('cactus_bricks.png') cactus_img_rect = cactus_img.get_rect() cactus_img_rect.left = 0 fire_img = pygame.image.load('fire_bricks.png') fire_img_rect = fire_img.get_rect() fire_img_rect.left = 0 CLOCK = pygame.time.Clock() font = pygame.font.SysFont('forte', 20) canvas = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT)) pygame.display.set_caption('Mario') class Topscore: def __init__(self): self.high_score = 0 def top_score(self, score): if score > self.high_score: self.high_score = score return self.high_score topscore = Topscore() class Dragon: dragon_velocity = 10 def __init__(self): self.dragon_img = pygame.image.load('dragon.png') self.dragon_img_rect = self.dragon_img.get_rect() self.dragon_img_rect.width -= 10 self.dragon_img_rect.height -= 10 self.dragon_img_rect.top = WINDOW_HEIGHT/2 self.dragon_img_rect.right = WINDOW_WIDTH self.up = True self.down = False def update(self): canvas.blit(self.dragon_img, self.dragon_img_rect) if self.dragon_img_rect.top <= cactus_img_rect.bottom: self.up = False self.down = True elif self.dragon_img_rect.bottom >= fire_img_rect.top: self.up = True self.down = False if self.up: self.dragon_img_rect.top -= self.dragon_velocity elif self.down: self.dragon_img_rect.top += self.dragon_velocity class Flames: flames_velocity = 20 def __init__(self): self.flames = pygame.image.load('fireball.png') self.flames_img = pygame.transform.scale(self.flames, (20, 20)) self.flames_img_rect = self.flames_img.get_rect() self.flames_img_rect.right = dragon.dragon_img_rect.left self.flames_img_rect.top = dragon.dragon_img_rect.top + 30 def update(self): canvas.blit(self.flames_img, self.flames_img_rect) if self.flames_img_rect.left > 0: self.flames_img_rect.left -= self.flames_velocity class Mario: velocity = 10 def __init__(self): self.mario_img = pygame.image.load('maryo.png') self.mario_img_rect = self.mario_img.get_rect() self.mario_img_rect.left = 20 self.mario_img_rect.top = WINDOW_HEIGHT/2 - 100 self.down = True self.up = False def update(self): canvas.blit(self.mario_img, self.mario_img_rect) if self.mario_img_rect.top <= cactus_img_rect.bottom: game_over() if SCORE > self.mario_score: self.mario_score = SCORE if self.mario_img_rect.bottom >= fire_img_rect.top: game_over() if SCORE > self.mario_score: self.mario_score = SCORE if self.up: self.mario_img_rect.top -= 10 if self.down: self.mario_img_rect.bottom += 10 def game_over(): pygame.mixer.music.stop() music = pygame.mixer.Sound('mario_dies.wav') music.play() topscore.top_score(SCORE) game_over_img = pygame.image.load('end.png') game_over_img_rect = game_over_img.get_rect() game_over_img_rect.center = (WINDOW_WIDTH/2, WINDOW_HEIGHT/2) canvas.blit(game_over_img, game_over_img_rect) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() music.stop() game_loop() pygame.display.update() def start_game(): canvas.fill(BLACK) start_img = pygame.image.load('start.png') start_img_rect = start_img.get_rect() start_img_rect.center = (WINDOW_WIDTH/2, WINDOW_HEIGHT/2) canvas.blit(start_img, start_img_rect) while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: pygame.quit() sys.exit() game_loop() pygame.display.update() def check_level(SCORE): global LEVEL if SCORE in range(0, 10): cactus_img_rect.bottom = 50 fire_img_rect.top = WINDOW_HEIGHT - 50 LEVEL = 1 elif SCORE in range(10, 20): cactus_img_rect.bottom = 100 fire_img_rect.top = WINDOW_HEIGHT - 100 LEVEL = 2 elif SCORE in range(20, 30): cactus_img_rect.bottom = 150 fire_img_rect.top = WINDOW_HEIGHT - 150 LEVEL = 3 elif SCORE > 30: cactus_img_rect.bottom = 200 fire_img_rect.top = WINDOW_HEIGHT - 200 LEVEL = 4 def game_loop(): while True: global dragon dragon = Dragon() flames = Flames() mario = Mario() add_new_flame_counter = 0 global SCORE SCORE = 0 global HIGH_SCORE flames_list = [] pygame.mixer.music.load('mario_theme.wav') pygame.mixer.music.play(-1, 0.0) while True: canvas.fill(BLACK) check_level(SCORE) dragon.update() add_new_flame_counter += 1 if add_new_flame_counter == ADD_NEW_FLAME_RATE: add_new_flame_counter = 0 new_flame = Flames() flames_list.append(new_flame) for f in flames_list: if f.flames_img_rect.left <= 0: flames_list.remove(f) SCORE += 1 f.update() for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() if event.type == pygame.KEYDOWN: if event.key == pygame.K_UP: mario.up = True mario.down = False elif event.key == pygame.K_DOWN: mario.down = True mario.up = False if event.type == pygame.KEYUP: if event.key == pygame.K_UP: mario.up = False mario.down = True elif event.key == pygame.K_DOWN: mario.down = True mario.up = False score_font = font.render('Score:'+str(SCORE), True, GREEN) score_font_rect = score_font.get_rect() score_font_rect.center = (200, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(score_font, score_font_rect) level_font = font.render('Level:'+str(LEVEL), True, GREEN) level_font_rect = level_font.get_rect() level_font_rect.center = (500, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(level_font, level_font_rect) top_score_font = font.render('Top Score:'+str(topscore.high_score),True,GREEN) top_score_font_rect = top_score_font.get_rect() top_score_font_rect.center = (800, cactus_img_rect.bottom + score_font_rect.height/2) canvas.blit(top_score_font, top_score_font_rect) canvas.blit(cactus_img, cactus_img_rect) canvas.blit(fire_img, fire_img_rect) mario.update() for f in flames_list: if f.flames_img_rect.colliderect(mario.mario_img_rect): game_over() if SCORE > mario.mario_score: mario.mario_score = SCORE pygame.display.update() CLOCK.tick(FPS) start_game()》》》CSDN直播课&解答群《《《
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)