Python小游戏————滑雪小游戏代码开源

2023-11-16

♥️作者:小刘在这里

♥️每天分享云计算网络运维课堂笔记,励志爬上IT介顶峰,努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生!

♥️夕阳下,是最美的,绽放,愿所有的美好,再疫情结束后如约而至。

目录

一.主代码

二.cfg

三.README


一.主代码

'''
Function:
    滑雪小游戏
源码基地:#959755565#
'''
import sys
import cfg
import pygame
import random


'''滑雪者类'''
class SkierClass(pygame.sprite.Sprite):
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        # 滑雪者的朝向(-2到2)
        self.direction = 0
        self.imagepaths = cfg.SKIER_IMAGE_PATHS[:-1]
        self.image = pygame.image.load(self.imagepaths[self.direction])
        self.rect = self.image.get_rect()
        self.rect.center = [320, 100]
        self.speed = [self.direction, 6-abs(self.direction)*2]
    '''改变滑雪者的朝向. 负数为向左,正数为向右,0为向前'''
    def turn(self, num):
        self.direction += num
        self.direction = max(-2, self.direction)
        self.direction = min(2, self.direction)
        center = self.rect.center
        self.image = pygame.image.load(self.imagepaths[self.direction])
        self.rect = self.image.get_rect()
        self.rect.center = center
        self.speed = [self.direction, 6-abs(self.direction)*2]
        return self.speed
    '''移动滑雪者'''
    def move(self):
        self.rect.centerx += self.speed[0]
        self.rect.centerx = max(20, self.rect.centerx)
        self.rect.centerx = min(620, self.rect.centerx)
    '''设置为摔倒状态'''
    def setFall(self):
        self.image = pygame.image.load(cfg.SKIER_IMAGE_PATHS[-1])
    '''设置为站立状态'''
    def setForward(self):
        self.direction = 0
        self.image = pygame.image.load(self.imagepaths[self.direction])


'''
Function:
    障碍物类
Input:
    img_path: 障碍物图片路径
    location: 障碍物位置
    attribute: 障碍物类别属性
'''
class ObstacleClass(pygame.sprite.Sprite):
    def __init__(self, img_path, location, attribute):
        pygame.sprite.Sprite.__init__(self)
        self.img_path = img_path
        self.image = pygame.image.load(self.img_path)
        self.location = location
        self.rect = self.image.get_rect()
        self.rect.center = self.location
        self.attribute = attribute
        self.passed = False
    '''移动'''
    def move(self, num):
        self.rect.centery = self.location[1] - num


'''创建障碍物'''
def createObstacles(s, e, num=10):
    obstacles = pygame.sprite.Group()
    locations = []
    for i in range(num):
        row = random.randint(s, e)
        col = random.randint(0, 9)
        location  = [col*64+20, row*64+20]
        if location not in locations:
            locations.append(location)
            attribute = random.choice(list(cfg.OBSTACLE_PATHS.keys()))
            img_path = cfg.OBSTACLE_PATHS[attribute]
            obstacle = ObstacleClass(img_path, location, attribute)
            obstacles.add(obstacle)
    return obstacles


'''合并障碍物'''
def AddObstacles(obstacles0, obstacles1):
    obstacles = pygame.sprite.Group()
    for obstacle in obstacles0:
        obstacles.add(obstacle)
    for obstacle in obstacles1:
        obstacles.add(obstacle)
    return obstacles


'''显示游戏开始界面'''
def ShowStartInterface(screen, screensize):
    screen.fill((255, 255, 255))
    tfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//5)
    cfont = pygame.font.Font(cfg.FONTPATH, screensize[0]//20)
    title = tfont.render(u'滑雪游戏', True, (255, 0, 0))
    content = cfont.render(u'按任意键开始游戏', True, (0, 0, 255))
    trect = title.get_rect()
    trect.midtop = (screensize[0]/2, screensize[1]/5)
    crect = content.get_rect()
    crect.midtop = (screensize[0]/2, screensize[1]/2)
    screen.blit(title, trect)
    screen.blit(content, crect)
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                return
        pygame.display.update()


'''显示分数'''
def showScore(screen, score, pos=(10, 10)):
    font = pygame.font.Font(cfg.FONTPATH, 30)
    score_text = font.render("Score: %s" % score, True, (0, 0, 0))
    screen.blit(score_text, pos)


'''更新当前帧的游戏画面'''
def updateFrame(screen, obstacles, skier, score):
    screen.fill((255, 255, 255))
    obstacles.draw(screen)
    screen.blit(skier.image, skier.rect)
    showScore(screen, score)
    pygame.display.update()


'''主程序'''
def main():
    # 游戏初始化
    pygame.init()
    pygame.mixer.init()
    pygame.mixer.music.load(cfg.BGMPATH)
    pygame.mixer.music.set_volume(0.4)
    pygame.mixer.music.play(-1)
    # 设置屏幕
    screen = pygame.display.set_mode(cfg.SCREENSIZE)
    pygame.display.set_caption('滑雪大冒险')
    # 游戏开始界面
    ShowStartInterface(screen, cfg.SCREENSIZE)
    # 实例化游戏精灵
    # --滑雪者
    skier = SkierClass()
    # --创建障碍物
    obstacles0 = createObstacles(20, 29)
    obstacles1 = createObstacles(10, 19)
    obstaclesflag = 0
    obstacles = AddObstacles(obstacles0, obstacles1)
    # 游戏clock
    clock = pygame.time.Clock()
    # 记录滑雪的距离
    distance = 0
    # 记录当前的分数
    score = 0
    # 记录当前的速度
    speed = [0, 6]
    # 游戏主循环
    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_LEFT or event.key == pygame.K_a:
                    speed = skier.turn(-1)
                elif event.key == pygame.K_RIGHT or event.key == pygame.K_d:
                    speed = skier.turn(1)
        # --更新当前游戏帧的数据
        skier.move()
        distance += speed[1]
        if distance >= 640 and obstaclesflag == 0:
            obstaclesflag = 1
            obstacles0 = createObstacles(20, 29)
            obstacles = AddObstacles(obstacles0, obstacles1)
        if distance >= 1280 and obstaclesflag == 1:
            obstaclesflag = 0
            distance -= 1280
            for obstacle in obstacles0:
                obstacle.location[1] = obstacle.location[1] - 1280
            obstacles1 = createObstacles(10, 19)
            obstacles = AddObstacles(obstacles0, obstacles1)
        for obstacle in obstacles:
            obstacle.move(distance)
        # --碰撞检测
        hitted_obstacles = pygame.sprite.spritecollide(skier, obstacles, False)
        if hitted_obstacles:
            if hitted_obstacles[0].attribute == "tree" and not hitted_obstacles[0].passed:
                score -= 50
                skier.setFall()
                updateFrame(screen, obstacles, skier, score)
                pygame.time.delay(1000)
                skier.setForward()
                speed = [0, 6]
                hitted_obstacles[0].passed = True
            elif hitted_obstacles[0].attribute == "flag" and not hitted_obstacles[0].passed:
                score += 10
                obstacles.remove(hitted_obstacles[0])
        # --更新屏幕
        updateFrame(screen, obstacles, skier, score)
        clock.tick(cfg.FPS)


'''run'''
if __name__ == '__main__':
    main()

二.cfg

'''配置文件

源码基地:#959755565#

import os


'''FPS'''
FPS = 40
'''游戏屏幕大小'''
SCREENSIZE = (640, 640)
'''图片路径'''
SKIER_IMAGE_PATHS = [
    os.path.join(os.getcwd(), 'resources/images/skier_forward.png'),
    os.path.join(os.getcwd(), 'resources/images/skier_right1.png'),
    os.path.join(os.getcwd(), 'resources/images/skier_right2.png'),
    os.path.join(os.getcwd(), 'resources/images/skier_left2.png'),
    os.path.join(os.getcwd(), 'resources/images/skier_left1.png'),
    os.path.join(os.getcwd(), 'resources/images/skier_fall.png')
]
OBSTACLE_PATHS = {
    'tree': os.path.join(os.getcwd(), 'resources/images/tree.png'),
    'flag': os.path.join(os.getcwd(), 'resources/images/flag.png')
}
'''背景音乐路径'''
BGMPATH = os.path.join(os.getcwd(), 'resources/music/bgm.mp3')
'''字体路径'''
FONTPATH = os.path.join(os.getcwd(), 'resources/font/FZSTK.TTF')

三.README

# Introduction
https://mp.weixin.qq.com/s/2MVTEa4ut9TOAgBOOWEUSg

# Environment
```
OS: Windows10
Python: Python3.5+(have installed necessary dependencies)
```

# Usage
```
Step1:
pip install -r requirements.txt
Step2:
run "python Game4.py"
```

# Game Display
![giphy](demonstration/running.gif)

♥️关注,就是我创作的动力

♥️点赞,就是对我最大的认可

♥️这里是小刘,励志用心做好每一篇文章,谢谢大家

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python小游戏————滑雪小游戏代码开源 的相关文章

  • 利用 Python f 字符串和 Yaml 文件?

    如果我有一个 yaml 文件 其中包含一个带有括号符号 的字符串 与 python f 字符串配合使用 那么如何在此处利用 f 字符串插值 以这个简单的 yaml 文件为例 tmp yaml k1 val1 k2 val2 as well
  • Flask-SQLAlchemy 构造函数

    在 Flask SQLAlchemy 教程中 定义了 User 模型的构造函数 from flask import Flask from flask ext sqlalchemy import SQLAlchemy app Flask na
  • 如何使用类似 KDnuggets 风格的 PDF 绘制比较箱线图

    在经历了解 KDnuggets 文章中的箱线图 https www kdnuggets com 2019 11 understanding boxplots html 我找到了带有概率密度函数的箱线图的详细图 pdf 我正在尝试绘制比较箱线
  • 在 Pycharm 中使用 scikit-learn 未解析的属性引用“predict()”

    当使用 scikit learn 中的决策树分类器时 docs http scikit learn org stable modules tree html展示您将存储分类器的变量重新分配给其自身的输出 调用fit method clf t
  • Python setup.py 运行 shell 脚本

    我需要在创建 Python 包时在 sdist 阶段运行我自己的脚本 我写了以下脚本 你知道更好的方法吗 您能否推荐更好的一个或链接到 setuptools 的官方文档 其中已解释了这一时刻 import subprocess import
  • 如何使用 pywin32 在 Python 中获取特定应用程序窗口的句柄?

    我正在尝试修改一些在 Windows 10 中截取特定应用程序窗口屏幕截图的 Python 代码 我正在尝试使用win32ui win32guipywin32 包中的模块用于此目的 这是损坏的代码 def getWindow name Wi
  • 从 Windows 文件系统中的任何位置运行 python 脚本

    我已经实现了一些实用程序来满足我的需要 以使用 Python 简化开发 需要多个 py文件和一些额外的 template文件 重命名 txt file 我希望能够从文件系统中的任何位置使用此实用程序 例如 如果我当前位于某个文件夹中 我想运
  • python中的多服务器监控/自动重启

    我有 2 个服务器程序 必须使用 GNU Screen 启动 我想使用基于 Python 的程序来强化这些服务器 防止崩溃 该程序启动每个屏幕会话 然后监视服务器进程 如果服务器进程崩溃 我需要 python 代码来终止无关的屏幕会话并再次
  • 没有实例的 Django Formset

    In this http docs djangoproject com en dev topics forms modelforms inline formsetsDjango Doc 解释了如何创建一个表单集 该表单集允许您编辑属于特定作
  • Python Turtle 未按照文档示例填充

    我试图向我女儿展示一些代码 并认为海龟会很有趣 我更喜欢数字 但这对孩子们来说并不有趣 我在重现文档示例时遇到问题 这更让我烦恼 因为我无法弄清楚 我们还有很多其他事情可以做 The documentation example copied
  • 我可以在 Mac OS X 上将 enthought python 重新链接到新版本的 openssl 吗?

    今天早上 我在 Mac OS X 10 6 8 上使用 EPD 7 3 时遇到了与 SSL 相关的问题 当我运行 pip 版本 1 3 1 时 我得到 pip install requests Downloading unpacking r
  • AttributeError:模块“rest_framework.serializers”没有属性“NullBooleanField”

    升级后djangorest框架 https pypi org project djangorestframework from djangorestframework 3 13 1 to djangorestframework 3 14 0
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • Scipy - 求矩阵列空间的基数

    我正在尝试编写一个简单的单纯形算法 其第一步是找到一个基本的可行解决方案 选择 A 的线性独立列的一组 B 将 x 中与不在 B 中的列相对应的所有分量设置为零 求解 m 个所得方程以确定 x 的分量 这些是基本变量 我知道解决方案将涉及使
  • 如何计算 pandas 系列中到前一个零的距离?

    我有以下 pandas 系列 以列表形式表示 7 2 0 3 4 2 5 0 3 4 我想定义一个新的系列 返回到最后一个零的距离 这意味着我想要以下输出 1 2 0 1 2 3 4 0 1 2 如何以最有效的方式在 pandas 中做到这
  • 致命Python错误:init_import_size:无法在Anaconda Prompt中导入站点模块

    当我启动 Anaconda Prompt 时 收到以下错误消息 致命 Python 错误 init import size 无法导入站点模块 Python运行时状态 已初始化回溯 最近一次调用最后一次 文件 C Users blue App
  • python pandas 将两行或多行文本合并为一行

    我有包含文本数据的数据框 如下所示 name address number 1 Bob bob No 56 2 gmail com 3 Carly email protected cdn cgi l email protection No
  • django 返回记录的最近日期

    我正在尝试从用户的多个记录中返回最近的日期 当用户创建文档时 创建日期存储在 CreatedDocumentDetails 模型中 我无法返回用户最近创建的文档的日期 我问这个关于SO的问题 https stackoverflow com
  • 聚类算法采用哪种编程结构

    我正在尝试实现以下 分裂 聚类算法 下面是该算法的简短形式 完整的描述可用here https dl dropboxusercontent com u 540963 diana pdf 从样本 x i 1 n 开始 将其视为由 n 个数据点
  • “from-import”是否执行整个模块?

    好的 所以我知道from import与 完全 相同import 但这显然不是因为命名空间的填充方式不同 我的问题主要是因为我有一个utils我的应用程序中的每个其他模块都使用一个或两个函数的模块 我正在努力合并标准库logging模块 据

随机推荐

  • vue如何让el-breadcrumb面包屑导航栏根据路由跳转地址动态切换标题内容

    Vue如何让el breadcrumb面包屑导航栏根据路由跳转地址动态切换标题内容 废话少说 先上效果图 其实想要实现图片上的效果非常简单 我们直接使用路由元信息即可解决 关于路由元信息的解答vue router上面的开发文档写的非常详细
  • python中全部注释_Python中的注释

    1 1 注释的目的 通过用自己熟悉的语言 在程序中对某些代码进行标注说明 这就是注释的作用 能够大大增强程序的可读性 1 2 注释的分类 1 2 1 单行注释 以 开头 右边的所有东西当做说明 而不是真正要执行的程序 起辅助说明作用 我是注
  • 管道

    p The hero s birthday is birthday date format uppercase p
  • CentOS 8安装postgresql 13

    安装postgresql 登陆网址 https www postgresql org download linux redhat 选择postgresql版本和操作系统平台等信息 直接复制命令 依次执行 Install the reposi
  • ZK相关(转载)

    Paxos算法 https www douban com note 208430424 zAB https blog csdn net junchenbb0430 article details 77583955 utm medium di
  • static函数与普通函数

    全局变量 外部变量 的说明之前再冠以static 就构成了静态的全局变量 全局变量本身就是静态存储方式 静态全局变量当然也是静态存储方式 这两者在存储方式上并无不同 这两者的区别虽在于非静态全局变量的作用域是整个源程序 当一个源程序由多个源
  • react-hooks常用API基本简绍

    介绍 react hooks 是 React 16 8 的新增特性 它可以让我们在函数组件中使用 state 生命周期以及其他 react 特性 而不仅限于 class 组件 react hooks 的出现 标示着 react 中不会在存在
  • 【小技巧】强制重启无线网卡,解决“区域中找不到无线网络,请确定您计算机上的无线开关已启用”问题...

    1 找不到无线网络的错误 笔记本有点旧了 无缘无故找不到网络 出现 区域中找不到无线网络 请确定您计算机上的无线开关已启用 的错误 尝试恢复之 重新关闭并开启wifi开关 居然还是这个问题 所以估计是软件问题了 2 右击无线图标尝试修复 2
  • MRI T1、T2mapping

    T1 T2mapping的步骤 1 水模放到线圈中并推入 此时开启激光对准 是水模处于腔体中心位置 2 定位 匀场 选择合适的SE序列 将图像中各层移到图像中心 3 现在心中估计T1 T2值 设置TR TE参数 一般T1 mapping时选
  • 施努卡:基于深度学习的裂缝检测技术

    不同于传统的裂缝检测方法 基于深度学习的检测方法不需要人工干预 能自主学习有代表性的特征 直接对输入图像的裂缝进行检测 随着深度学习方法在许多应用场景中取得了很好的检测结果 国内众多研究人员也开始把基于深度学习的目标检测模型和语义分割模型用
  • 连续自然数求和(3)

    题目描述 求 1 2 3 100 要求分别用 do while 语句 while 语句和 for 语句实现 输入 无 输出 计算结果 注意末尾输出换行 样例输入 无 样例输出 5050 代码 Java版 do while 语句实现 publ
  • pytorch自学笔记

    pytorch和tensorflow是机器学习的两大框架 上一篇帖子已经完整梳理了TensorFlow自学的知识点 这一篇把自学pytorch的知识点也整理下来 内容参考了网上很多帖子 不一一引用了 如有侵权请联系我 目录 0 前言 0 1
  • Windows BitLocker驱动器加密

    BitLocker驱动器加密 首先来说下什么是BitLocker吧 Windows BitLocker驱动器加密通过加密Windows操作系统卷上存储的所有数据可以更好地保护计算机中的数据 为什么要拿来说一说呢 因为这个问题 我两天没工作了
  • 详解JS 和CSS 代码利用率统计利器Coverage以及高版本chrome中coverage的一个致命问题

    在做前端性能测试时较大的文件需要更多时间来下载 并可能导致我们的网站加载缓慢 从而导致用户体验欠佳 因此删除JS和CSS中未被使用的代码就很有必要了 Coverage工具就可以非常方便的实现这一需求 Coverage使用方法 Coverag
  • uniapp打包之配置MacOS虚拟机生成iOS打包证书

    前言 uniapp是一款跨端开发框架 可用于快速开发iOS Android H5等多端应用 本文将详细介绍如何实现uniapp开发的iOS应用打包 详细步骤 一 下载苹果原版镜像文件 点击此处下载 二 安装VMware uniapp打包iO
  • 【android】巧用android:divider属性设置LinearLayout中元素之间的间隔

    如上图 要想实现3个button线性排列并且使它们的大小相同 间隔相等 而且整体填充满整个linearlayout 我们一般的做法是在每两个button之间放一个固定宽度的view 然后设置button的宽度为0 layout weight
  • IDEA maven 项目修改后代码不生效,需要mvn install 后才生效

    错误描述 每次更新完代码 还需要手动install一下才生效 太令人头疼了 错误原因 应该是idea的问题 解决方案 删除idea文件夹 重新打开项目就好了
  • nas linux手机照片备份,本身着手,组建简洁好用的NAS!(存储同步篇)

    之前老张给人人带来了NAS安装 戳这里 和根基设置 戳这里 过程 那么接下来就是正戏了 此次包含了共享设置 速度测试 多盘设置 照片视频同步设置的过程 也是NAS在内网情况中的本职工作 事实要怎么做呢 一路来看看吧 原文来自 www pp0
  • Word文档标题编号调整

    现象 标题目录编号错乱 工具 Word2016 1 先选中第一个一级目录 自定义多级目录样式 包含所有的文档目录级别 1 2 3 4 5 2 将第2章标题下的2级目录标题 2 1环境说明 使用格式刷刷成1级标题中设置的样式 3 选中 第3章
  • Python小游戏————滑雪小游戏代码开源

    作者 小刘在这里 每天分享云计算网络运维课堂笔记 励志爬上IT介顶峰 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的 绽放 愿所有的美好 再疫情结束后如约而至 目录 一 主代码 二 cfg 三 README