目录

  • 《玛丽冒险》程序使用说明
  • 开发环境要求
  • 运行方法
  • 主要代码展示
  • 源码及说明文档下载路径

《玛丽冒险》程序使用说明

在PyCharm中运行《玛丽冒险》即可进入如图1所示的游戏主界面。

图1 游戏主界面

具体的操作步骤如下:
(1)游戏主窗体界面显示后,游戏的背景地图将自动加载与移动,此时会随机出现管道、导弹障碍物。当遇到障碍物时按下键盘中的空格按键,玛丽将实现跳跃,如图2所示。

图2 小玛丽跳跃

(2)每当越过一次障碍时,右上角的积分将自动增加1分。如图3所示。

图3 越过障碍增加积分

(3)如果玛丽在移动的过程中不小心撞到了障碍物,此时游戏主界面的中间位置将显示“Game Over”游戏结束的文字。如图4所示。

图4 游戏结束

游戏结束后,再次按下空格键将重新启动游戏。
(4)如果不需要播放游戏的背景音乐时,可以单击左上角的音乐按钮,背景音乐播放时,控制按钮的运行效果如图5所示。背景音乐停止时,控制按钮的运行效果如图6所示。

图5 播放背景音乐

图6 停止背景音乐

开发环境要求

本系统的软件开发及运行环境具体如下。
操作系统:Windows 7、Windows 8、Windows 10。
Python版本:Python 3.7.0。
开发工具:PyCharm。
Python内置模块:itertools、random。
第三方模块:pygame。
注意:在使用第三方模块时,首先需要使用pip install命令安装该模块,可以在Python命令窗口中执行以下命令:

pip install pygame

运行方法

(1)启动PyCharm开发工具,单击“open”按钮打开项目源码,如图1所示。

图7 打开项目源码

(2)项目源码打开完成后,打开marie.py文件,在该文件中单击鼠标右键,在弹出快捷菜单中选择“Run marie”如图2所示。

图8 选择“Run marie”

(3)项目源码正常启动后将显示如图3所示的主窗体界面。

图9 主窗体界面

主要代码展示

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 = xself.y = ydef 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 + win_y = point_y > 20 and point_y < 20 + hreturn in_x and in_yfrom 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 = 0self.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 = 800self.y = self.obstacle_yself.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.scoretmp = 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_wscreen_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, FPSCLOCKpygame.init()  # 经过初始化以后我们就可以尽情地使用pygame了。# 使用Pygame时钟之前,必须先创建Clock对象的一个实例,# 控制每个循环多长时间运行一次。FPSCLOCK = pygame.time.Clock()SCREEN = pygame.display.set_mode((SCREENWIDTH, SCREENHEIGHT))  # 通常来说我们需要先创建一个窗口,方便我们与程序的交互。pygame.display.set_caption('玛丽冒险')  # 设置窗口标题# 创建地图对象bg1 = MyMap(0, 0)bg2 = MyMap(800, 0)# 创建小玛丽对象marie = Marie()addObstacleTimer = 0  # 添加障碍物的时间list = []  # 障碍物对象列表music_button = Music_Button()     # 创建背景音乐按钮对象btn_img  = music_button.open_img  # 设置背景音乐按钮的默认图片music_button.bg_music.play(-1)    # 循环播放背景音乐while True:# 获取单击事件for event in pygame.event.get():if event.type == pygame.MOUSEBUTTONUP:  # 判断鼠标事件if music_button.is_select():        # 判断鼠标是否在静音按钮范围if music_button.is_open:        # 判断背景音乐状态btn_img = music_button.close_img # 单击后显示关闭状态的图片music_button.is_open = False    # 关闭背景音乐状态music_button.bg_music.stop()    # 停止背景音乐的播放else:btn_img = music_button.open_imgmusic_button.is_open = Truemusic_button.bg_music.play(-1)# 如果单击了关闭窗口就将窗口关闭if event.type == QUIT:pygame.quit()  # 退出窗口sys.exit()  # 关闭窗口# 单击键盘空格键,开启跳的状态if event.type == KEYDOWN and event.key == K_SPACE:if marie.rect.y >= marie.lowest_y:  # 如果小玛丽在地面上marie.jump_audio.play()  # 播放小玛丽跳跃音效marie.jump()  # 开启小玛丽跳的状态if over == True:  # 判断游戏结束的开关是否开启mainGame()  # 如果开启将调用mainGame方法重新启动游戏if over == False:# 绘制地图起到更新地图的作用bg1.map_update()# 地图移动bg1.map_rolling()bg2.map_update()bg2.map_rolling()# 小玛丽移动marie.move()# 绘制小玛丽marie.draw_marie()# 计算障碍物间隔时间if addObstacleTimer >= 1300:r = random.randint(0, 100)if r > 40:# 创建障碍物对象obstacle = Obstacle()# 将障碍物对象添加到列表中list.append(obstacle)# 重置添加障碍物时间addObstacleTimer = 0# 循环遍历障碍物for i in range(len(list)):# 障碍物移动list[i].obstacle_move()# 绘制障碍物list[i].draw_obstacle()# 判断小玛丽与障碍物是否碰撞if pygame.sprite.collide_rect(marie, list[i]):over = True  # 碰撞后开启结束开关game_over()  # 调用游戏结束的方法music_button.bg_music.stop()else:# 判断小玛丽是否跃过了障碍物if (list[i].rect.x + list[i].rect.width) < marie.rect.x:# 加分score += list[i].getScore()# 显示分数list[i].showScore(score)addObstacleTimer += 20  # 增加障碍物时间SCREEN.blit(btn_img, (20, 20)) # 绘制背景音乐按钮pygame.display.update()  # 更新整个窗口FPSCLOCK.tick(FPS)  # 循环应该多长时间运行一次if __name__ == '__main__':mainGame()

源码及说明文档下载路径

玛丽冒险的程序-源码-可执行程序-使用说明.zip
https://download.csdn.net/download/duck251/87512104

python例程:玛丽冒险相关推荐

  1. python玛丽冒险超级游戏程序源码

    wx供重浩:创享日记 对话框发送:python玛丽 免费获取完整源码源文件+配置教程说明+可执行文件 在PyCharm中运行<玛丽冒险>即可进入如图1所示的游戏主界面. 具体的操作步骤如下 ...

  2. Python版基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式

    基于pygame的玛丽快跑小游戏源代码,玛丽冒险小游戏代码,支持双人模式 按空格进入单人模式,按't'进入双人模式,双人模式下玛丽1采用空格键上跳,玛丽2采用方向上键上跳. 完整代码下载地址:Pyth ...

  3. 基于Python的《玛丽冒险》小游戏

    开发环境要求 本系统的软件开发及运行环境具体如下. 操作系统:Windows 7.Windows 8.Windows 10. Python版本:Python 3.7.0. 开发工具:PyCharm. ...

  4. python玛丽冒险_超级玛丽的 python 实现

    超级玛丽的 python 实现 在经过三四天的摸索,参考了Github上的一个大神的代码的前提下,也算是初步搭建起了自己的超级玛丽,下面就给大家分享一些自己踩的坑. 这里是 推荐一下Github上一个 ...

  5. python简单超级马里奥游戏下载大全_Python实现超级玛丽游戏系列教程02玛丽走跑...

    配套视频教程 项目代码 最终效果 行走 constants.py STAND = 'standing' WALK = 'walk' SMALL_ACCEL = .2 SMALL_TURNAROUND ...

  6. 怎么用python制作超级玛丽_Python实现超级玛丽游戏系列教程01玛丽登场

    配套视频教程 项目代码 最终效果 搭建项目结构 定义游戏常量 SCREEN_HEIGHT = 600 SCREEN_WIDTH = 800 SCREEN_SIZE = (SCREEN_WIDTH,SC ...

  7. python简单超级马里奥游戏下载大全_Python实现超级玛丽游戏系列教程01玛丽登场...

    配套视频教程 www.bilibili.com/video/BV1ua411c7m3 项目代码 gitee.com/kamiba/python_super_mario_game_code 最终效果 搭 ...

  8. 伦敦玛丽女王大学计算机科学本科,2020年伦敦大学玛丽女王学院开设了哪些计算机专业?入学要求有哪些?...

    作为伦敦大学的四大核心学院之一的伦敦大学玛丽女王学院,一直被评为"学生就业能力和毕业起薪最佳大学之一",尤其是该校的计算机教育在欧洲乃至世界有着非常高的造诣,因此,越来越多的学生前 ...

  9. 美国西北大学计算机学院教授,美国西北大学化学院院长Teri W. Odom教授访问玛丽女王工程学院...

    西工大新闻网7月12日电(李琦)2019年7月8日,美国西北大学化学院院长Teri W. Odom教授访问西北工业大学伦敦玛丽女王大学工程学院,并以"Highlights of Northw ...

最新文章

  1. tomcat启动后 项目运行缓慢,要几十到几百秒不等 怎么样./startup.sh 运行加快
  2. getRunningTask API
  3. 互联网数据中心安全管理方案
  4. 如何去写一手好 SQL?
  5. linux centos7开启IP转发、路由转发解决docker 端口映射 及外部无法访问问题
  6. Python运算符和编码
  7. 一些著名的软件都用什么语言编写?
  8. 手也很光滑的飞鸽传书
  9. 状态空间模型中参数的贝叶斯估计
  10. php 微信公众号客服,微信公众平台开发多客服
  11. BASLER巴斯勒线扫相机使用流程
  12. 书单丨打开投资理财之路,从这25本书开始
  13. 前Sun高级经理蒋清野:从JavaEye社区被迫改名说起
  14. uva 10099(最短路径)
  15. 基于JSP的购物网站系统
  16. 数智化升级:红蜻蜓的转型之路(上)
  17. 奥维查看行政边界_全国乡镇行政区划数据乡镇边界数据查询获取方式
  18. office2021、Excel2021设置密码
  19. PR是什么?怎么查询网站的谷歌PR权重?
  20. 微信小程序连接本地服务器(在本地服务器上进行真机测试-微信开发者工具)

热门文章

  1. 继 Linux 之父之后,独立开发者 Jonathan Blow 再次炮轰 C++ 是可怕的语言
  2. 基于生命周期的开发方法——迭代开发方法
  3. AI学习之路(4): TensorFlow是什么
  4. 对北京奥组委的做法表示不满,开幕式门票渐行渐远……
  5. jquery美化插件uniform
  6. 第3章 愈自由,愈发展
  7. 游戏开发学习交流群,欢迎加入(875867499)
  8. Java集合 学习记录
  9. 高速低温离心机参数及操作规程
  10. 树莓派教程(基于python编程)--初级篇