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

server/2024/9/24 4:10:08/

游戏简介:

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

未来展望:

1. 添加其他道具球

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

3. 添加耐力条

4. 添加更多属性

核心代码

玩家移动

python">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

生成小怪

python">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

道具球处理

python">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

游戏主要逻辑

python">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.ppmy.cn/server/105787.html

相关文章

【单片机】LCD1602和OLED里,如何实现滚动显示特效?

如何在OLED显示16个字符的同时实现滚动特效 1. 基本思路 滚动特效的核心思路是在一个固定长度的显示区域内,通过不断改变显示内容的起始位置,模拟出内容在屏幕上滚动的效果。我们可以使用一个定时器来周期性地更新显示内容,从而实现动态滚动。 2. 代码分析 以下是实现滚…

GRL CVPR2023图像修复 使用笔记

目录 github地址&#xff1a; 训练自己的数据教程&#xff1a; 网络学习&#xff1a; 损失函数&#xff1a; github地址&#xff1a; GitHub - ofsoundof/GRL-Image-Restoration 预训练模型&#xff0c;在release里面 如何使用代码&#xff1a; conda create -n Lightn…

前端宝典十:webpack性能优化最佳实践

Webpack 内置了很多功能。 通常你可用如下经验去判断如何配置 Webpack&#xff1a; 想让源文件加入到构建流程中去被 Webpack 控制&#xff0c;配置 entry&#xff1b;想自定义输出文件的位置和名称&#xff0c;配置 output&#xff1b;想自定义寻找依赖模块时的策略&#xff…

Milvus 安装、设置权限和使用

中文文档 使用了docker compose 安装 standalone 版本&#xff0c;即单机docker。 pymilvus 一直在升级&#xff0c;一些函数有变化&#xff0c;中文文档有落后&#xff0c;建议看英文文档。 安装 #下载docker-compose.yml 文件 wget https://github.com/milvus-io/milvus/re…

GitHub每日最火火火项目(8.25)

项目名称&#xff1a;goauthentik / authentik 项目介绍&#xff1a;authentik 是一个满足认证需求的工具&#xff0c;它就像是认证过程中的强力粘合剂。在各种复杂的系统环境和对安全性有高要求的应用场景中&#xff0c;它都能发挥重要作用。通过 authentik&#xff0c;可以实…

iLogtail 开源两周年:感恩遇见,畅想未来

早在上世纪 60 年代&#xff0c;早期的计算机&#xff08;例如 ENIAC 和 IBM 的大型机&#xff09;在操作过程中会输出一些基本的状态信息和错误报告&#xff0c;这些记录通常通过打印机输出到纸带或纸卡上&#xff0c;用于跟踪操作流程和调试&#xff0c;最早期的日志系统借此…

DOM的概念及作用

一、什么是 DOM&#xff08;Document Object Model&#xff0c;文档对象模型&#xff09; DOM 可以理解为一种将 HTML、XML 和 XHTML 等文档结构化为一个由节点组成的树形结构的模型。它将网页文档表示为一个对象的集合&#xff0c;每个对象代表文档中的一个元素、属性或文本内…

分析Facebook在区块链技术中的应用与前景

随着数字技术的飞速发展&#xff0c;区块链作为一种具有去中心化、安全性高、透明度强等特点的技术&#xff0c;逐渐引起了各大科技公司的关注。Facebook&#xff08;现Meta&#xff09;也不例外&#xff0c;其在区块链技术上的探索不仅显示了对未来技术趋势的敏锐洞察&#xf…