返回顶部
首页 > 资讯 > 后端开发 > Python >python快速实现简易超级玛丽小游戏
  • 590
分享到

python快速实现简易超级玛丽小游戏

python开发语言qtpygame小游戏开发 2023-09-01 10:09:18 590人浏览 八月长安

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

摘要

《超级玛丽》是一款超级马里奥全明星的同人作品,也是任天堂公司出品的著名横版游戏。 《超级马里奥》是一款经典的像素冒险过关游戏。最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易、碧琪公主、奇诺

《超级玛丽》是一款超级马里奥全明星的同人作品,也是任天堂公司出品的著名横版游戏。

《超级马里奥》是一款经典的像素冒险过关游戏。最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥路易碧琪公主奇诺比奥等等已成为任天堂的招牌人物。主角马里奥日文原名マリオ,英文译作Mario,在译成中文时因时代不同,华语圈地区不同而译作"马力欧""玛丽"等情况也确有存在。根据任天堂公布的官方中文译名和牛津词典,一般称为"马里奥"。 

完整代码如下:

import numpy as npimport random, sysimport pgzrunclass Brick(Actor):    def React(self):        if np.abs(mario.center[1]+mario.size[1]/2-self.center[1]+self.size[1]/2)<15: # z Gory            mario.vy = 0            mario.bottom = self.top        elif np.abs(mario.center[1]-mario.size[1]/2-self.center[1]-self.size[1]/2)<15: # z dolu            mario.vy = 0            mario.top = self.bottom        elif np.abs(mario.center[0]+mario.size[0]/2-self.center[0]+self.size[0]/2)<15: # z prawej            moveall(6)        elif np.abs(mario.center[0]-mario.size[0]/2-self.center[0]-self.size[0]/2)<15: # z lewej            moveall(-6)    def move(self):        passclass Coin(Actor):    def react(self):        if mario.colliderect(self):            #sounds.coin.play()            objs.remove(self)            mario.points=mario.points+1    def move(self):        passclass Block(Actor):    def react(self):        if np.abs(mario.center[1]+mario.size[1]/2-self.center[1]+self.size[1]/2)<15: # z gory            mario.vy = 0            mario.bottom = self.top        elif np.abs(mario.center[1]-mario.size[1]/2-self.center[1]-self.size[1]/2)<15: # z dolu            mario.vy = 0            mario.top = self.bottom            animate(self, pos=(self.center[0], -10000))        elif np.abs(mario.center[0]+mario.size[0]/2-self.center[0]+self.size[0]/2)<15: # z prawej            moveall(6)        elif np.abs(mario.center[0]-mario.size[0]/2-self.center[0]-self.size[0]/2)<15: # z lewej            moveall(-6)    def move(self):        passclass Mushroom(Actor):    def react(self):        if self.colliderect(mario):            mario.small=False            objs.remove(self)    def move(self):        for obj in objs:            if obj!=self and self.colliderect(obj) and not obj.image in ["bush.png","brick.png","hill.png"]:                self.dir=-self.dir        self.x=self.x+self.dir        uy=self.vy        self.vy=self.vy+2000.0*0.015        self.y=self.y+(uy+self.vy)*0.5*0.015        for obj in objs:            if self.colliderect(obj) and np.abs(self.center[1]+self.size[1]/2-obj.center[1]+obj.size[1]/2)<15:                self.vy = 0                self.bottom = obj.topclass Question(Actor):    def react(self):        if np.abs(mario.center[1]+mario.size[1]/2-self.center[1]+self.size[1]/2)<15: # z gory            mario.vy = 0            mario.bottom = self.top        elif np.abs(mario.center[1]-mario.size[1]/2-self.center[1]-self.size[1]/2)<15: # z dolu            mario.vy = 0            mario.top = self.bottom            if self.image=="question.png":                self.image = "question2.png"                objs.append(Mushroom("mushroom.png",(self.center[0],self.center[1]-50)))                objs[-1].dir=1                objs[-1].vy=0                animate(objs[-1],pos=(self.center[0],self.center[1]-objs[-1].size[1]+2))        elif np.abs(mario.center[0]+mario.size[0]/2-self.center[0]+self.size[0]/2)<15: # z prawej            moveall(6)        elif np.abs(mario.center[0]-mario.size[0]/2-self.center[0]-self.size[0]/2)<15: # z lewej            moveall(-6)    def move(self):        passclass Cloud(Actor):    def react(self):        pass    def move(self):        self.x=(self.x-1)%7000class Monster(Actor):    def react(self):        if np.abs(mario.center[1]+mario.size[1]/2-self.center[1]+self.size[1]/2)<15: # z gory            mario.vy = 0            mario.bottom = self.top            animate(self, pos=(self.right+50, HEIGHT+50))        elif np.abs(mario.center[1]-mario.size[1]/2-self.center[1]-self.size[1]/2)<15: # z dolu            mario.vy = 0            mario.top = self.bottom        elif np.abs(mario.center[0]+mario.size[0]/2-self.center[0]+self.size[0]/2)<15: # z prawej            if mario.small:                mario.dead = True                newgame()            else:                animate(self, pos=(self.right+50, HEIGHT+50))                mario.small=True        elif np.abs(mario.center[0]-mario.size[0]/2-self.center[0]-self.size[0]/2)<15: # z lewej            if mario.small:                mario.dead = True                newgame()            else:                animate(self, pos=(self.right+50, HEIGHT+50))                mario.small=True    def move(self):        for obj in objs:            if obj!=self and self.colliderect(obj) and not obj.image in ["bush.png","brick.png","hill.png"]:                self.dir=-self.dir        if self.dir==1 and self.image in ["turtle.png","turtleleft.png"]:            self.image = "turtle.png"        elif self.dir==-1 and self.image in ["turtle.png","turtleleft.png"]:            self.image = "turtleleft.png"        self.x=self.x+self.dirclass Bush(Actor):    def react(self):        pass    def move(self):        passdef newgame():    mario.pos=(200,HEIGHT-120)    mario.vy=0    mario.time=0    mario.dir="right"    mario.dead=False    mario.small=True    mario.s="s"    mario.points=0    mario.win=False    for i in range(len(objs)):        objs.remove(objs[0])    file = open(sys.path[0] + "\\level1.dat")    i = 0    for line in file:        for j in range(len(line)):            if line[j]=="O":                objs.append(Brick("brick.png",(j*32,32*i)))            elif line[j]=="B":                objs.append(Brick("brick2.png",(j*32,32*i)))            elif line[j]=="D":                objs.append(Block("block.png",(j*32,32*i)))            elif line[j]=="Q":                objs.append(Question("question.png",(j*32,32*i)))            elif line[j]=="c":                objs.append(Cloud("cloud.png",(j*32,32*i)))            elif line[j]=="h":                objs.append(Bush("hill.png",(j*32,32*i-22)))            elif line[j]=="b":                objs.append(Bush("bush.png",(j*32,32*i-12)))            elif line[j]=="E":                objs.append(Monster("enemy1.png",(j*32,32*i)))                objs[-1].dir = 1            elif line[j]=="T":                objs.append(Monster("turtle.png",(j*32,32*i)))                objs[-1].dir = 1            elif line[j]=="p":                objs.append(Coin("coin.png",(j*32,32*i)))        i = i + 1        music.play("theme.mp3")def draw():    screen.fill((148, 146, 255))    for obj in objs:        obj.draw()    mario.draw()    screen.draw.text(str(mario.points),color="black",midtop=(WIDTH/8*7,10),fontsize=70,shadow=(0,0))    if mario.win:        screen.draw.text("You win!",color="black",midtop=(WIDTH/2,10),fontsize=170,shadow=(0,0))def moveall(x):    if x>0:        if 0<=mario.x:            mario.x=mario.x-x        elif mario.x<0:            mario.x=0    else:        if 0<=mario.xWIDTH/2:            mario.x=WIDTH/2        elif mario.x>=WIDTH/2:            for obj in objs:                obj.x=obj.x+xdef move(dt):    if mario.dir=="right":        mario.image= mario.s + "mario.png"    else:        mario.image= mario.s + "marioleft.png"    uy=mario.vy    mario.vy=mario.vy+2000.0*dt    mario.y=mario.y+(uy+mario.vy)*0.5*dt    if keyboard.right:        if mario.small:            moveall(-2)        else:            moveall(-3)        mario.dir="right"        if mario.time<8:            mario.image= mario.s + "mariomove.png"        else:            mario.image= mario.s + "mariomove2.png"    if keyboard.left:        if mario.small:            moveall(2)        else:            moveall(3)        mario.dir="left"        if mario.time<8:            mario.image= mario.s + "mariomoveleft.png"        else:            mario.image= mario.s + "mariomoveleft2.png"    for obj in objs:        if  mario.colliderect(obj):            obj.react()    if mario.vy !=0 and mario.dir=="right":        mario.image= mario.s + "mariojump.png"    elif mario.vy !=0 and mario.dir=="left":        mario.image= mario.s + "mariojumpleft.png"    if mario.bottom>HEIGHT:        mario.dead = Truedef update(dt):    if mario.small:        mario.s="s"    else:        mario.s=""    mario.time=(mario.time+1)%16    if not mario.win:        move(dt)        for obj in objs:            obj.move()            if obj.image=="castle.png":                if np.abs(obj.center[0]-mario.center[0])<20:                    mario.win=True    if mario.dead:        #music.pause()        #sounds.gameover.play()        #from pygame import time        #mario.dead = False        #time.wait(3000)        newgame()def on_key_down(key):    if key==keys.SPACE and mario.vy==0:        mario.vy=-800HEIGHT=640WIDTH=1024TITLE="Mario"mario=Actor("smario.png",(200,HEIGHT-120))mario.vy=0mario.time=0mario.dir="right"mario.dead=Falsemario.small=Truemario.s="s"mario.points=0mario.win=Falseobjs = []newgame()pgzrun.go()

运行效果如下:

 关于项目运行的说明:

操作方式:键盘方向键左右移动,空格键跳跃

一、完整项目(游戏素材+代码)获取方式如下:

阿里云盘分享

其中music文件夹和sounds文件夹为空,music文件夹下为mp3格式的游戏背景音乐,可根据需要自行应用,放置在music文件夹下重命名为 theme 即可

如,直接在qq音乐中搜索下载游戏的经典背景音乐

sounds文件夹应该是吃金币的音效文件,暂未补充,可以将22行的代码注释以此消除吃金币时产生的闪退问题

 二、pyzrun导入失败问题

需要安装pyzero包,pip install pyzero即可

三、地图问题

地图根据项目资源中的level1.dat构建

c代表云朵,p代表金币,D代表可撞碎的方块,Q代表包含变大蘑菇的问号方块,B代表地图中帮助跳跃的不可撞碎的方块,h为小山背景,b为灌木丛背景,E为蘑菇怪敌人,T为乌龟敌人,O为地面

 对比图:

自行在level1.dat中最后部分增加的地图:

 

 

主要参考来源

Python编写超级玛丽竟如此简单?不信你试试_qianer的博客-CSDN博客

来源地址:https://blog.csdn.net/qq_38563206/article/details/127804007

--结束END--

本文标题: python快速实现简易超级玛丽小游戏

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

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

猜你喜欢
  • python快速实现简易超级玛丽小游戏
    《超级玛丽》是一款超级马里奥全明星的同人作品,也是任天堂公司出品的著名横版游戏。 《超级马里奥》是一款经典的像素冒险过关游戏。最早在红白机上推出,有多款后续作品,迄今多个版本合共销量已突破4000万套。其中的主角马里奥、路易、碧琪公主、奇诺...
    99+
    2023-09-01
    python 开发语言 qt pygame 小游戏开发
  • 基于Python怎么实现超级玛丽游戏
    本文小编为大家详细介绍“基于Python怎么实现超级玛丽游戏”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于Python怎么实现超级玛丽游戏”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。效果演示基础源码1.基...
    99+
    2023-06-30
  • 基于Python实现超级玛丽游戏的示例代码
    目录效果演示基础源码1.基础设置(tools部分)2.设置背景音乐以及场景中的文字(setup部分)3.设置游戏规则(load_screen)4.设置游戏内菜单等(main_menu...
    99+
    2024-04-02
  • 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快速实现简易贪吃蛇小游戏的示例代码
    贪吃蛇(也叫做贪食蛇)游戏是一款休闲益智类游戏,有PC和手机等多平台版本。既简单又耐玩。该游戏通过控制蛇头方向吃蛋,从而使得蛇变得越来越长。  贪吃蛇游戏最初为单机模式,后...
    99+
    2024-04-02
  • python实现简易猜数小游戏
    目录程序思想:具体代码:近几天闲着没事开始学了些python,看了看之前写过的代码,把写过的基础的几个程序写进博客,今天是第一个。一个可以说简单的不能再简单的小程序—&m...
    99+
    2024-04-02
  • python如何实现简易猜数小游戏
    这篇文章主要介绍“python如何实现简易猜数小游戏”,在日常操作中,相信很多人在python如何实现简易猜数小游戏问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python如何实现简易猜数小游戏”的疑惑有所...
    99+
    2023-06-26
  • C++实现简易的弹球小游戏
    本文实例为大家分享了C++实现弹球小游戏的具体代码,供大家参考,具体内容如下 操作说明:键盘A和D键控制左右移动,让球不要落下。 #include <graphics.h&...
    99+
    2024-04-02
  • Java实现简易五子棋小游戏
    本文实例为大家分享了Java实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 五子棋是一个简单小游戏,首先我们先想想五子棋都有什么东西,棋子,棋盘; 首先我们可以定义一个棋子...
    99+
    2024-04-02
  • java实现简易连连看小游戏
    本文实例为大家分享了java实现简易连连看小游戏的具体代码,供大家参考,具体内容如下 新手上路,分享一下 直接上代码 package linkgame; import javax...
    99+
    2024-04-02
  • Python实现简易五子棋游戏
    本文实例为大家分享了Python实现五子棋游戏的具体代码,供大家参考,具体内容如下 class CheckerBoard():     '''棋盘类'''     def __ini...
    99+
    2024-04-02
  • Java实现简易GUI贪吃蛇小游戏
    本文实例为大家分享了Java实现贪吃蛇小游戏的具体代码,供大家参考,具体内容如下 主启动类 import javax.swing.*; //主启动类 public class...
    99+
    2024-04-02
  • C++实现简易的五子棋小游戏
    本文实例为大家分享了C++实现简易五子棋小游戏的具体代码,供大家参考,具体内容如下 游戏界面: 这是一个简易的五子棋游戏,由c语言编写,每次循环输入两个位置的坐标,通过其奇偶性判...
    99+
    2024-04-02
  • Java实现三子棋小游戏简易版
    本文实例为大家分享了Java实现三子棋小游戏的具体代码,供大家参考,具体内容如下 游戏操作如图示: 原理: 主要借助3x3的二维数组 实现: 1、Main–主程序 pu...
    99+
    2024-04-02
  • C语言简易实现扫雷小游戏
    本文实例为大家分享了C语言实现扫雷小游戏的具体代码,供大家参考,具体内容如下 经典扫雷游戏规则: 当玩家点击游戏区域,该处周围的八个位置有几个雷(如果是角落则是周边三个位置雷的个数,...
    99+
    2024-04-02
  • python实现简易五子棋小游戏(三种方式)
    tkinter库:Python的标准Tk GUI工具包的接口 示例: from tkinter import *root = Tk()#你的ui代码Label(root,text = 'hello world!').pack()root.m...
    99+
    2023-09-07
    python numpy 开发语言 pygame visual studio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作