python使用pygame做第一个孩子游戏


'''
作者:ISDF
功能:孩子游戏
版本:3.0
日期:03/29/2019
'''

'''
作者:ISDF
功能:孩子游戏
版本:4.0
日期:03/27/2024
'''

import pygame
from pygame.locals import *
import sys
from itertools import cycle
import random

SCREENWIDTH=550
SCREENHEIGHT=150
FPS=45
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/zyp1.png").convert_alpha(),
                            pygame.image.load("image/zyp1.png").convert_alpha(),
                            pygame.image.load("image/zyp1.png").convert_alpha(),

        )
        self.jump_audio=pygame.mixer.Sound('audio/zyp.mp3')
        self.rect.size=self.adventure_img[0].get_size()
        self.x=50
        self.y=self.lowest_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
            if self.rect.y<=self.lowest_y-self.jumpHeight:
                self.jumpValue=5
            self.rect.y+=self.jumpValue
            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))
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 < -550:
            self.x = 560
        else:
            self.x -= 5

    def map_update(self):
        SCREEN.blit(self.bg, (self.x, self.y))
class Obstacle():
    score=1
    move=5
    obstacle_y=150
    def __init__(self):
        self.rect=pygame.Rect(0,0,0,0)
        self.tyrannosaurus=pygame.image.load("image/konglong1.png").convert_alpha()
        self.griffin=pygame.image.load("image/daguaishou.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/zyp22.mp3")
        r=random.randint(0,1)
        if r==0:
            self.image=self.tyrannosaurus
            self.move=15
            self.obstacle_y=100
        else:
            self.image=self.griffin
        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 mainGame():
    score=0
    over=False
    global SCREEN,FPSCOLOCK
    pygame.init()
    FPSCOLOCK=pygame.time.Clock()
    SCREEN=pygame.display.set_mode((SCREENWIDTH,SCREENHEIGHT))
    addobstacleTimer=0
    list=[]
    bg1=MyMap(0,0)
    bg2=MyMap(560,0)
    marie=Marie()
    while True:
        for event in pygame.event.get():

            if over == False:
                bg1.map_update()
                bg1.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()
                pygame.display.update()
                # pygame.event.get()
                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()
                pygame.display.update()
                # pygame.event.get()

            addobstacleTimer += 20

            if event.type==KEYDOWN and event.key==K_SPACE:

                pygame.display.update()
                if marie.rect.y>=marie.lowest_y:
                    # marie.jump_audio.play()
                    # obstacle.score_audio.play()
                    marie.jump()
            if event.type == QUIT:
                pygame.quit()
                sys.exit()
            FPSCOLOCK.tick(FPS)


if __name__ == '__main__':
    mainGame()

结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/491367.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python7:接口自动化学习1 RPC

API&#xff08;Application Programmming Interface&#xff09; 应用编程接口&#xff0c;简称“接口” 接口&#xff1a;程序之间约定的通信方法 特点&#xff1a;约定了调用方法&#xff0c;以及预期的行为&#xff0c;但是不透露具体细节 意义&#xff1a;程序能解耦&…

FPGA高端项目:解码索尼IMX390 MIPI相机转HDMI输出,提供FPGA开发板+2套工程源码+技术支持

目录 1、前言2、相关方案推荐本博主所有FPGA工程项目-->汇总目录我这里已有的 MIPI 编解码方案 3、本 MIPI CSI-RX IP 介绍4、个人 FPGA高端图像处理开发板简介5、详细设计方案设计原理框图IMX390 及其配置MIPI CSI RX图像 ISP 处理图像缓存HDMI输出工程源码架构 6、工程源码…

Trapcode Particular---打造惊艳粒子效果

Trapcode Particular是Adobe After Effects中的一款强大3D粒子系统插件&#xff0c;其能够创造出丰富多样的自然特效&#xff0c;如烟雾、火焰和闪光&#xff0c;以及有机的和高科技风格的图形效果。Trapcode Particular功能丰富且特色鲜明&#xff0c;是一款为Adobe After Eff…

视觉里程计之对极几何

视觉里程计之对极几何 前言 上一个章节介绍了视觉里程计关于特征点的一些内容&#xff0c;相信大家对视觉里程计关于特征的描述已经有了一定的认识。本章节给大家介绍视觉里程计另外一个概念&#xff0c;对极几何。 对极几何 对极几何是立体视觉中的几何关系&#xff0c;描…

新能源汽车充电桩主板各模块成本占比解析

汽车充电桩主板是汽车充电桩的重要组件&#xff0c;主要由微处理器模块、通信模块、控制模块、安全保护模块、传感器模块等多个模块构成。深入探究各模块在总成本中的比重&#xff0c;我们可以更好地优化成本结构、提高生产效率&#xff0c;并为未来的技术创新和市场需求变化做…

网络层介绍,IP地址分类以及作用

IP地址组成&#xff1a; TTL&#xff1a;生存时间 基于ICMP报文 特殊地址&#xff1a; 0.0.0.0-0.255.255.255 1.代表未指定的地址 默认路由 DHCP下发地址的时候&#xff0c;发个报文给DHCP服务器 临时用0.0.0.0借用地址&#xff0c;未指定地址。 2.全网地址&#xff1a;目…

iNet Network Scanner Mac 网络扫描工具

iNet Network Scanner for Mac是一款功能强大的网络扫描工具&#xff0c;专为Mac用户设计。它提供了全面而深入的网络分析功能&#xff0c;使用户能够轻松获取Mac连接的网络和设备的详细信息。 软件下载&#xff1a;iNet Network Scanner Mac v3.1.0激活版 这款软件具备多种扫描…

自动驾驶-如何进行多传感器的融合

自动驾驶-如何进行多传感器的融合 附赠自动驾驶学习资料和量产经验&#xff1a;链接 引言 自动驾驶中主要使用的感知传感器是摄像头和激光雷达&#xff0c;这两种模态的数据都可以进行目标检测和语义分割并用于自动驾驶中&#xff0c;但是如果只使用单一的传感器进行上述工作…

使用Spark单机版环境

在Spark单机版环境中&#xff0c;可通过多种方式进行实战操作。首先&#xff0c;可使用特定算法或数学软件计算圆周率π&#xff0c;并通过SparkPi工具验证结果。其次&#xff0c;在交互式Scala版或Python版Spark Shell中&#xff0c;可以进行简单的计算、打印九九表等操作&…

Gerber文件输出

Gerber文件输出 综述&#xff1a;本文主要讲述了AD软件中相关文件的导出&#xff08;装配图、BOM表、Gerber文件&#xff09;及文件的整理。 1. 输出装配图 方法一&#xff1a;点击“文件”→“装配输出”→“Assembly Drawings”&#xff0c;即可输出装配图&#xff0c;但是…

代码随想录 图论-并查集

代码随想录 (programmercarl.com) 寻找图中是否存在路径这道题中的类可看做并查集的标准类 目录 1971.寻找图中是否存在路径 684.冗余连接 685.冗余连接II 1971.寻找图中是否存在路径 1971. 寻找图中是否存在路径 已解答 简单 相关标签 相关企业 有一个具有 n 个顶…

文心一言指令词宝典之职场效率篇

作者&#xff1a;哈哥撩编程&#xff08;视频号、抖音、公众号同名&#xff09; 新星计划全栈领域优秀创作者博客专家全国博客之星第四名超级个体COC上海社区主理人特约讲师谷歌亚马逊演讲嘉宾科技博主极星会首批签约作者 &#x1f3c6; 推荐专栏&#xff1a; &#x1f3c5;…

OriginBot智能机器人开源套件

详情可参见&#xff1a;OriginBot智能机器人开源套件——支持ROS2/TogetherROS&#xff0c;算力强劲&#xff0c;配套古月居定制课程 (guyuehome.com) OriginBot智能机器人开源套件 最新消息&#xff1a;OriginBot V2.1.0版本正式发布&#xff0c;新增车牌识别&#xff0c;点击…

C# wpf 嵌入hwnd窗口

WPF Hwnd窗口互操作系列 第一章 嵌入Hwnd窗口&#xff08;本章&#xff09; 第二章 嵌入WinForm控件 第三章 嵌入WPF控件 文章目录 WPF Hwnd窗口互操作系列前言一、如何实现1、继承HwndHost2、实现抽象方法3、xaml中使用HwndHost控件 二、具体实现1、Win32窗口2、HwndSource窗…

html 元素宽度自适应 占据剩余宽度

弹性盒实现 父元素设置display: flex; 需要自适应宽度的子元素设置flex: 1; <html lang"en"> <head><style>*{margin: 0;padding: 0;}.main{display: flex;}.box1,.box2{width: 100px;height: 200px;}.box1{background: rgb(134 187 233);}.box2…

String类(三)

文章目录 string类&#xff08;三&#xff09;string类的模拟实现&#xff1a;1.默认成员变量和函数2.string的长度和下表引用3.字符串拷贝构造4. 赋值拷贝5.字符串比较6.字符串的增添操作7.insert插入操作8.遍历字符 string类&#xff08;三&#xff09; string类的模拟实现&…

存内计算:释放潜能的黑科技

什么是存内计算&#xff1f; 存内计算技术是一种新型的计算架构&#xff0c;它将存储器和计算单元融合在一起&#xff0c;以实现高效的数据处理。存内计算技术的优势在于能够消除数据搬运的延迟和功耗&#xff0c;从而提高计算效率和能效比。目前&#xff0c;存内计算技术正处…

【SAP2000】碰撞分析 Impact Analysis

碰撞分析 Impact Analysis CSI程序的动力分析功能非常广泛。一个例子是分析两个质量或结构之间碰撞效应的能力。 The possibilities of dynamic analysis with CSI programs are very extensive. An example of this is the ability to analyze the effects of collision bet…

[WTL/Win32]_[初级]_[如何设置ListView的列宽不出现水平滚动条]

场景 开发WTL/Win32的程序时&#xff0c;经常会用到表格控件CListViewCtrl。这个控件需要设置列的宽度&#xff0c;当用完100%的宽度来平均分配给列宽时&#xff0c;一加载数据多&#xff0c;就会出现垂直滚动条后&#xff0c;水平滚动条也会同时出现的问题。怎么设置才能让水…

Redis如何应对缓存穿透问题——Java全栈知识(9)

我们在正常使用缓存的时候的流程大概就是这样的&#xff1a; 请求访问缓存&#xff0c;缓存有数据就返回&#xff0c;缓存无数据就去数据库里面查数据写入到缓存中。 1、缓存穿透问题 但是如果由恶意请求&#xff0c;短时间内大量的访问不存在的数据&#xff0c;这时每个请求…