import pygame # 将pygame库导入到python程序中
from pygame.locals import * # 导入pygame中的常量
import sys # 导入系统模块
SCREENWIDTH = 822 # 窗口宽度
SCREENHEIGHT = 199 # 窗口高度
FPS = 30 # 更新画面的时间
# 定义一个移动地图类
class MyMap():
def __init__(self, x, y):
# 加载背景图片
self.bg = pygame.image.load("image/bg.png").convert_alpha()
self.x = x
self.y = y
def map_rolling(self):
if self.x < -790: # 小于-790说明地图已经完全移动完毕
self.x = 800 # 给地图一个新的坐标点
else:
self.x -= 5 # 5个像素向左移动
# 更新地图
def map_update(self):
SCREEN.blit(self.bg, (self.x, self.y))
# 背景音乐按钮
class Music_Button():
is_open = True # 背景乐音的标记
def __init__(self):
self.open_img = pygame.image.load('image/btn_open.png').convert_alpha()
self.close_img = pygame.image.load('image/btn_close.png').convert_alpha()
self.bg_music = pygame.mixer.Sound('audio/bg_music.wav') # 加载背景音乐
# 判断鼠标是否在,按钮的范围内
def is_select(self):
# 获取鼠标,的坐标
point_x, point_y = pygame.mouse.get_pos()
w, h = self.open_img.get_size() # 获取按钮图片的大小
# 判断鼠标是否在按钮范围内
in_x = point_x > 20 and point_x < 20 + w
in_y = point_y > 20 and point_y < 20 + h
return in_x and in_y
from itertools import cycle # 导入迭代工具
# 玛丽类
class Marie():
def __init__(self):
# 初始化小玛丽矩形
self.rect = pygame.Rect(0, 0, 0, 0)
self.jumpState = False # 跳跃的状态
self.jumpHeight = 130 # 跳跃的高度
self.lowest_y = 140 # 最低坐标
self.jumpValue = 0 # 跳跃增变量
# 小玛丽动图索引
self.marieIndex = 0
self.marieIndexGen = cycle([0, 1, 2])
# 加载小玛丽图片
self.adventure_img = (
pygame.image.load("image/adventure1.png").convert_alpha(),
pygame.image.load("image/adventure2.png").convert_alpha(),
pygame.image.load("image/adventure3.png").convert_alpha(),
)
self.jump_audio = pygame.mixer.Sound('audio/jump.wav') # 跳音效
self.rect.size = self.adventure_img[0].get_size()
self.x = 50; # 绘制小玛丽的X坐标
self.y = self.lowest_y; # 绘制小玛丽的Y坐标
self.rect.topleft = (self.x, self.y)
# 跳状态
def jump(self):
self.jumpState = True
# 小玛丽移动
def move(self):
if self.jumpState: # 当起跳的时候
if self.rect.y >= self.lowest_y: # 如果站在地上
self.jumpValue = -5 # 以5个像素值向上移动
if self.rect.y <= self.lowest_y - self.jumpHeight: # 小玛丽到达顶部回落
self.jumpValue = 5 # 以5个像素值向下移动
self.rect.y += self.jumpValue # 通过循环改变玛丽的Y坐标
if self.rect.y >= self.lowest_y: # 如果小玛丽回到地面
self.jumpState = False # 关闭跳跃状态
# 绘制小玛丽
def draw_marie(self):
# 匹配小玛丽动图
marieIndex = next(self.marieIndexGen)
# 绘制小玛丽
SCREEN.blit(self.adventure_img[marieIndex],
(self.x, self.rect.y))
import random # 随机数
# 障碍物类
class Obstacle():
score = 1 # 分数
move = 5 # 移动距离
obstacle_y = 150 # 障碍物y坐标
def __init__(self):
# 初始化障碍物矩形
self.rect = pygame.Rect(0, 0, 0, 0)
# 加载障碍物图片
self.missile = pygame.image.load("image/missile.png").convert_alpha()
self.pipe = pygame.image.load("image/pipe.png").convert_alpha()
# 加载分数图片
self.numbers = (pygame.image.load('image/0.png').convert_alpha(),
pygame.image.load('image/1.png').convert_alpha(),
pygame.image.load('image/2.png').convert_alpha(),
pygame.image.load('image/3.png').convert_alpha(),
pygame.image.load('image/4.png').convert_alpha(),
pygame.image.load('image/5.png').convert_alpha(),
pygame.image.load('image/6.png').convert_alpha(),
pygame.image.load('image/7.png').convert_alpha(),
pygame.image.load('image/8.png').convert_alpha(),
pygame.image.load('image/9.png').convert_alpha())
# 加载加分音效
self.score_audio = pygame.mixer.Sound('audio/score.wav') # 加分
# 0和1随机数
r = random.randint(0, 1)
if r == 0: # 如果随机数为0显示导弹障碍物相反显示管道
self.image = self.missile # 显示导弹障碍
self.move = 15 # 移动速度加快
self.obstacle_y = 100 # 导弹坐标在天上
else:
self.image = self.pipe # 显示管道障碍
# 根据障碍物位图的宽高来设置矩形
self.rect.size = self.image.get_size()
# 获取位图宽高
self.width, self.height = self.rect.size
# 障碍物绘制坐标
self.x = 800
self.y = self.obstacle_y
self.rect.center = (self.x, self.y)
# 障碍物移动
def obstacle_move(self):
self.rect.x -= self.move
# 绘制障碍物
def draw_obstacle(self):
SCREEN.blit(self.image, (self.rect.x, self.rect.y))
# 获取分数
def getScore(self):
self.score
tmp = self.score;
if tmp == 1:
self.score_audio.play() # 播放加分音乐
self.score = 0;
return tmp;
# 显示分数
def showScore(self, score):
# 获取得分数字
self.scoreDigits = [int(x) for x in list(str(score))]
totalWidth = 0 # 要显示的所有数字的总宽度
for digit in self.scoreDigits:
# 获取积分图片的宽度
totalWidth += self.numbers[digit].get_width()
# 分数横向位置
Xoffset = (SCREENWIDTH - (totalWidth+30))
for digit in self.scoreDigits:
# 绘制分数
SCREEN.blit(self.numbers[digit], (Xoffset, SCREENHEIGHT * 0.1))
# 随着数字增加改变位置
Xoffset += self.numbers[digit].get_width()
# 游戏结束的方法
def game_over():
bump_audio = pygame.mixer.Sound('audio/bump.wav') # 撞击
bump_audio.play() # 播放撞击音效
# 获取窗体宽、高
screen_w = pygame.display.Info().current_w
screen_h = pygame.display.Info().current_h
# 加载游戏结束的图片
over_img = pygame.image.load('image/gameover.png').convert_alpha()
# 将游戏结束的图片绘制在窗体的中间位置
SCREEN.blit(over_img, ((screen_w - over_img.get_width()) / 2,
(screen_h - over_img.get_height()) / 2))
def mainGame():
score = 0 # 得分
over = False # 游戏结束标记
global SCREEN, FPSCLOCK
pygame.init() # 经过初始化以后我们就可以尽情地使用pygame了。
# 使用Pygame时钟之前,必须先创建Clock对象的一个实例,
# 控制每个循环多长时间运行一次。
FPSCLOCK = pygame.time.Clock()
SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT)) # 通常来说我们需要先创建一个窗口,方便我们与程序的交互。
pygame.display.set_caption('玛丽冒险') # 设置
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
04 超级玛丽 python.zip (55个子文件)
04
可执行程序
image
gameover.png 14KB
btn_close.png 3KB
btn_open.png 3KB
5.png 4KB
adventure2.png 2KB
9.png 4KB
pipe.png 4KB
bg.png 46KB
1.png 3KB
adventure1.png 2KB
adventure3.png 2KB
0.png 3KB
missile.png 3KB
6.png 4KB
2.png 4KB
7.png 4KB
4.png 4KB
8.png 4KB
3.png 4KB
玛丽冒险.exe 11.99MB
audio
jump.wav 78KB
score.wav 173KB
bump.wav 94KB
bg_music.wav 4.21MB
玛丽冒险的程序使用说明_python.doc 438KB
源程序
程序使用说明--玛丽冒险.doc 240KB
marie_adventure
image
gameover.png 14KB
btn_close.png 3KB
btn_open.png 3KB
5.png 4KB
adventure2.png 2KB
9.png 4KB
pipe.png 4KB
bg.png 46KB
1.png 3KB
adventure1.png 2KB
adventure3.png 2KB
0.png 3KB
missile.png 3KB
6.png 4KB
2.png 4KB
7.png 4KB
4.png 4KB
8.png 4KB
3.png 4KB
__pycache__
marie.cpython-37.pyc 7KB
marie.py 12KB
.idea
misc.xml 185B
marie_adventure.iml 431B
modules.xml 282B
workspace.xml 16KB
audio
jump.wav 78KB
score.wav 173KB
bump.wav 94KB
bg_music.wav 4.21MB
共 55 条
- 1
BAK_return
- 粉丝: 264
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 欧阳雨彤202330813009.py
- 基于 Yolov5 的自动贴标IMG,以及许多其他有用的工具
- 基于STM32F103C8T6、LCD1602、AD5206(I2C接口)6路数字电位器的proteus仿真应用设计
- 021315100-2405220913.awb
- 语音分帧与加窗基于MATLAB
- 二层独栋别墅砖混结构D027-两层-10.40&10.30米-施工图.dwg
- 帆软跑马灯制作,附件有制作好的效果
- 本户型为2层独栋别墅D026-两层-13.14&12.84米-施工图.dwg
- 双层别墅图纸有施工图D022-两层-08.70&10.80米-施工图.dwg
- 基于Android的交通事故全责图解设计源码
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0