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

分享相关知识

直接使用海龟图进行创作移动动态的游戏

这段代码是一个简单的turtle模块实现的小游戏,主要功能包括:

  1. 窗口和无人机初始化:

    • 创建了一个turtle窗口,设置了窗口的背景颜色和标题。
    • 创建了一个表示无人机的turtle,形状为正方形,蓝色,大小为(2 * 5)。
    • 创建了四个表示旋翼的turtle,形状为圆形,红色,大小根据半径计算。
  2. 障碍物的创建和初始化:

    • 创建了三个初始位置随机的障碍物,其中两个形状为圆形,一个形状为三角形。
  3. 碰撞检测和处理:

    • 使用 is_collision 函数检测无人机和障碍物之间的碰撞。
    • handle_collision 函数用于处理碰撞,根据障碍物的形状进行分数和死亡次数的更新,并根据分数动态改变无人机的宽度。
    • 障碍物的位置在碰撞后会重新设置。
  4. 按键事件和无人机移动:

    • 使用 wn.listen() 启用键盘事件监听。
    • 定义了四个移动函数 move_upmove_downmove_leftmove_right,分别控制无人机的上下左右移动。
    • move_rotors 函数用于移动旋翼。
  5. 动态增加新的障碍物:

    • add_obstacle 函数根据分数的不同,动态地增加新的三角形障碍物,并且仅在之前没有创建过相应障碍物的情况下执行。
  6. 计时和异常处理:

    • 计时程序记录了游戏的运行时间。
    • 在主循环中加入异常处理,避免窗口关闭时出现错误。
  7. 更新分数和死亡次数的显示:

    • update_score_display 函数用于更新分数和死亡次数的显示,并在需要时增加新的障碍物。
  8. 游戏结束提示:

    • 在死亡次数达到三次时,输出游戏结束提示。

这个小游戏通过键盘操作无人机,避开圆形障碍物,触碰三角形障碍物会导致死亡。分数在碰撞到圆形障碍物时增加,死亡次数在碰撞到三角形障碍物时增加。同时,游戏会动态地增加新的三角形障碍物。

import turtle
import random
import math
import time# 设置窗口
wn = turtle.Screen()
wn.bgcolor("white")
wn.title("无人机")# 创建飞行器
drone = turtle.Turtle()
drone.shape("square")
drone.color("blue")
drone.shapesize(stretch_wid=2, stretch_len=5)# 创建圆形的旋翼
rotor_radius = 20def draw_rotor(rotor, x, y):rotor.speed(0)rotor.shape("circle")rotor.color("red")rotor.shapesize(rotor_radius / 10)rotor.penup()rotor.goto(x, y)# 创建旋翼
rotor1 = turtle.Turtle()
draw_rotor(rotor1, -50, 50)rotor2 = turtle.Turtle()
draw_rotor(rotor2, 50, 50)rotor3 = turtle.Turtle()
draw_rotor(rotor3, -50, -50)rotor4 = turtle.Turtle()
draw_rotor(rotor4, 50, -50)# 创建障碍物(圆形和三角形)
obstacle_size = 20def draw_obstacle(obstacle, shape, x, y):obstacle.speed(0)obstacle.shape(shape)obstacle.color("black")obstacle.penup()obstacle.goto(x, y)# 随机初始位置
obstacle1_initial_pos = (random.randint(-200, 200), random.randint(-200, 200))
obstacle2_initial_pos = (random.randint(-200, 200), random.randint(-200, 200))
obstacle3_initial_pos = (random.randint(-200, 200), random.randint(-200, 200))# 创建障碍物
obstacle1 = turtle.Turtle()
obstacle_shape1 = "circle"
draw_obstacle(obstacle1, obstacle_shape1, *obstacle1_initial_pos)obstacle2 = turtle.Turtle()
obstacle_shape2 = "circle"
draw_obstacle(obstacle2, obstacle_shape2, *obstacle2_initial_pos)obstacle3 = turtle.Turtle()
obstacle_shape3 = "triangle"
draw_obstacle(obstacle3, obstacle_shape3, *obstacle3_initial_pos)obstacle4 = None
obstacle5 = None
obstacle6 = None# 记录分值和死亡次数
score = 0
death_count = 0# 分数和死亡次数显示
score_display = turtle.Turtle()
score_display.hideturtle()
score_display.penup()
score_display.goto(-200, 200)
score_display.write(f"分数: {score}  死亡次数: {death_count}", align="left", font=("Arial", 16, "normal"))# 移动无人机及旋翼
def move_up():y = drone.ycor()drone.sety(y + 10)check_collision()def move_down():y = drone.ycor()drone.sety(y - 10)check_collision()def move_left():x = drone.xcor()drone.setx(x - 10)check_collision()def move_right():x = drone.xcor()drone.setx(x + 10)check_collision()# 移动旋翼函数
def move_rotors():rotor1.setpos(drone.xcor() - 50, drone.ycor() + 50)rotor2.setpos(drone.xcor() + 50, drone.ycor() + 50)rotor3.setpos(drone.xcor() - 50, drone.ycor() - 50)rotor4.setpos(drone.xcor() + 50, drone.ycor() - 50)# 碰撞检测函数
def check_collision():global score, death_count# 检测与障碍物1的碰撞if is_collision(drone, obstacle1):handle_collision(obstacle1)# 检测与障碍物2的碰撞if is_collision(drone, obstacle2):handle_collision(obstacle2)# 检测与障碍物3的碰撞if is_collision(drone, obstacle3):handle_collision(obstacle3)#这个是中级难度的,会增加一个障碍物 if score>=10:if is_collision(drone, obstacle4):handle_collision(obstacle4)if score>=20:if is_collision(drone, obstacle5):handle_collision(obstacle5)if score>=30:if is_collision(drone, obstacle6):handle_collision(obstacle6)# 判断是否发生碰撞
def is_collision(t1, t2):x1, y1 = t1.xcor(), t1.ycor()x2, y2 = t2.xcor(), t2.ycor()distance = math.sqrt((x1 - x2)**2 + (y1 - y2)**2)return distance < (obstacle_size + 20)# 处理碰撞函数
def handle_collision(obstacle):global score, death_countif obstacle.shape() == "circle":score += 1print(f"碰撞到圆球! 得分: {score}")reset_obstacle(obstacle)elif obstacle.shape() == "triangle":death_count += 1print(f"已死亡!死亡次数: {death_count}")if death_count == 3:print("游戏结束,请重新开始")time.sleep(3)wn.bye()  # 关闭窗口reset_obstacle(obstacle)# 根据分数动态改变无人机宽度drone_width_percent = 1 + score * 0.01drone.shapesize(stretch_wid=2 * drone_width_percent, stretch_len=5)update_score_display()# 重置障碍物位置
def reset_obstacle(obstacle):obstacle.setpos(random.randint(-200, 200), random.randint(-200, 200))
def game_over():# 游戏结束的操作print("Game Over")turtle.bye()  # 关闭窗口
# 动态增加新的障碍物
def add_obstacle():global obstacle4, obstacle5, obstacle6if score >= 10 and obstacle4 is None:obstacle4 = turtle.Turtle()obstacle_shape4 = "triangle"draw_obstacle(obstacle4, obstacle_shape4, random.randint(-200, 200), random.randint(-200, 200))elif score >= 20 and obstacle5 is None:obstacle5 = turtle.Turtle()obstacle_shape5 = "triangle"draw_obstacle(obstacle5, obstacle_shape5, random.randint(-200, 200), random.randint(-200, 200))elif score >= 30 and obstacle6 is None:obstacle6 = turtle.Turtle()obstacle_shape6 = "triangle"draw_obstacle(obstacle6, obstacle_shape6, random.randint(-200, 200), random.randint(-200, 200))
def update_score_display():global scorescore_display.clear()score_display.write(f"分数: {score}  死亡次数: {death_count}", align="left", font=("Arial", 16, "normal"))add_obstacle()  # 检查是否需要增加新的障碍物
# 绑定按键事件,就是你键盘w s a d按下就能移动
wn.listen()
wn.onkeypress(move_up, "w")
wn.onkeypress(move_down, "s")
wn.onkeypress(move_left, "a")
wn.onkeypress(move_right, "d")# 主循环
# 计时程序
starTime = time.time()
while True:try:move_rotors()wn.update()except:print("请重新启动游戏")break
endTime = time.time()
elapsedTime = endTime - starTime
print("你最终花费的时间是:", elapsedTime)

相关文章:

分享相关知识

直接使用海龟图进行创作移动动态的游戏 这段代码是一个简单的turtle模块实现的小游戏&#xff0c;主要功能包括&#xff1a; 窗口和无人机初始化&#xff1a; 创建了一个turtle窗口&#xff0c;设置了窗口的背景颜色和标题。创建了一个表示无人机的turtle&#xff0c;形状为正…...

RabbitMQ(七)ACK 消息确认机制

目录 一、简介1.1 背景1.2 定义1.3 如何查看确认/未确认的消息数&#xff1f; 二、消息确认机制的分类2.1 消息发送确认1&#xff09;ConfirmCallback方法2&#xff09;ReturnCallback方法3&#xff09;代码实现方式一&#xff1a;统一配置a.配置类a.生产者c.消费者d.测试结果 …...

ubuntu 编译内核报错

Ubuntu 编译 Linux 内核经常会遇到如下错误&#xff1a; 如果报错 canonical-certs.pem&#xff1a; 如下&#xff1a; make[1]: *** No rule to make target ‘debian/canonical-certs.pem’, needed by ‘certs/x509_certificate_list’. Stop. make: *** [Makefile:1868: …...

Python之自然语言处理库snowNLP

一、介绍 SnowNLP是一个python写的类库&#xff0c;可以方便的处理中文文本内容&#xff0c;是受到了TextBlob的启发而写的&#xff0c;由于现在大部分的自然语言处理库基本都是针对英文的&#xff0c;于是写了一个方便处理中文的类库&#xff0c;并且和TextBlob不同的是&…...

C# 语法进阶 委托

1.委托 委托是一个引用类型&#xff0c;其实他是一个类&#xff0c;保存方法的指针 &#xff08;指针&#xff1a;保存一个变量的地址&#xff09;他指向一个方法&#xff0c;当我们调用委托的时候这个方法就立即被执行 关键字&#xff1a;delegate 运行结果&#xff1a; 思…...

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前文链接&#xff1a; ​​开源可观测性平台Signoz系列&#xff08;一&#xff09;【开篇】​​ ​​开源可观测性平台Signoz&…...

【嵌入式开发 Linux 常用命令系列 4.2 -- git .gitignore 使用详细介绍】

文章目录 .gitignore 使用详细介绍.gitignore 文件的位置.gitignore 语法规则使用示例注意事项 .gitignore 使用详细介绍 .gitignore 文件是一个特殊的文本文件&#xff0c;它告诉 Git 哪些文件或目录是可以被忽略的&#xff0c;即不应该被纳入版本控制系统。这主要用于避免一…...

【熔断限流组件resilience4j和hystrix】

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容起因resilience4j落地实现pom.xml依赖application.yml配置接口使用 hystrix 落地实现pom.xml依赖启动类上添加注解接口上使用 &#x1f4e2;文章总结&#x1f4e5;博主目标 &#x1f50a;博主介绍 &#x1f31f;我是廖志伟…...

微服务雪崩问题及解决方案

雪崩问题 微服务中&#xff0c;服务间调用关系错综复杂&#xff0c;一个微服务往往依赖于多个其它微服务。 微服务之间相互调用&#xff0c;因为调用链中的一个服务故障&#xff0c;引起整个链路都无法访问的情况。 如果服务提供者A发生了故障&#xff0c;当前的应用的部分业务…...

008、所有权

所有权可以说是Rust中最为独特的一个功能了。正是所有权概念和相关工具的引入&#xff0c;Rust才能够在没有垃圾回收机制的前提下保障内存安全。 因此&#xff0c;正确地了解所有权概念及其在Rust中的实现方式&#xff0c;对于所有Rust开发者来讲都是十分重要的。在本文中&…...

千里马2023年终总结-android framework实战

背景&#xff1a; hi粉丝朋友们&#xff1a; 2023年马上就过去了&#xff0c;很多学员朋友也都希望马哥这边写个年终总结&#xff0c;因为这几个月时间都忙于新课程halsystracesurfaceflinger专题的开发&#xff0c;差点都忘记了这个事情了&#xff0c;今天特别花时间来写个bl…...

vue3中pinia的使用及持久化(详细解释)

解释一下pinia&#xff1a; Pinia是一个基于Vue3的状态管理库&#xff0c;它提供了类似Vuex的功能&#xff0c;但是更加轻量化和简单易用。Pinia的核心思想是将所有状态存储在单个store中&#xff0c;并且将store的行为和数据暴露为可响应的API&#xff0c;从而实现数据&#…...

安装 yarn、pnpm、功能比较

安装 yarn 官网&#xff1a;https://classic.yarnpkg.com/ 快速、可靠和安全的依赖性管理。 Yarn是您代码的软件包管理器。它允许您使用和共享&#xff08;例如JavaScript&#xff09;与来自世界各地的其他开发人员一起编写代码。Yarn是一个新的快速安全可信赖的可以替代 NP…...

计算机专业个人简历范文(8篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…...

几个实用网站

论文短语&#xff1a;https://www.phrasebank.manchester.ac.uk/ 翻译&#xff1a;https://www.deepl.com/en/translator 润色&#xff1a;https://quillbot.com/ 榜单&#xff1a;www.paperwithcode.com ****NLP民工的乐园: 几乎最全的中文NLP资源库&#xff1a;****https…...

Pycharm 切换interpreter---python的环境和第三方库问题

这篇回答两个问题&#xff1a; 1.为什么在 pycharm中打开新的project&#xff0c;切换interpreter 之后发现自己之前装的库消失了&#xff1f; 2.为什么 interpreter 切换到python3.8了&#xff0c; terminal 还是在 3.9&#xff1f;&#xff1f; 问题的关键&#xff1a;搞懂什…...

TP-LINK 路由器忘记密码 - 恢复出厂设置

TP-LINK 路由器忘记密码 - 恢复出厂设置 1. 恢复出厂设置2. 创建管理员密码3. 上网设置4. 无线设置5. TP-LINK ID6. 网络状态References 1. 恢复出厂设置 在设备通电的情况下&#xff0c;按住路由器背面的 Reset 按钮直到所有指示灯同时亮起后松开。 2. 创建管理员密码 3. 上网…...

关闭 Elasticsearch 集群的安全性设置

关闭 Elasticsearch 集群的安全性设置&#xff0c;特别是如果您正在使用 X-Pack&#xff0c;涉及到修改 Elasticsearch 的配置。以下是一般步骤&#xff0c;但请注意&#xff0c;这可能会使您的 Elasticsearch 集群面临安全风险&#xff0c;因此建议仅在开发或测试环境中执行此…...

[技术分享]一招解决 MySQL 中 DDL 被阻塞的问题

爱可生开源社区. 爱可生开源社区,提供稳定的MySQL企业级开源工具及服务,每年1024开源一款优良组件,并持续运营维护。 背景 之前碰到客户咨询定位DDL阻塞的相关问题,整理了一下方法,如何解决DDL被阻塞的问题。下面,就这个问题,整理了一下思路&#xff1a; 怎么判断一个 DDL 是…...

Windows搭建Emby媒体库服务器,无公网IP远程访问本地影音文件

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…...

Dify工作流架构:声明式编排与可视化执行引擎的技术实现

Dify工作流架构&#xff1a;声明式编排与可视化执行引擎的技术实现 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程&#xff0c;自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trending/aw/Awesome-Dify…...

卡证检测矫正模型实战教程:中文Web界面全功能图文操作指南

卡证检测矫正模型实战教程&#xff1a;中文Web界面全功能图文操作指南 1. 引言&#xff1a;为什么你需要这个工具&#xff1f; 想象一下&#xff0c;你手头有一堆身份证、护照或者驾照的照片&#xff0c;它们可能角度歪斜、背景杂乱&#xff0c;甚至有些反光。你需要从中提取…...

如何用Penpot构建完整的用户体验地图和用户旅程:7步打造完美设计流程

如何用Penpot构建完整的用户体验地图和用户旅程&#xff1a;7步打造完美设计流程 【免费下载链接】penpot Penpot - The Open-Source design & prototyping platform 项目地址: https://gitcode.com/GitHub_Trending/pe/penpot Penpot作为开源的设计与原型平台&…...

dygraphs核心架构解析:理解Canvas渲染机制与高性能图表实现

dygraphs核心架构解析&#xff1a;理解Canvas渲染机制与高性能图表实现 【免费下载链接】dygraphs Interactive visualizations of time series using JavaScript and the HTML canvas tag 项目地址: https://gitcode.com/gh_mirrors/dy/dygraphs dygraphs是一个基于HTM…...

Luau数据流分析技术:如何实现精准的类型推断

Luau数据流分析技术&#xff1a;如何实现精准的类型推断 【免费下载链接】luau A fast, small, safe, gradually typed embeddable scripting language derived from Lua 项目地址: https://gitcode.com/gh_mirrors/lu/luau Luau是一种快速、小巧、安全且支持渐进类型化…...

Drizzle ORM性能优化终极指南:查询优化与缓存策略详解

Drizzle ORM性能优化终极指南&#xff1a;查询优化与缓存策略详解 【免费下载链接】drizzle-orm drizzle-team/drizzle-orm: 是一个基于 C 的 ORM&#xff08;对象关系映射&#xff09;库&#xff0c;支持 MySQL 和 SQLite 数据库。适合对 C、数据库开发以及想要使用轻量级 ORM…...

vLLM-v0.17.1效果展示:vLLM支持MoE模型(如Mixtral)推理实测

vLLM-v0.17.1效果展示&#xff1a;vLLM支持MoE模型&#xff08;如Mixtral&#xff09;推理实测 1. vLLM框架核心能力 vLLM是一个专注于大语言模型推理的高性能服务库&#xff0c;最新发布的v0.17.1版本带来了对MoE&#xff08;混合专家&#xff09;架构模型的全面支持。这个最…...

CAD_Sketcher终极指南:如何在Blender中实现精准约束绘图

CAD_Sketcher终极指南&#xff1a;如何在Blender中实现精准约束绘图 【免费下载链接】CAD_Sketcher Constraint-based geometry sketcher for blender 项目地址: https://gitcode.com/gh_mirrors/ca/CAD_Sketcher 你是否曾在Blender中尝试绘制精确的机械零件或建筑平面图…...

基于Altera Cyclone4 FPGA-EP4CE15F17C8核心板的硬件设计实战(原理图+PCB+AD09工程)

1. 从零开始搭建FPGA核心板硬件系统 第一次接触FPGA核心板设计时&#xff0c;我被密密麻麻的引脚和复杂的电源系统搞得头晕眼花。直到用AD09完整走完EP4CE15F17C8核心板的设计流程&#xff0c;才发现硬件开发就像搭积木——只要掌握模块化思维&#xff0c;菜鸟也能做出专业级设…...

LeetCodehot100-2 两数相加

class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {if (l1 nullptr) return l2;if (l2 nullptr) return l1;ListNode* head l1; // 保存头节点ListNode* prev nullptr; // 记录上一个节点&#xff0c;用于连接int carry 0;// 同时遍历…...