python小游戏——躲避球(可当课设)

游戏简介:

没有美术,画面简洁(懒得做)。玩家控制小球躲避敌人(上下左右,闪避),敌人体积越大速度越慢,随机生成道具球(目前只有生命球),靠近道具球可拾取。

未来展望:

1. 添加其他道具球

2. 添加攻击手段,目前只能闪避。

3. 添加耐力条

4. 添加更多属性

核心代码

玩家移动

def player_move(space_down, player):"""控制玩家移动处理:param space_down: 是否按下空格:param player: 玩家:return:"""global monitorif space_down:speed = player.dodge_speedelse:speed = player.speedkeys = pygame.key.get_pressed()if keys[pygame.K_LEFT]:player.x -= speedif keys[pygame.K_RIGHT]:player.x += speedif keys[pygame.K_UP]:player.y -= speedif keys[pygame.K_DOWN]:player.y += speedif player.x < 0:player.x = monitor.width + player.xelif player.x > monitor.width:player.x = player.x - monitor.widthif player.y < 0:player.y = monitor.height + player.yelif player.y > monitor.height:player.y = player.y - monitor.height

生成小怪

def make_enemy():"""生成小怪:return:"""global monitor, scoreboss = Falseif score % 20000 == 0 and score != 0:boss = TruesizeList = [10, 30, 50, 70, 100, 130, 150, 180, 200, 250]random_int = random.randint(1, 10) if boss is False else 20enemy = Enemy(atc=random_int,max_health=random_int,defense=0,speed=(11 - random_int) * 1.5 if boss is False else 1.5,attribute=0,x=random.uniform(0.1, 1) * monitor.width,y=random.uniform(0.1, 1) * monitor.height,size=sizeList[random_int - 1] if boss is False else 500)return enemy

道具球处理

def propBall_handle(propBall_list, window, player):"""道具球处理:param propBall_list::param window::param player::return:"""count = 0for propBall in propBall_list:pygame.draw.circle(window, propBall.color, (propBall.x, propBall.y), propBall.size)propBall.moveToPlayer(player.x, player.y)if detectIntersect(player, propBall):propBall_function(player, propBall)del propBall_list[count]count += 1if score % 200 == 0:propBall = generate_propBall()if propBall is not None:propBall_list.append(propBall)return propBall_list

游戏主要逻辑

def main():global is_running, is_playing, font, pass_time, pass_time_made, score, start_time, monitorpropBall_list = []window = pygame.display.set_mode((monitor.width, monitor.height))pygame.display.set_caption("demo")player = init_player()health_bal = pygame.Rect(20, 20, player.health * 20, 20)enemyList = [make_enemy()]button_playAgain = pygame.Rect(monitor.width // 2 - button_width // 2, monitor.height * 0.6,button_width, button_height)button_quit = pygame.Rect(monitor.width // 2 - button_width // 2,monitor.height * 0.6 + 30 + button_height,button_width, button_height)buttonList = [button_playAgain, button_quit]while is_running:score += 1window.fill(color_dict['black'])  # 填充黑色health_bal.width = player.health * 20space_down = Falsefor event in pygame.event.get():if event.type == pygame.QUIT:is_running = Falseelif event.type == KEYDOWN:if event.key == K_SPACE:space_down = Trueif event.type == pygame.MOUSEBUTTONDOWN:mouse_pos = pygame.mouse.get_pos()button_serialNum = button_clicked(buttonList, mouse_pos)if button_serialNum == 0:is_playing = Trueplayer = init_player()enemyList = [make_enemy()]elif button_serialNum == 1:is_running = Falseif is_playing:if pass_time_made is False:pass_time = 0start_time = time.perf_counter()pass_time_made = Trueif player.health == 0:is_playing = Falseif score % 400 == 0:enemyList.append(make_enemy())propBall_list = propBall_handle(propBall_list, window, player)player_move(space_down, player)  # 玩家移动player_twinkle(player, window)  # 玩家绘制draw_healthBar(window, player, health_bal)  # 血条更新make_enemyThreading(enemyList, window, player)  # 小怪更新draw_score(window)pass_time = int(time.perf_counter() - start_time)else:draw_scoreTitle(window)draw_button(buttonList, window)pass_time_made = FalsepropBall_list = []enemyList = []pygame.display.flip()  # 刷新屏幕time.sleep(0.01)pygame.quit()

游戏画面

完整代码

有需要者自取,盘内还有打包好的exe文件

链接:https://pan.baidu.com/s/1rZ1xNZJYtvyXPIG9Rgh5Hw
提取码:iq6l

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

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

相关文章

​14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Redis内存淘汰

Redis内存淘汰 Redis可以存储多少数据 maxmemory配置&#xff0c;默认是注释掉的。 #maxmemory <bytes>我们可以主动配置maxmemory&#xff0c;maxmemory支持各种单位&#xff0c;默认是字节 maxmemory 1024 maxmemory 1024KB maxmemory 1024MB maxmemory 1024GB当Re…

shallowReactive 与 shallowRef

除了之前的 ref与reactive 之外&#xff0c;Vue3 还准备了另外两个API&#xff0c;也是用来对响应式数据做处理&#xff0c;那就是 shallowReactive 与 shallowRef shallowReactive 文档解释&#xff1a;reactive() 的浅层作用形式&#xff0c;只能定义对象类型的数据。和 r…

Spring Boot整合Sentry

Spring Boot整合Sentry Sentry搭建Sentry中新建项目集成SpringBoot1. 添加依赖2. 配置Sentry4. 日志集成&#xff08;可选&#xff09;5. 测试Sentry集成6. 配置实时告警配置Alert Settings配置警报规则 发送消息服务代码参照文档 Sentry 是一个日志平台&#xff0c;分为客户端…

CMakeLists.txt模板

#设置编译该CMakeLists.txt文件所需要的最低cmake版本 CMAKE_MINIMUM_REQUIRED(VERSION 最低版本号)# 该项目名称 PROJECT(项目名称)SET(CMAKE_CXX_STANDARD 11)SET(CMAKE_C_STANDARD 11)# 此行可以理解为将路径下所有的文件装载到自定义集合filelist中 FILE(GLOB filelist &q…

Vite + Vue 3 项目中实现路由自动化完整步骤。

下面是从创建项目到实现路由自动化的完整步骤 在 Vite Vue 3 项目中实现路由自动化可以通过使用文件系统路由生成器来简化路由管理过程。以下是实现路由自动化的完整步骤&#xff1a; 1.创建 Vite Vue 3 项目 如果你还没有一个 Vite Vue 3 项目&#xff0c;可以使用以下命令…

利用MongoDB进行数据治理,防范构建生成式AI应用程序时的潜在安全风险

生成式人工智能&#xff08;生成式AI&#xff09;正在蓬勃发展&#xff0c;许多企业和初创公司正在运用AI工具来解决各自的用例问题。随着企业逐渐适应市场上的新技术范式转移&#xff0c;开发者社区和开源模型也在不断发展壮大。 构建智能生成式AI应用程序需要灵活运用数据。…

基础算法--高精度数据(1)

高精度数据处理一般内容简单&#xff0c;写代码难度较大&#xff0c;可能部分内容涉及基础数学、初等数论等知识。请小心食用。不过本节不会给大家太难的高精度处理&#xff0c;我们第一次接触&#xff0c;不能劝退大家对吧。 高精度算法是指&#xff0c;利用基础或高级的数学…

盘古信息IMS MCM制造协同管理系统:为中小企业数字化转型量身打造的数字化方案

近年来&#xff0c;全球经济的不稳定性&#xff0c;给中小企业的经营和发展带来了巨大的挑战。为提升企业竞争力&#xff0c;中小企业纷纷谋求数字化转型路径&#xff0c;优化生产流程、提高运营效率、降低生产成本&#xff0c;以应对变幻莫测的市场环境。IMS MCM是盘古信息为广…

进阶-4.视图、存储过程、存储函数、触发器

视图、存储过程、存储函数、触发器 1.视图1.1 介绍1.2 语法1.3 视图的检查选项1.4 视图的更新1.5 视图作用1.6 案例 2.存储过程21. 介绍2.2 特点2.3 语法2.4 变量2.4.1 系统变量2.4.2用户自定义变量2.4.3 局部变量 2.5参数2.6条件语句2.6.1 if 语法2.6.2 case 2.7循环结构2.7.1…

通过IDEA创建spring boot的web项目

1.Fle->New->Project,选择Maven&#xff0c;点击Next 2.修改项目名称&#xff0c;点击Finish 3.项目创建完毕&#xff0c;等待Maven下载完成 4.修改pom.xml文件&#xff0c;改成如下内容 <?xml version"1.0" encoding"UTF-8"?> <pr…

增强管道数据流转(EPDR)技术的设计局限和替代

在前文中&#xff0c;我们介绍了EPDR技术的起源&#xff0c;以及使用该技术驱动的业余软件无线电平台专栏。已有玩家通过踩坑证明&#xff0c;进程管道交换数据时间延迟大&#xff0c;构造时间敏感系统难。除非采用传统的紧耦合设计及更大的颗粒度&#xff0c;否则很难在期望的…

Openstack 与 Ceph集群搭建(中): Ceph部署

文章目录 一、部署前说明1. ceph 版本选择依据2. ceph网络要求3. 硬件要求 二、部署架构三、部署过程1. 通用步骤2. 部署管理节点创建账号安装Cephadm运行bootstrap 3. 登录Ceph web4. 将其他节点加入集群同步ceph key安装ceph CLI命令行添加主机节点到集群添加OSD节点将监控节…

【Canvas与艺术】环形橄榄枝纹饰

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>环形橄榄枝(draft2)</title><style type"text/css&quo…

安卓蓝牙日志的获取方法

有过蓝牙调试经历的同学们可能都知道&#xff0c;在安卓系统中&#xff0c;在手机的设置–>开发人员页面下有一个开启蓝牙HCI信息收集日志选项开关&#xff0c;如下图中标红处&#xff0c; 打开该开关&#xff0c;就可以收集本机发送和接收的蓝牙HCI包。蓝牙包的数据会保存在…

git提交本地项目到远程仓库

1、查看项目目录&#xff0c;是否存在.git文件夹&#xff08;若存在则删除&#xff09; 2、登录git并新建一个空白项目 3、idea创建本地git仓库&#xff08;选择本地项目&#xff09; 4、添加要提交的项目&#xff08;项目右键&#xff09; 5、提交代码到本地仓库 6、配置远程…

轻松实现微服务间的无缝通信:OpenFeign入门指南

OpenFeign 前言1、导入依赖2、开启feign调用3、编写OpenFeign客户端4、Fegin接口实现5、Feign接口调用 前言 Spring Cloud OpenFeign是一种基于Spring Cloud的声明式REST客户端&#xff0c;它简化了与HTTP服务交互的过程。它将REST客户端的定义转化为Java接口&#xff0c;并且…

css 宫格样式内容上下结构

结构 <div class"sc-content-group"><div class"sc-content-item"><div class"sc-item-img"><el-image :src"src" :preview-src-list"[src]"></el-image></div><div class"s…

datax关于postsql数据增量迁移的问题

看官方文档是不支持的 数据源及同步方案_大数据开发治理平台 DataWorks(DataWorks)-阿里云帮助中心 (aliyun.com) 看了下源码有个postsqlwriter 看了下也就拼接sql 将 PostgresqlWriter中的不允许更新先注释了 让他过去先 然后看到 WriterUtil中的对应方法 getWriteTemplat…

咸鱼之王手游内购修复无bug运营版联网架设+后台

今天给大家带来一款单机游戏的架设&#xff1a;咸鱼之王手游。 另外&#xff1a;本人承接各种游戏架设&#xff08;单机联网&#xff09; 本人为了学习和研究软件内含的设计思想和原理&#xff0c;带了架设教程仅供娱乐。 教程是本人亲自搭建成功的&#xff0c;绝对是完整可…