模块写入:就是单纯的写py文件,调用方法from 模块儿名 import *

本体源码

import pygame,sys#模块导入
from player import *#导入所有本模块的内容
from bullet import *#导入所有本模块的内容
from 乌龟模块 import  *
#将代码修改成面向对象的形式
pygame.init()#初始化
窗体=pygame.display.set_mode((1330,728))#背景多大窗口多大
FRAME_PER_SECONDS=21#每秒刷新率
pygame.display.set_caption("马里奥打乌龟")#标题
bg=pygame.image.load("素材/background.png")   #背景图片font=pygame.font.SysFont("Consolas",30,True)
#加载背景音乐
pygame.mixer.init()
pygame.mixer.music.load("素材/background.ogg")
pygame.mixer.music.set_volume(0.2)
pygame.mixer.music.play(-1,0)
#播放音效
def play_sound(src):sound=pygame.mixer.Sound(src)sound.play()def colliseion_check(a,b):#碰撞检测temp1=(b.x<=a.x+a.width<=b.x+b.width)temp2=(b.y<=a.y+a.height<=b.y+b.height)#检测x轴和y轴是否同时重合,就是命中的意思return temp1 and temp2#return表示从被调函数返回到主调函数继续进行def drawimge():#刷新玛丽奥角色窗体.blit(bg, (0, 0))  # 绘制背景图片text = font.render("Score:" + str(score), 1, (222, 255, 0))  # 渲染窗体.blit(text, (1000, 20))  # 绘制if player.life<=0:player.life=0life_text=font.render("Life:"+str(player.life),1,(255,0,0))#生命值字体窗体.blit(life_text, (20, 20))  # 绘制#循环绘制子弹以防消失you_win=font.render("YOU WIN",1,(0,0,255))you_lost=font.render("YOU LOST",1,(255,0,0))#敌人消灭if tortoise.life<=0:窗体.blit(you_win,(600,230))pygame.display.update()returnif player.life<=0:窗体.blit(you_lost, (600, 230))pygame.display.update()returnplayer.draw(窗体)tortoise.draw(窗体)for bullet in bullets:#子弹绘制,单独绘制会消失,循环绘制不消失,bullet.draw(窗体)#子弹绘制pygame.display.update()#刷新窗口
player=Player(50,600,70,90)
tortoise= Enemy(200,620,0,1330)#实例化乌龟
clock=pygame.time.Clock()#防止cpu占用率过高
run=True
bullets=[]
score=0#初始分数
while run:clock.tick(FRAME_PER_SECONDS)pygame.time.delay(20)for event in pygame.event.get():if event.type==pygame.QUIT:run=Falseif event.type==pygame.KEYDOWN:if event.key==pygame.K_SPACE:if player.left:direction=-1else:direction=1if len(bullets)<7:#列表限制,限制子弹的数量bullet=Bullet(int(player.x+player.width//2),int(player.y+player.height//2),direction=direction)bullets.append(bullet)#添加子弹到列表play_sound("素材/bullet.wav")#主角被打减生命值if colliseion_check(player,tortoise) or colliseion_check(tortoise,player):#如果重叠player.jump=Trueplayer.life-=1for bullet in bullets:if colliseion_check(bullet,tortoise) or colliseion_check(tortoise,bullet):#如果重叠bullets.remove(bullet)#列表去除被碰撞的子弹score+=1play_sound("素材/exlposion.wav")tortoise.life-=1if bullet.x>0 and bullet.x<1330:bullet.x+=bullet.speedelse:#移除子弹bullets.remove(bullet)keys=pygame.key.get_pressed()if keys[pygame.K_LEFT]and player.x>0:player.x-=player.speedplayer.left=Trueplayer.right=Falseplayer.stand=Falseelif keys[pygame.K_RIGHT] and player.x<窗体.get_size()[0]-player.width:player.x+=player.speedplayer.left = Falseplayer.right = Trueplayer.stand = Falseelse:player.stand = Trueplayer.walk_count=0if not player.jump:#如果没跳起,按下空格管用if keys[pygame.K_UP]:player.jump=Trueplayer.walk_count=0else:if player.t>=-10:a=1if player.t<0:a=-1player.y-=0.5*a*(player.t**2)player.t-=1else:player.jump=Falseplayer.t=10drawimge()#绘制背景
sys.exit()
"""多行注释
pygame.init()#初始化
窗体=pygame.display.set_mode((1330,728))#背景多大窗口多大
FRAME_PER_SECONDS=21#每秒刷新率
pygame.display.set_caption("马里奥打乌龟")#标题walk_left=[]#存储面向左的行走图片walk_right=[]#存储面向右的行走图片
for pic_num in range(0,22):#添加图片walk_left.append(pygame.image.load("素材/人物/marioL/"+str(pic_num)+".png"))walk_right.append(pygame.image.load("素材/人物/marioR/" + str(pic_num) + ".png"))
bg=pygame.image.load("素材/background.png")
#站立图片
stand_l=pygame.image.load("素材/人物/marioL/stand.png")
stand_r=pygame.image.load("素材/人物/marioR/stand.png")
#跳起图片
jump_l=pygame.image.load("素材/人物/marioL/jump.png")
jump_r=pygame.image.load("素材/人物/marioR/jump.png")
x,y=50,600#首次出现的坐标
width,height=70,90#大小
speed=5
walk_count=0
left,right,stand,jump=False,False,False,False#向左像右站立初始值跳跃
t=10def drawimge():    #渲染背景图片/绘制global walk_count#允许对全局变量进行赋值窗体.blit(bg,(0,0))#绘制背景图片if walk_count>=FRAME_PER_SECONDS:#判断图片数量是否超出walk_count=0if left and not stand and not jump:#如果left=真 并且没有站立窗体.blit(walk_left[walk_count],(x,y))#绘制像左的图片walk_count+=1elif right and not stand and not jump:窗体.blit(walk_right[walk_count], (x, y))  # 绘制像右的图片walk_count += 1else:if left:if not jump:窗体.blit(stand_l,(x,y))else:窗体.blit(jump_l,(x,y))else:if not jump:窗体.blit(stand_r, (x, y))else:窗体.blit(jump_r,(x,y))
clock=pygame.time.Clock()#防止cpu占用率过高
run=True
while run:clock.tick(FRAME_PER_SECONDS)pygame.time.delay(20)for event in pygame.event.get():if event.type==pygame.QUIT:run=Falsekeys=pygame.key.get_pressed()if keys[pygame.K_LEFT]:x-=speedleft=Trueright=Falsestand=Falseelif keys[pygame.K_RIGHT]:x+=speedleft = Falseright = Truestand = Falseelse:stand = Truewalk_count=0if not jump:#如果没跳起,按下空格管用if keys[pygame.K_UP]:jump=Truewalk_count=0else:if t>=-10:a=1if t<0:a=-1y-=0.5*a*(t**2)t-=1else:jump=Falset=10drawimge()#绘制背景pygame.display.update()#刷新窗口
sys.exit()
"""

模块1子弹源码

import pygame
class Bullet(object):#子弹类bullet_l = pygame.image.load("素材/fire/fireL/4.png")bullet_r = pygame.image.load("素材/fire/fireR/4.png")def __init__(self,x,y,direction):#子弹坐标self.x=xself.y=yself.width=37self.height=36#子弹的长宽self.direction=direction#方向,1为某个图片。-1为另一个,与下列速度起到呼应作用self.speed=10*direction#子弹移动速度self.hit_box = (self.x, self.y, 37, 36)  # 绘制def draw(self,窗体):#绘制子弹if self.direction==1:窗体.blit(self.bullet_r,(self.x,self.y))#子弹从玛丽身上出现,向左向右由上面判断进行else:窗体.blit(self.bullet_l, (self.x, self.y))# self.hit_box = (self.x, self.y, 37, 36)  # 绘制## pygame.draw.rect(窗体, (255, 0, 0), self.hit_box, 2)  # hit_box位置大小,2为宽度

模块2人物源码

import pygame
FRAME_PER_SECONDS=21
class Player(object):walk_left = []  # 存储面向左的行走图片walk_right = []  # 存储面向右的行走图片for pic_num in range(0, 22):  # 添加图片walk_left.append(pygame.image.load("素材/人物/marioL/" + str(pic_num) + ".png"))walk_right.append(pygame.image.load("素材/人物/marioR/" + str(pic_num) + ".png"))# 站立图片stand_l = pygame.image.load("素材/人物/marioL/stand.png")stand_r = pygame.image.load("素材/人物/marioR/stand.png")# 跳起图片jump_l = pygame.image.load("素材/人物/marioL/jump.png")jump_r = pygame.image.load("素材/人物/marioR/jump.png")def __init__(self,x,y,width,height):#构造函数,图片导入等问题self.x=xself.y=yself.width=widthself.height=heightself.speed=5self.left=Falseself.right=True#默认向右self.jump=Falseself.stand=True#默认站立self.walk_count=0#切换走路图片self.t=10#跳跃状态判断self.hit_box=(self.x,self.y,70,90)#外框self.life=10#默认生命值def draw(self,窗体):#创建窗口global walk_count  # 允许对全局变量进行赋值if self.walk_count >= FRAME_PER_SECONDS:  # 判断图片数量是否超出self.walk_count = 0if self.left and not self.stand and not self.jump:  # 如果left=真 并且没有站立窗体.blit(self.walk_left[self.walk_count], (self.x, self.y))  # 绘制像左的图片self.walk_count += 1elif self.right and not self.stand and not self.jump:窗体.blit(self.walk_right[self.walk_count], (self.x, self.y))  # 绘制像右的图片self.walk_count += 1else:if self.left:if not self.jump:窗体.blit(self.stand_l, (self.x, self.y))else:窗体.blit(self.jump_l, (self.x, self.y))else:if not self.jump:窗体.blit(self.stand_r, (self.x, self.y))else:窗体.blit(self.jump_r, (self.x, self.y))#绘制边框# self.hit_box=(self.x,self.y,70,90)#绘制## pygame.draw.rect(窗体,(255,0,0),self.hit_box,2)#hit_box位置大小,2为宽度pygame.draw.rect(窗体,(0,150,0),(self.x,self.y-10,70,8))#绘制绿色长方体#模拟掉血if self.life<10:if self.life < 0: self.life = 0pygame.draw.rect(窗体,(150,0,0),(self.x+self.life*7,self.y-10,70-self.life*7,8))#红条

模块3乌龟源码

import pygame
class Enemy(object):walk_left=[]walk_right=[]for pic_num in range(0,12):#导入12张乌龟图片walk_right.append(pygame.image.load("素材/tortoise/tortoiseR/" + str(pic_num) + ".png"))walk_left.append(pygame.image.load("素材/tortoise/tortoiseL/"+str(pic_num)+".png"))def __init__(self,x,y,start,end):self.x=xself.y=y#乌龟出现的位置self.area=[start,end]#乌龟可移动范围self.walk_count=0#图片切换self.speed=3#移动速度self.__hit_box=(self.x,self.y,50,70)#边框self.width=50self.height=70self.life=10def draw(self,窗体):#绘制self.move()#移动if self.walk_count>=11:#图片循环self.walk_count=0if self.speed>0:#意思是加还是减窗体.blit(self.walk_right[self.walk_count],(self.x,self.y))#绘制像右图片self.walk_count+=1else:窗体.blit(self.walk_left[self.walk_count], (self.x, self.y))  # 绘制像左图片self.walk_count += 1self.hit_box = (self.x, self.y, 50, 70)  # 绘制pygame.draw.rect(窗体, (0, 150, 0), (self.x, self.y - 10, 50, 8))  # 绘制绿色长方体if self.life<10:if self.life<0:self.life=0pygame.draw.rect(窗体,(150,0,0),(self.x+self.life*5,self.y-10,50-self.life*5,8))#红条#pygame.draw.rect(窗体, (255, 0, 0), self.hit_box, 2)  # hit_box位置大小,2为宽度def move(self):if self.speed>0:if self.x<self.area[1]+self.speed:#判断走没走到边缘#area[]为列表,实例化会赋值,就是范围的意思[1]的意思是第二个参数self.x+=self.speed#移动else:self.speed=-self.speed#掉头self.x+=self.speed#移动self.walk_count=0#重新绘制右边的图片else:if self.x>self.area[0]+self.speed:self.x += self.speed  # 移动else:self.speed=-self.speed#掉头self.x+=self.speed#移动self.walk_count=0#重新绘制右边的图片

超级玛丽矩形演示源码

import pygame,sys#模块导入
pygame.init()#初始化模块
窗口=pygame.display.set_mode([640,480])#窗体大小
pygame.display.set_caption("演示矩形控制")#标题
x,y=50,50#初始位置
width,height=30,30#长高
speed=5#速递#标志方块是否跳起
jump=False
t=10run=True
while run:pygame.time.delay(20)for event in pygame.event.get():if event.type==pygame.QUIT:run=Falsekeys=pygame.key.get_pressed()#获取按键if not(jump):#如果方块没跳起if keys[pygame.K_LEFT]:#按下左键x-=speed#x-if keys[pygame.K_RIGHT]:#按下左键x+=speed#x+if keys[pygame.K_DOWN]:#按下下键y+=speedif keys[pygame.K_UP]:#按下上键y-=speedif keys[pygame.K_SPACE]:#空格是指jump值达到起跳效果jump=Trueif x>窗口.get_size()[0]-width:#大于窗口宽,获取宽高,0为宽,1为高 width是正方型的宽x=窗口.get_size()[0]-width#先获取宽高,如果大出,重置为宽的位置,也就是边缘位置if x<0:x=0if y>窗口.get_size()[1]-height:#大于窗口宽,获取宽高,0为宽,1为高 ht是正方型的宽y=窗口.get_size()[1]-height#先获取宽高,如果大出,重置为高的位置,也就是边缘位置if y<0:y=0else:#方块跳起if t>=-10:#正在跳a=1#减速上跳if t<0:a=-1#加速下落#匀加速直线运动的位移公式y-=0.5*a*(t**2)#上升下降if y<0:y=0#不能和跳出窗体t-=1else:jump=False#跳完结束t=10窗口.fill((0,0,0))#背景色pygame.draw.rect(窗口,(255,0,0),(x,y,width,height))#画方块pygame.display.update()#刷新
sys.exit()#退出

素材打包

百度云资源:https://pan.baidu.com/s/13G1vnQktUrNyaTigrYeoZA

pygame:超级玛丽相关推荐

  1. PyGame “超级玛丽”游戏专题开篇——“变态超级玛丽”的诞生

    欢迎来到PyGame频道

  2. Pygame实现的超级玛丽

    这是一款非常非常经典的小游戏--超级玛丽,主要使用pygame实现的,与小时候玩的一模一样,赶紧下载玩玩吧 超级玛丽源码下载: 长按左侧二维码 2 秒 回复「玛丽」即可获取源码 (非本号) <超 ...

  3. Python游戏开发,pygame模块,Python实现超级玛丽100%真实版

    今日游戏更新--超级玛丽华丽上线

  4. 如何用Python实现超级玛丽的人物行走和碰撞检测?

    作者 | marble_xu 编辑 | 郭芮 出品 | CSDN博客 在<如何用 Python 实现超级玛丽的界面和状态机?>这篇文章中我们讲解如何用代码实现界面和状态机,本文详解人物行走 ...

  5. 如何用Python实现超级玛丽的界面和状态机?

    作者 | marble_xu 编辑 | 郭芮 来源 | CSDN博客 小时候的经典游戏,代码参考了github上的项目Mario-Level-1(https://github.com/justinme ...

  6. python简单超级马里奥游戏下载_python 实现超级玛丽游戏

    开发需求 python 3.7+ pygame 1.9+ 演示 项目地址 https://github.com/Mr-han11/PythonSuperMario-master 主要功能的代码实现 玩 ...

  7. 如何用Pygame写游戏(十三)

    本文转自:http://eyehere.net/2011/python-pygame-novice-professional-13/ 我们已经学习了游戏的图像和输入编程,接下来是什么?声音?没错,不过 ...

  8. 如何用 Python 实现超级玛丽的界面和状态机?

    作者 | marble_xu 责编 | 郭芮 出品 | CSDN博客 小时候的经典游戏,代码参考了github上的项目Mario-Level-1(https://github.com/justinme ...

  9. 【pygame学习+实战】第一篇:游戏最小系统

    14天学习训练营导师课程: 李宁<Python Pygame游戏开发入门与实战> 李宁<计算机视觉OpenCV Python项目实战>1 李宁<计算机视觉OpenCV P ...

  10. 「Pygame经典合集」​​​​​​终极 大招:让你玩儿到爽

    导语 嘿!我是梦雅,关注我--跟我一起玩游戏啦~ 其实嘛?最近的话游戏的话实在是没什么可以写的了,很多游戏的话太难仿制起来很费时间,于是 就有了今天这篇小合集--​ ​​ 哈哈哈,这是一个pygame ...

最新文章

  1. linux 快照备份导出,KVM之虚拟机几种备份方法(快照/克隆/导出)
  2. 【Qt】QModbusResponse类
  3. ios消息推送机制原理与实现(转)
  4. P1059 [NOIP2006 普及组] 明明的随机数
  5. 11单件模式(Singleton Pattern)
  6. 电脑屏保海底世界_世界上最后一个深海实验室,隐藏了人类未来的秘密
  7. 前端开发在uc浏览器上遇到的坑
  8. php 完整redis类,PHP Redis类
  9. 【系统分析师之路】2019年上系统分析师综合知识真题
  10. ADS(Advanced Design system)使用调谐分析(Tuning)进行电路优化
  11. Grafana 8重磅发布:统一警报、实时流、继续炫酷到底!
  12. 联通HG8347R WO-36光猫 当前用户不允许登录解决办法
  13. Python数据分析U3-matplotlib可视化高级
  14. 多目标优化——帕累托最优Pareto
  15. 【错误记录】Google Play 上架报错 ( 对于在 APK 中使用该权限的应用,您必须设置隐私权政策 | 生成并托管 隐私政策 )
  16. 论文简读-BootEA-《Bootstrapping Entity Alignment with Knowledge Graph Embedding》
  17. php读音量大小,Android_Android中实时获取音量分贝值详解,基础知识 度量声音强度,大 - phpStudy...
  18. 链表的特点,单链表的定义、存储结构,单链表的基本操作(判断链表是否为空、销毁链表、清空链表、求链表表长、查找、插入、删除,建立单链表)
  19. OpenGL学习之材质RGB值和光源RGB值关系
  20. 不义联盟网站无法连接服务器,不义联盟:人间之神无法连接服务器如何解决

热门文章

  1. Unity手机移动设备重力感应
  2. 论文:Object-centric Auto-encoders and Dummy Anomalies for Abnormal Event Detection in Video阅读遇到的问题及解答
  3. Chrome启动页设置无效完美解决
  4. Unity Shader 之 环境光
  5. 如何查看自己网站的访问量
  6. vs2017 项目开发 解决方案下的多个项目
  7. 小布老师oracle,小布老师-oracle-1
  8. 实验2014062701:opencv对图像的点操作
  9. 分享一款上班摸鱼神器,再也不怕领导突然出现在身后了~
  10. 计算机粘贴复制快捷键,电脑粘贴复制快捷键ctrl加什么(电脑快捷键方法大全)...