pygam第4课——颜色监测(迷宫小游戏)

news2024/11/17 11:46:30

前言:前三节课我们学习了,窗口的创建、图片的加载、常用鼠标事件的等。今天我们学一个颜色的监测,并自制一个迷宫小游戏。那我们一下来看看吧

前面的三节课在这里,大家记得关注收藏一下:

在这里插入图片描述

视频演示

在这里插入图片描述

1、界面搭建

  • 背景图片(800x600):
    在这里插入图片描述

上一节课我们学习了,鼠标事件,这一节课我们学习一下按键事件

按键事件的代码用法:

while True:
	for event in pygame.event.get():
		if event.type == pygame.QUIT:
		        exit()
		if event.type == pygame.KEYDOWN:
		    if event.key == pygame.K_LEFT:
		        按下左键执行的代码块
		    elif event.key == pygame.K_RIGHT:
		        按下右键执行的代码块
		    elif event.key == pygame.K_UP:
		        按下上键执行的代码块
		    elif event.key == pygame.K_DOWN:
		        按下下键执行的代码块
		   ...
		   ...
		   ...
  • 常见的按键事件
pygame.K_LEFT左键
pygame.K_RIGHT右键
pygame.K_UP上键
pygame.K_DOWN下键
  • 更多的按键事件,请移步至官网,点我查看
    在这里插入图片描述

颜色检测:

sc.get_at((x,y))
sc : 窗口对象
get_at((x,y)),函数里是一个元祖,表示当前坐标所处的颜色,颜色返回值为(r,g,b)

sc.get_at((x-9,y))

逻辑分析:

  • 1、以迷宫背图片为窗口背景(800x600)
  • 2、利用上节课的画圆形代码,绘制一个小圆
  • 3、获取小圆的四个顶点坐标
  • 4、判断小圆四个顶点坐标所处的颜色,如果碰到了黑线。返回(0,0,0),则表示游戏失败;如果碰到了终点的绿色方框,则表示游戏胜利。

按键的持续监测与间隔时间

如果不写这一行,小球将无法持续运动

pygame.key.set_repeat(1,10)

完整版代码:

# 完整代码
# 请完成迷宫游戏
import pygame,sys
import time
pygame.init()
#2_2 :设置持续按键时间间隔
pygame.key.set_repeat(1,10)
#设定好颜色变量,方便下面使用
red = (255,0,0)
black = (0,0,0)
green = (0,255,0)
# 3_2:设置变量,判断是否胜利
win = False
#知识进阶,计算时间
mytime1 = time.time()
# 1:创建窗口、贴上小球
sc = pygame.display.set_mode((860,660))
bg = pygame.image.load("./image/maze.png")
title = pygame.display.set_caption("迷宫")
sc.blit(bg,(0,0))
#由于小球的位置是会变化的,所以要线设置变量
# x = 760 作弊坐标
# y = 600 作弊坐标

x = 25
y = 25

# replay = input("xxxxxxxxxxxxxxxxxxxxx")
def gong(x,y):
    while True:
        sc.blit(bg,(0,0))
        pygame.draw.circle(sc,red,(x,y),8)
        pygame.display.update( )
        # 2_1:获取键盘事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                    exit()
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    x-=1
                elif event.key == pygame.K_RIGHT:
                    x+=1
                elif event.key == pygame.K_UP:
                    y-=1
                elif event.key == pygame.K_DOWN:
                    y+=1
        # 3_1 : 侦测颜色,判断输赢
        if sc.get_at((x-9,y))==black or sc.get_at((x+9,y))==black or sc.get_at((x,y+9))==black or sc.get_at((x,y-9))==black:
            # 3_2:设置变量,判断是否胜利
            win = False
            break
        if sc.get_at((x-9,y))==green or sc.get_at((x+9,y))==green or sc.get_at((x,y+9))==green or sc.get_at((x,y-9))==green:
            win = True

            break
gong(x,y)
#3_3 判断胜利或失败
while True:
    if win == True:
        mytime2 = time.time()
        mytime = int(mytime2-mytime1)
        print("恭喜,你逃出了迷宫,用时:%s秒"%mytime)
        replay = input("你想再玩一遍吗?(y or n )")
        if replay == "y":
            gong(x,y)
        else:
            print("退出游戏")
            sys.exit()
    else:
        print("真遗憾,你输了")
        replay = input("你想再玩一遍吗?(y or n )")
        if replay == "y":
            gong(x,y)
        else:
            print("退出游戏")
            sys.exit()

希望对大家有帮助

致力于办公自动化的小小程序员一枚#

都看到这了,关注+点赞+收藏=不迷路!!

如果你想知道更多关于Python办公自动化的知识各位大佬给个关注吧!

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

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

相关文章

开发者关系工程师如何帮助开发者在Sui上构建

近期,我们与Sui开发者关系负责人Brian Hennessey-Hsien进行了对话,就Sui上的开源、去中心化和开发者成就等话题展开讨论。 日前,我们采访了Sui基金会的开发者关系负责人Brian Hennessey-Hsieh,共同探讨了其对于Web3中开发者发展历…

冷热温度正反向控制技术在换热器热疲劳试验中的应用

摘要:空调换热器需要进行可靠性试验以满足整机产品在不同环境下的寿命周期,温度交变试验是可靠性试验中是较为关键的一项。本文在现有PLC交变温度控制技术基础上,提出了一种模块式的改进解决方案,即增加了专用的高精度PID调节器分…

不入耳耳机的正确打开方式,韶音OpenFit诠释耳机的“舒适圈”

文 | 智能相对论 作者 | 佘凯文 总有人说,人们需要跳出舒适圈,逼着自己去不断挑战。也有人问,我满足现状,为什么要跳出舒适圈?说到底,两种说法都没有错,不过该不该走出舒适圈或许也得分“场合…

麻了,最好不要去外包,干了三年,废了一半......

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

【coding加油站】vue单页面图书管理系统

1、引言 设计结课作业,课程设计无处下手,网页要求的总数量太多?没有合适的模板?数据库,java,python,vue,html作业复杂工程量过大?毕设毫无头绪等等一系列问题。你想要解决的问题&am…

数据结构课程设计——运动会分数统计

运动会分数统计 数据结构课程设计任务书 学生姓名:xxx 专业班级:软件工程 指导教师: 工作单位: 题 目: 运动会分数统计 基础要求: 要求具有C语言的理论基础…

ProtoBuf安装及避坑指南

文章目录 安装前注意事项(避坑)ProtoBuf在Linux下的安装protoBuf 测试demo 安装前注意事项(避坑) 1.安装前,我们需要升级g,使用较新的g编译器。 2.在安装过程中,出现问题,可以选择安装其他版本,在加压文件下执行make …

NFTScan:05.15~05.21 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2023.05.15 ~ 2023.05.21 NFT Hot News:NFT 热点资讯 01/ DID 解决方案提供商 Lifeform 以 3 亿美元估值完成 IDG Capital 领投的 B 轮融资 5 月 15 日,去中心化…

Rocketmq常用使用场景

RocketMQ 是阿里开源的分布式消息中间件,跟其它中间件相比,RocketMQ 的特点是纯JAVA实现 基础概念 Producer: 消息生产者,负责产生消息,一般由业务系统负责产生消息 Producer Group: 消息生产者组&#xf…

ESP32CAM---利用Vscode阅读源码

前言 (1)首先,我在此吐槽一些,arduino平台的代码阅读功能,是真滴垃圾。气死我了。配置这玩意搞了半天,还没搞好。 (2)最后我决定使用Vscode阅读arduino的代码。arduino IDE负责编译程…

智能工厂已成为制造业数字化转型的重心

我国“十四五”规划纲要提出,要深入实施智能制造和绿色制造工程,发展服务型制造新模式,推动制造业高端化智能化绿色化。随着5G等新一代信息技术与制造业不断深度融合,制造业的智能化发展成为未来我国制造业转型升级的重要方向。《…

MyBatisPlus快速入门(一)MyBatisPlus简介、历史和优势

一、什么是 MyBatisPlus?二、MyBatisPlus 相关文档2.1 官网2.2 Github源码2.3 官方文档 三、MyBatisPlus 的历史四、MyBatisPlus 的特性和优势4.1 特性4.2 优势 五、如何学习 MyBatisPlus & 专栏计划 一、什么是 MyBatisPlus? MyBatisPlus&#xff…

MyBatis中使用第三方分页插件PageHelper完成分页功能

文章目录 一、前言二、基于插件拦截方式1、自定义插件2、使用第三方插件完成分页1、分页插件的配置2、分页插件的使用 一、前言 分页是web应用程序非常重要的一个技术。数据库中的数据可能是成千上万的,不可能把这么多的数据一次显示在浏览器上面。一般根据每行数据…

2023年4月CSDN客服月报|解决3个重大问题和26个次要问题,采纳1个用户建议

听用户心声,解用户之需。hello,大家好,这里是《CSDN客诉报告》第19期,接下来就请大家一同回顾我们4月份解决的bug~ 一、重大问题 1、【猿如意】ChitGPT近期老是提示“我回答不过来”的问题 反馈量:10 2、…

【星戈瑞】Sulfo-Cyanine7 maleimide磺化CY7标记马来酰亚胺

水溶性Cyanine7 mal是一种常用的细胞标记物,可以被用于细胞荧光成像等应用中。它的分子结构中含有Cyanine7和mal两部分,其中Cyanine7是一种红外荧光染料,可以发出红外光,而mal则是一种水溶性的化合物,可以使Cyanine7分…

响应式与自适应的区别

响应式与自适应的区别: 响应式:一套适配多端适配不同的屏幕设备,即不同的视口分辨率 自适应:多套页面不同视口分辨率大小显示同样的网页rem、百分比等相对单位 注意: 在开发中,项目的响应式,一些…

Java技术接单

今天给大家介绍一个阶段性(周期性)能获取一定收益的Java技术接单群,分享给大家!主要对搞Java的粉丝有帮助,因为可以赚点小钱,对Java技术的要求不高! 那些感兴趣或者想直接加技术群的我给大家讲一…

JAVA8 Stream

1 Steam流式思想概述 Stream和IO流(InputStream/OutputStream)没有任何关系,请暂时忘记对传统IO流的固有印象! Stream流式思想类似于工厂车间的“生产流水线”,Stream流不是一种数据结构,不保存数据,而是对数据进行加…

Vue 3 第二十一章:组件九(组件高级特性-组件的混入和继承)

文章目录 1. 组件的混入2. 组件的继承总结 Vue 中的组件混入和继承功能允许我们在多个组件之间共享代码,从而提高代码的可重用性和可维护性。 1. 组件的混入 混入是一种将多个对象合并为一个对象的技术。在 Vue 3 中,我们可以使用 mixins 属性来定义混…

ThingsBoard的Actor模型

0、概述 下面是我从网上查阅资料总结下来的. 1、背景 多线程编程是每个程序员的基本功,同时也是开发中的难点,处理各种“锁”的问题是让人十分头痛的一件事。例如,设计一个转账功能,怎么保证在多线程下能正常运行?你可能会说,这个简单,在进行转账操作前,先对两个账户…