python pygame事件与事件处理

news2024/10/6 22:27:34

本期是接上期python pygame库的略学内容最后一个步骤,游戏与玩家交互的内容。

一、什么是事件

游戏需要与玩家交互,因此它必须能够接收玩家的操作,并根据玩家的不同操作做出有针对性的响应。程序开发中将玩家会对游戏进行的操作称为事件(Event),根据输入媒介的不同,游戏中的事件分为键盘事件、鼠标事件和手柄事件等。

pygame.locals中常见事件的产生及参数:

事件产生途径参数解释
KEYDOWN键盘上的按键被按下unicode记录安静Unicode值
key按下或放开的键的键值
mod包含组合键信息
KEYUP键盘上的键被放开key
mod
MOUSEMOTION鼠标移动pos鼠标指针操作的位置,包含(x,y)
rel当前位置与上次鼠标事件时鼠标指针位置间的距离
buttons含有3个数字的元组,元组中数字的取值为(0,1,3),依次代表为左键、滚轮和右键
MOUSEUTTONDOWN鼠标键按下pos
button整型数值,1表示单击鼠标左键,2表示单击滚轮,3表示单击右键,4表示向上滑动滚轮,5表示向下滑动滚轮
MOUSEBUTTONUP鼠标键放开pos
button

代码演示:

# 导入模块
import pygame,time
from pygame.locals import *

# 定义窗口高度和宽度、颜色
WIN_WIDTH = 658
WIN_HEIGHT = 243
# 设置颜色变量
BG_COLOR = (125,125,0)
MS_COLOR=(95,200,255)
MSGBG_COLOR=(23,78,20)


FPS=60
def main():
    # 初始化模块
    pygame.init()
    # 创建窗体,即创建Surface
    WINSET=pygame.display.set_mode((WIN_WIDTH,WIN_HEIGHT))
    # 为窗口填充背景色
    WINSET.fill(BG_COLOR)
    # 设置窗口标题
    pygame.display.set_caption('小游戏')

    # 加载图片
    # image=pygame.image.load('D:/Software/pycharm/网页请求/小游戏/image/wallhaven-j5mj3w_1920x1080.png')
    # 绘制图片
    # WINSET.blit(image,(0,0))
    # 创建字体对象
    BASICFONT=pygame.font.Font("D:/Software/字体/思源黑体/字体文件/SourceHanSansCN-Bold.otf",25)
    # 渲染字体
    msg_surf=BASICFONT.render('初始化…',True,MS_COLOR,MSGBG_COLOR)
    # 绘制渲染到游戏窗口
    WINSET.blit(msg_surf,(0,0))
    # 制作背景副本
    base_surf=WINSET.copy()
    # 渲染字体
    auto_surf=BASICFONT.render('自动',True,MS_COLOR,MSGBG_COLOR)
    # 获取矩形属性
    auto_rect=auto_surf.get_rect()
    # 重设横坐标
    auto_rect.x=WIN_WIDTH-auto_rect.width-10
    # 重设纵坐标
    auto_rect.y=WIN_HEIGHT-auto_rect.height-10
    # 绘制字体
    WINSET.blit(auto_surf,auto_rect)
    # 设置游戏时间钟,创建Colock对象
    FPSCOLOCK = pygame.time.Clock()
    # 在背景的不同位置绘制方块,制造移动效果
    for i in range(0,WIN_HEIGHT,2):
        FPSCOLOCK.tick(FPS)
        # 绘制
        WINSET.blit(auto_surf,auto_rect)
        pygame.display.update()
        auto_rect.x-=10
        if i+2 <WIN_HEIGHT:
            WINSET.blit(base_surf,(0,0))
    # 刷新窗口
    pygame.display.update()
    # 睡眠十秒
    time.sleep(10)
    # 利用无线循环
    while True:
        # 控制帧率
        FPSCOLOCK.tick(FPS)
        for event in pygame.event.get():
            if event.type==MOUSEBUTTONUP:
                if auto_rect.collidepoint(event.pos):
                    print("单击了按钮")
                else:
                    print("单击了空白区域")
            elif event.type == KEYUP:
                if event.key in (K_LEFT,K_a):
                    print('向右键')
                elif event.key in (K_RIGHT,K_d):
                    print('向左键')
                elif event.key in (K_UP,K_w):
                    print('向上键')
                elif event.key in (K_DOWN,K_s):
                    print('向下键')
                elif event.key == K_ESCAPE:
                    print('退出游戏')
                    pygame.quit()


    # 卸载所有模块
    pygame.quit()

if __name__ =='__main__':
    main()

二、接苹果小游戏:

import random
from sys import exit
import pygame
from pygame.locals import *

# 屏幕宽度和高度
screen_width = 450
screen_height = 560

# 模块初始化
pygame.init()
# 绘制窗口
screen = pygame.display.set_mode((screen_width, screen_height), 0, 32)
# 游戏标题
pygame.display.set_caption("小人接苹果")
# 分数字体,字号
run_time_font = pygame.font.SysFont('D:/Software/字体/思源黑体/字体文件/SourceHanSansCN-Bold.otf', 48)

def game_start():
    # 加载图片
    peasant = pygame.image.load('peasant.png')
    apples = pygame.image.load('apples.png')
    game_background = pygame.image.load('background.png')
    # 苹果下落的速度
    speed = 1
    # 分数
    score = 0
    # 农民的位置信息
    peasant_x = 200
    peasant_y = 470
    # 设置移动速度
    peasant_x_speed = 1
    peasant_move = {K_LEFT: 0, K_RIGHT: 0}
    # 苹果坐标列表
    pos_list = []
    # 绘制初始化苹果
    for i in range(7):
        x = random.randint(0, 390)
        y = random.randint(0, 560)
        pos_list.append([x, y])
    # 帧率控制Clock对象
    clock = pygame.time.Clock()
    while True:
        screen.blit(game_background, (0, 0))
        # 接收信息处理
        for event in pygame.event.get():
            if event.type == QUIT:
                exit()
            if event.type == KEYDOWN:
                if event.key in peasant_move:
                    peasant_move[event.key] = 1
            elif event.type == KEYUP:
                if event.key in peasant_move:
                    peasant_move[event.key] = 0
            # 距上次调用clock对象时间
            second_time_passed = clock.tick(60)
            # 定位农民移动后坐标
            peasant_x -= peasant_move[K_LEFT] * \
                         peasant_x_speed * second_time_passed
            peasant_x += peasant_move[K_RIGHT] * \
                         peasant_x_speed * second_time_passed
            # 判断农民边界条件
            if peasant_x > 450 - peasant.get_width():
                peasant_x = 450 - peasant.get_width()
            elif peasant_x < 0:
                peasant_x = 0

            screen.blit(peasant, (peasant_x, peasant_y))
            # 坐标循环,从y轴的上限往下限方向飘落
            for y in pos_list:
                y[1] = y[1] + speed
                # 打印苹果
                screen.blit(apples, (y[0], y[1]))
                if y[1] >= 560:
                    y[1] = -apples.get_height()
                # 碰撞检测
                if peasant_x < y[0] < peasant_x + peasant.get_width() and peasant_y - apples.get_height() < y[
                    1] < peasant_y:
                    score += 10
                    pos_list.remove([y[0], y[1]])
                    x, y = random.randint(0, 390), random.randint(0, 560)
                    if len(pos_list) <= 6:
                        pos_list.append([x, -y])
            screen_score = run_time_font.render(
                '分数:' + str(score), True, (255, 0, 0)
            )
            screen.blit(screen_score, (0, 0))
            # 刷新显示
            pygame.display.update()


if __name__ == '__main__':
    while True:
        game_start()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微服务架构与Dubbo

一、微服务架构 微服务架构是一种架构概念&#xff0c;旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦。 分布式系统式若干独立系统的集合&#xff0c;但是用户使用起来好像是在使用一套系统。 和微服务对应的是单体式开发&#xff0c;即所有的功能打包在一个WAR…

关于CRMEB 商城系统商业授权的那些事儿

现在&#xff0c;很多时候我们都会听到“授权”这个词&#xff0c;在CRMEB的商城系统产品中&#xff0c;商业授权也是一个重要环节&#xff0c;今天&#xff0c;我们就来了解一下关于CRMEB商城系统授权的那些事儿。 一、为什么要进行商业授权&#xff1f; 正版商业授权是对用户…

【Linux】详解如何利用共享内存实现进程间通信

一、共享内存&#xff08;Shared Memory&#xff09;的认识 共享内存&#xff08;Shared Memory&#xff09;是多进程间共享的一部分物理内存。它允许多个进程访问同一块内存空间&#xff0c;从而在不同进程之间共享和传递数据。这种方式常常用于加速进程间的通信&#xff0c;因…

软考130-上午题-【软件工程】-系统维护

一、系统维护概述 软件维护是软件生命周期中的最后一个阶段&#xff0c;处于系统投入生产性运行以后的时期中&#xff0c;因此不属于系统开发过程。 软件维护是在软件已经交付使用之后为了改正错误或满足新的需求而修改软件的过程&#xff0c;即软件在交付使用后对软件所做的一…

李沐-19 卷积层【动手学深度学习v2】

记录下关于权重下标变换的理解&#xff1a; 从原来的Wi,j到Wi,j,k,l是从二维到四维的过程&#xff0c;如下图所示 对全连接层使用平移不变性和局部性得到卷积层&#xff0c;这是卷积层的引入&#xff0c;下方Vi,j,a,b--->Va,b表示了平移不变性&#xff0c;给a,b限制在||内保…

C语言 【函数】

1.函数概述 函数是一种可重用的代码块&#xff0c;用于执行特定任务或完成特定功能 函数作用&#xff1a;对具备相同逻辑的代码进行封装&#xff0c;提高代码的编写效率&#xff0c;实现对代码的重用 2. 函数的使用 2.1 无参无返回值 #include <stdio.h>// 函数名…

光纤收发器的注意事项

光纤收发器有各种不同的类别&#xff0c;而实际使用中最受关注的是根据光纤收发器的不同类别&#xff1a;SC连接器光纤收发器和FC/ST连接器光纤收发器。 当使用光纤收发器连接到不同的设备时&#xff0c;必须小心使用不同的端口。 1.光纤收发器与100Base TX设备&#xff08;交…

IP定位技术原理详细阐述

IP定位技术原理主要基于IP地址与地理位置之间的关联&#xff0c;通过一系列的技术手段&#xff0c;实现对网络设备的物理位置进行精确或大致的定位。以下是对IP定位技术原理的详细阐述。 首先&#xff0c;我们需要了解IP地址的基本概念。IP地址是互联网协议地址的简称&#xff…

【leetcode】双指针算法技巧——滑动窗口

标题&#xff1a;【leetcode】双指针算法技巧——滑动窗口 水墨不写bug 正文开始&#xff1a; 滑动窗口介绍 滑动窗口是一种常用的算法技巧&#xff0c;用于解决一些涉及 连续子数组或子串 的问题。它的基本思想是 维护一个窗口&#xff0c;通过 在窗口内移动 来寻找满…

LeetCode刷题总结 | 图论3—并查集

并查集理论基础 1.背景 首先要知道并查集可以解决什么问题呢&#xff1f; 并查集常用来解决连通性问题。大白话就是当我们需要判断两个元素是否在同一个集合里的时候&#xff0c;我们就要想到用并查集。 并查集主要有两个功能&#xff1a; 将两个元素添加到一个集合中。判…

Day18_学点儿设计模式_MVC和三层架构

0 优质文章 MVC与三层架构 什么是MVC&#xff1f;什么是三层架构&#xff1f; 三层架构与MVC详细讲解 MVC三层架构&#xff08;详解&#xff09; 1 MVC MVC全名是Model View Controller&#xff0c;是模型(model)&#xff0d;视图(view)&#xff0d;控制器(controller)的缩写…

【Vue3】setup语法糖的使用

文章目录 setup简介使用vite-plugin-vue-setup-extend插件 指定组件名字 setup简介 <script setup> 是在单文件组件 (SFC) 中使用组合式 API 的编译时语法糖 相比较普通的<script> ,它有以下优势&#xff1a; 更少的样板内容&#xff0c;更简洁的代码。能够使用纯…

图论学习总结

文章目录 图论学习总结前言一、基础知识图的存储图的遍历 二、最短路多源最短路 F l o y d Floyd Floyd​ 算法例题及变形** e g 1 &#xff1a; S o r t i n g I t A l l O u t eg1&#xff1a;Sorting\ It\ All\ Out eg1&#xff1a;Sorting It All Out ( A c W i n g 343 /…

数字次数排序-第12届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第53讲。 数字次数排序&…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…

【数据结构】习题之消失的数字和轮转数组

&#x1f451;个人主页&#xff1a;啊Q闻 &#x1f387;收录专栏&#xff1a;《数据结构》 &#x1f389;前路漫漫亦灿灿 前言 消失的数字这道题目我会和大家分享三种思路。 还有一道题目是轮转数组&#xff0c;&#xff0c;也会分享三种思路&#xff0c;大…

P1278 单词游戏 简单搜索+玄学优化

单词游戏 传送门 题目描述 Io 和 Ao 在玩一个单词游戏。 他们轮流说出一个仅包含元音字母的单词&#xff0c;并且后一个单词的第一个字母必须与前一个单词的最后一个字母一致。 游戏可以从任何一个单词开始。 任何单词禁止说两遍&#xff0c;游戏中只能使用给定词典中含有…

智慧电网数据可视化运维云平台解决方案

智慧电力概述 智慧电力是通过采用先进的大数据、云计算、物联网、边缘计算等技术&#xff0c;实现生产信息与管理信息的智慧&#xff0c;实现人、技术、经营目标和管理方法的集成&#xff0c;是企业管理思想的一个新突破。智慧电厂建设具备智能化、一体化、可观测、可互动、自…

【新知实验室 - TRTC 实践】音视频互动 Demo、即时通信 IM 服务搭建

一、TRTC 初识 TRTC 是什么 TRTC&#xff08;Tencent RTC&#xff09;腾讯实时音视频&#xff0c;源自于 QQ 音视频团队&#xff0c;是基于 QQ 音视频多年来的音视频技术积累&#xff0c;位于腾讯云的 RTC 云服务。TRTC 支持腾讯会议、企业微信直播、微信视频号、腾讯云课堂、…

虚拟机vm桥接模式linux(centos,ubuntu)联网

台式机网线 查看宿主机网络 编辑虚拟机—>虚拟网络编辑器–>更改设置 选择&#xff0c;确定 进入linux系统 输入ip addr找到自己的网卡 我的是eno16777736 centos&#xff1a; 编辑 HWADDR"00:0C:29:54:CE:B8" TYPE"Ethernet" BOOTPROTO"…