当前位置: 首页 > news >正文

python--pygame实现各级菜单栏目设置

随着学期的开始,同学们也即将进入计算机相关课程的课程设计了,对于python课程设计的小伙伴,可能有些是需要利用pygame来写应该小游戏的,因为最近很多小伙伴同学也在想我要一些基于python的pygame模块做的游戏项目,此外我的博客里也有一些之前写的pygame游戏项目,有一般难度的python恐龙快跑小游戏(代码量共计300行左右)链接:python--谷歌恐龙快跑小项目_恐龙快跑代码_DY.memory的博客-CSDN博客,python城堡保卫战游戏(代码量共计500行左右)链接:python--城堡保卫战_DY.memory的博客-CSDN博客,也要难度较高一点的如飞机大战(代码里共计800行左右)链接:python--飞机大战(课程设计)_python飞机大战_DY.memory的博客-CSDN博客,python射击闯关游戏(代码量共计1100行左右)链接:python大作业高分项目--射击闯关游戏_python射击游戏_DY.memory的博客-CSDN博客等等项目,这些项目具体使用什么python知识和具体功能什么的我在这就不具体介绍了,需要的小伙伴同学们可以翻看我的具体博客!

今天这期博客主要给大家带来的是利用pygame实现各级菜单栏的功能,因为部分同学在做相关设计的时候可能会用到各级菜单栏的功能来使自己程序更加友好高效,使自己的程序更加灵活,同时也是容易加分的地方,所以这期菜单功能的代码已经写好,同学们只需在对应的部分添加对应要实现的功能即可,好了下面进入代码分享!

代码用的知识自然是pygame和一些python基础,共两个类文件,代码共计120行左右!

代码如下:

button_new.py

import pygame#按钮类
class Button():def __init__(self, x, y, image, scale):width = image.get_width()height = image.get_height()self.image = pygame.transform.scale(image, (int(width * scale), int(height * scale)))self.rect = self.image.get_rect()self.rect.topleft = (x, y)self.clicked = Falsedef draw(self, surface):action = Falsepygame.draw.rect(surface, (0, 0, 0), (self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()))bk = pygame.draw.rect(surface, (255, 255, 255), (self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()), 3)#得到鼠标的位置pos = pygame.mouse.get_pos()#判断鼠标划过按钮并点击if bk.collidepoint(pos):if pygame.mouse.get_pressed()[0] == 1 and self.clicked == False:self.clicked = Trueaction = Truepygame.draw.rect(surface, (0, 0, 255),(self.rect.x, self.rect.y, self.image.get_width(), self.image.get_height()))if pygame.mouse.get_pressed()[0] == 0:self.clicked = False#画按钮到屏幕surface.blit(self.image, (self.rect.x, self.rect.y))return action

main_new.py

import pygame
import button_newpygame.init()#创建游戏窗口
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 600screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
pygame.display.set_caption("Main Menu")#定义游戏变量
game_paused = False
menu_state = "main"#定义字体
font = pygame.font.SysFont("华文楷体", 40)#定义颜色
TEXT_COL = (255, 255, 255)#加载图片
resume_img = font.render("重新开始", True, TEXT_COL)
options_img = font.render("选择操作", True, TEXT_COL)
quit_img = font.render("退出程序", True, TEXT_COL)
video_img = font.render("难度设置", True, TEXT_COL)
audio_img = font.render("音乐设置", True, TEXT_COL)
keys_img = font.render("按键设置", True, TEXT_COL)
back_img = font.render("返回上节", True, TEXT_COL)#创建实例
resume_button = button_new.Button(336, 125, resume_img, 1)
options_button = button_new.Button(336, 250, options_img, 1)
quit_button = button_new.Button(336, 375, quit_img, 1)
video_button = button_new.Button(336, 75, video_img, 1)
audio_button = button_new.Button(336, 200, audio_img, 1)
keys_button = button_new.Button(336, 325, keys_img, 1)
back_button = button_new.Button(336, 450, back_img, 1)def draw_text(text, font, text_col, x, y):img = font.render(text, True, text_col)screen.blit(img, (x, y))#游戏循环
run = True
while run:screen.fill((52, 78, 91))#判断游戏是否暂停if game_paused == True:#判断游戏状态if menu_state == "main":#在屏幕画按钮if resume_button.draw(screen):game_paused = Falseif options_button.draw(screen):menu_state = "options"if quit_button.draw(screen):run = False#判断操作按钮是否开启if menu_state == "options":#定义一个操作按钮if video_button.draw(screen):print("你点击了难度设置")if audio_button.draw(screen):print("你点击了音乐设置")if keys_button.draw(screen):print("你点击了按键设置")if back_button.draw(screen):menu_state = "main"else:draw_text("程序运行中(按空格键暂停)", font, TEXT_COL, 140, 250)#事件处理器for event in pygame.event.get():if event.type == pygame.KEYDOWN:if event.key == pygame.K_SPACE:game_paused = Trueif event.type == pygame.QUIT:run = Falsepygame.display.update()pygame.quit()

运行效果图如下:

 

 

 

 

 

 

相关文章:

python--pygame实现各级菜单栏目设置

随着学期的开始,同学们也即将进入计算机相关课程的课程设计了,对于python课程设计的小伙伴,可能有些是需要利用pygame来写应该小游戏的,因为最近很多小伙伴同学也在想我要一些基于python的pygame模块做的游戏项目,此外…...

C++Primer15.3节练习

练习15.11: debug定义如下所示: //基类 class Quote { public:Quote() default;Quote(const std::string& book,double sales_price):bookNo(book),price(sales_price){ }std::string isbn()const { return bookNo; }virtual double net_price(st…...

解决实际项目中stalled时间过久的问题

背景 在公司参与了一个做度量统计的项目,该项目的特点是页面上的表格、卡片、图标非常多。项目经常出现一种情况:页面加载速度较慢,开始怀疑是由于计算量较大,后端接口相应速度较慢。优化了一版后端接口后(加缓存、优…...

vim编辑器

目录 前言 1.下载安装vim 2.三种模式互换 3.vim配置 前言 vim是从 vi 发展出来的一个文本编译器。 代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。 简单的来说, vi 是老式的字处理器,不过功能已经很齐全了&am…...

Python 使用 pip 安装 matplotlib 模块(秒解版)

长话短说:本人下载 matplotlib 花了大概三个半小时屡屡碰壁,险些暴走。为了不让新来的小伙伴走我的弯路,特意创作本片文章指明方向。 1.首先需要下载 python 我直接是在电脑自带的软件商店里下载的,图方便,当然在官网下…...

python-openCV—入门到精通系列讲解(配效果图)- 总览

前言: python-openCV是一种强大的计算机视觉库,可用于处理图像和视频等多媒体数据。它可以帮助您快速处理和分析图像和视频数据,并且在计算机视觉领域具有广泛的应用。在学习python-openCV时,一个速查手册是一个必不可少的工具。 你可以当本专栏当做一个速查手册,可以看…...

智能小车红外避障原理

红外避障电路红外避障电路由电位器R17,R28;发光二极管D8,D9;红外发射管 D2,D4和红外接收管D3,D5和芯片LM324等组成,LM234用于信号的比较,并产生比较结果输出给单片机进行处理。智能小车红外避障…...

(三十六)Vue解决Ajax跨域问题

文章目录环境准备vue的跨域问题vue跨域问题解决方案方式一方式二上一篇:(三十五)Vue之过渡与动画 环境准备 首先我们要借助axios发送Ajax,axios安装命令:npm i axios 其次准备两台服务器,这里使用node.j…...

【CSAPP】整数表示

文章目录整型数据类型无符号数的编码补码编码确定大小的整数类型练习1练习2有符号数和无符号数之间的转换练习C语言中的有符号数与无符号数练习扩展一个数字的位表示练习1练习2截断数字练习关于有符号数与无符号数的建议练习1练习2使用 位编码整数有两种不同的方式:…...

Python基础2

1. python函数定义 函数定义语法: def 函数名(传入参数): 函数体 return 返回值 —————————————— 参数如果不需要,可以省略返回值如果不需要,可以省略函数必须先定义在使用 注意&#xff…...

【项目立项管理】

项目立项管理 很杂,可以根据左边的列表查看自己不会的 。。。 立项管理主要是解决项目的组织战略符合性问题 开发所需的成本和资源属于经济可行性 承建方组织资源和项目的匹配程度 内部立项目的: 为项目进行资源分配,确定项目绩效目标&am…...

【验证码的识别】—— 极验验证码的识别

前言 (结尾有彩蛋欧) 目前,许多网站采取各种各样的措施来反爬虫,其中一个措施便是使用验证码。随着技术的发展,验证码的花样越来越多。验证码最初是几个数字组合的简单的图形验证码,后来加入了英文字母和混…...

华为OD机试 -旋转骰子(Python) | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 卡片组成的最大数字(Python) | 机试题算法思路 华为OD机试 - 网上商城优惠活动(一)(Python) | 机试题算法思路 华为OD机试 - 统计匹配的二元组个数(Python) | 机试题算法思路 华为OD机试 - 找到它(Python) | 机试题算法思路 华为OD机试…...

C生万物 | 模拟实现库函数strcpy之梅开n度

文章目录【梅开一度】:观察库函数strcpy()的实现【梅开二度】:模仿实现strcpy()【梅开三度】:优化简练代码【梅开四度】:assert()断言拦截【梅开五度】:const修饰常量指针【梅开六度】:还可以有返回值哦&am…...

家庭理财,轻松记账修改收支记录这样操作

我们在记账的时候难免会出现记错或者想修改的地方,又或者是想将之前太久没有用的记账记录删除掉,今天,小编就教大家如何修改收支记录,一起接着往下看吧! 第一步,运行【晨曦记账本】在软件主界面中&#xff…...

河南工程学院2.17蓝桥杯培训

乘法口诀数列:https://www.acwing.com/problem/content/3466/ 剪绳子:https://www.acwing.com/problem/content/68Sin SinSine之舞:http://lx.lanqiao.cn/problem.page?gpidD5272 数列:https://www.acwing.com/problem/content/…...

【JavaSE】数据类型与变量

JAVA之父:詹姆斯高斯林 (James Gosling) 前言: 大家好,我是程序猿爱打拳。今天我给大家讲解的是Java基础中的数据类型。主要讲解的是各个类型的应用场景以及注意事项。 目录 1.数据类型 2.常量与变量 2.1常量 2.2变…...

生成模型技术发展过程

生成模型生成模型和判别模型的差异生成模型的目标是在给定了数据集D,并且假设这个数据集的底层分布(underlying distribution)是Pdata,我们希望够近似出这个数据分布。如果我们能够学习到一个好的生成模型,我们就能用这个生成模型为下游任务做…...

计算机网络第2章(物理层)学习笔记

❤ 作者主页:欢迎来到我的技术博客😎 ❀ 个人介绍:大家好,本人热衷于Java后端开发,欢迎来交流学习哦!( ̄▽ ̄)~* 🍊 如果文章对您有帮助,记得关注、点赞、收藏、…...

4564: 保留尾部*

描述规定输入的字符串中只包含字母和*号,除了尾部的*号之外,请将字符串中其他*号全部删除。输入输入数据包括一串字符串,只包含字母和*,总长度不超过80。输出输出按要求删除*后的字符串。样例输入*******A*BC*DEF*G****样例输出AB…...

AUTOSAR SPI配置进阶:如何为你的车载传感器设计高效可靠的通信序列?

AUTOSAR SPI配置进阶:车载传感器通信序列设计实战指南 在智能驾驶系统开发中,SPI总线作为连接毫米波雷达、IMU等关键传感器的神经末梢,其通信效率直接影响着环境感知的实时性。传统配置手册往往止步于基础参数说明,而本文将带您深…...

筑牢数据安全底座!百度智能云数据库GaiaDB分布式版通过『国密认证』

近日,百度智能云自研的关系型数据库GaiaDB分布式版获得由国家密码管理局商用密码检测认证中心颁发的《商用密码产品认证证书》,通过GM/T 0028《密码模块安全技术要求》安全等级第二级认证。这一认证标志着GaiaDB分布式版密码模块在密码安全设计、密钥管理…...

百考通:AI全流程智能化驱动数据分析,让数据价值高效落地

在数字化浪潮席卷各行各业的今天,数据已成为核心生产要素,但如何从海量数据中挖掘价值、辅助决策,始终是企业与个人面临的核心难题。传统数据分析流程繁琐、技术门槛高、周期漫长,让许多非专业人士望而却步。百考通(ht…...

百考通:AI全流程智能化赋能,让每一份调研与设计都高效落地

在数字化时代,市场调研、产品设计、学术研究等场景中,问卷设计作为核心环节,直接影响着数据收集的质量与工作推进的效率。传统问卷设计往往面临流程繁琐、耗时耗力、问题设计不精准等痛点,而百考通(https://www.baikao…...

从‘它又挂了’到‘稳如老狗’:我是如何用Prometheus+Grafana给自家小破站做监控的

从“它又挂了”到“稳如老狗”:我是如何用PrometheusGrafana给自家小破站做监控的 凌晨三点,手机突然响起钉钉告警——这已经是本周第三次被“502 Bad Gateway”的提示音吵醒。揉着惺忪睡眼重启Nginx时,我突然意识到:这个用业余时…...

ArduinoFritzApi:嵌入式设备对接FRITZ!Box的TR-064协议实践

1. ArduinoFritzApi 库深度解析:面向嵌入式系统的 FRITZ!Box 自动化控制实践指南1.1 库定位与工程价值ArduinoFritzApi 是一个专为嵌入式平台设计的轻量级 C 库,其核心目标是实现对 AVM 公司全系智能家庭设备(FRITZ!Box 路由器、FRITZ!DECT 插…...

【Frida Android】实战篇:Frida-Trace 进阶追踪——JNI 函数调用栈与参数解析

1. 深入理解JNI函数调用栈追踪 第一次用Frida-Trace追踪JNI函数时,最让我困惑的就是如何看清整个调用链路。记得当时分析一个金融类APP,发现它调用了十几个so库,函数调用关系像蜘蛛网一样复杂。后来通过反复实践,终于摸索出一套完…...

RimSort:重新定义RimWorld模组管理的智能工具

RimSort:重新定义RimWorld模组管理的智能工具 【免费下载链接】RimSort 项目地址: https://gitcode.com/gh_mirrors/ri/RimSort 当你花费数小时手动调整上百个RimWorld模组的加载顺序,却依然遭遇游戏崩溃时;当你在多个平台间切换下载…...

IBM Rhapsody 9.0.2 配置与编译问题解决指南

1. IBM Rhapsody 9.0.2环境配置常见问题解析 第一次接触IBM Rhapsody 9.0.2时,我遇到了不少配置上的坑。这个强大的系统建模工具虽然功能全面,但在环境搭建阶段确实需要特别注意几个关键点。最典型的问题就是Visual Studio版本兼容性,这也是大…...

从零理解自然数系统:用Python类模拟皮亚诺公理(含加法乘法实现)

从零构建自然数系统:用Python类实现皮亚诺公理与算术运算 在计算机科学中,自然数系统的构建是一个令人着迷的基础课题。当我们抛开编程语言内置的数字类型,仅用最基本的类和递归概念来重新定义自然数时,会惊讶地发现数学的抽象之美…...