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

easyx图形库基础:2.基本运动+键盘交互

基本运动+键盘交互

  • 一.基本运动
    • 1.基本运动:
      • 1.如何实现动画:
      • 2.实现一个小球从左到右从右到左:(往返运动)
      • 3.实现一个五角星的移动:
      • 4.实现一个五角星自转和圆周运动的集合:(圆周运动)
    • 2.直线运动:
      • 1.左上左下右上右下:
      • 2.任意从一个点到一个点的直线运动。
  • 二.键盘交互
    • 1.动键盘我们的图形才移动:
    • 2.动键盘去控制原来的运动情况:

一.基本运动

1.基本运动:

1.如何实现动画:

相信大家已经对动画的原理已经不陌生了。想要目标物体动起来,只需要逐个播放目标物体每一时刻位置的图片。只要播放的速度足够快,人们就会在视觉上认为目标物体动起来了。

帧率:具有连续性的一些图片在1秒中绘制的个数。
物体运动的速度单位一般是 像素/秒。
sleep函数:可以让我们的程序在执行到sleep函数的时候就停下自己定义的时间,sleep函数的单位是毫秒

请添加图片描述

2.实现一个小球从左到右从右到左:(往返运动)

void moveball()
{int x = -400;int y = 0;//设置小球的每一次移动的距离int vx = 5;setfillcolor(RGB(90, 164, 174));while (1){//绘制小球solidcircle(x, y, 25);Sleep(40);//判断小球转方向。if (x >= 400 || x<-400){vx = -vx;}//进行坐标值的变化;x += vx;cleardevice();}
}

3.实现一个五角星的移动:

请添加图片描述

#define PI 3.14
void star()
{POINT st[5];int x = -400;int y = 0;int vx = 5;int r = 30;double rad = PI / 180;while (1){cleardevice();setfillcolor(YELLOW);//设置五角星的坐标for (int i = 0; i < 5; i++){st[i].x = x + r * sin( rad* (144 * i));st[i].y = y + r * cos( rad* (144 * i));}//绘制五角星solidpolygon(st,5);Sleep(40);//判断五角星转方向。if (x >= 400 || x < -400){vx = -vx;}//进行坐标值的变化;x += vx;}
}

4.实现一个五角星自转和圆周运动的集合:(圆周运动)

#define PI 3.14void star()
{POINT st[5];int x = 0;int y = 0;//大圆周半径int R = 200;//小圆周半径int r = 50;double rad = PI / 180;int j = 0;while (1){cleardevice();setfillcolor(YELLOW);//五角星的x,y坐标x = R * sin(rad * j);y = R * cos(rad * j);//设置五角星的坐标,初始化角度值可以变化。for (int i = 0; i < 5; i++){st[i].x = x + r * sin( rad* ((144 * i)+j));st[i].y = y + r * cos( rad* ((144 * i)+j));}//绘制五角星solidpolygon(st,5);Sleep(40);j++;if (j == 359){j = 0;}}
}

2.直线运动:

1.左上左下右上右下:

  1. P1到P2
    圆形从P1运动到P2。由于是直线运动,速度与位移的方向是相同的,均是从P1到P2。此时,速度方向
    并不是水平或垂直的。但是,我们可以通过三角函数计算出速度在x方向与y方向的速度分量。为了计算出速度分量,还需要先求出速度方向与x轴的夹角θ。
    请添加图片描述
    请添加图片描述

2.任意从一个点到一个点的直线运动。

1.使用三角函数和反三角函数计算角度
2.根据三角函数计算速度分量
3.根据速度方向的正负求速度的符号
使用速度方向的正负确定停止条件。

//直线运动
//直线运动
void straight_line(int x1,int y1,int x2,int y2,int v)
{//求角度double ran = (double)abs(y2 - y1) / (double)abs(x2 - x1);double th = atan(ran);//给速度分量赋值double vx = v * cos(th);double vy = v * sin(th);//判断运动方向int flagvx = 0;int flagvy = 0;if (x2 - x1 < 0){flagvx = -1;}else if (x2 - x1 > 0){flagvx = 1;}if (y2 - y1 < 0){flagvy = -1;}else if (y2 - y1 > 0){flagvy = 1;}vx = vx*flagvx;vy = vy*flagvy;//初始化位置double x = x1;double y = y1;while (1){cleardevice();solidcircle(x, y, 30);Sleep(40);x += vx;y += vy;//判断循环结束条件if (flagvx == 1){if (x >= x2)break;}else if (flagvx == -1){if (x <= x2)break;}if (flagvy == 1){if (y >= y2)break;}else if (flagvy == -1){if (y <= y2)break;}}
}
}

二.键盘交互

因为kbhit和getch是不是标准库的内容他是平台实现函数然后为了进行区分就在函数名称前面加上了一个_.
头文件是conio.h

1.动键盘我们的图形才移动:

void contour()
{//初始化坐标和水平竖直速度int x = 0;int y = 0;int vx = 0;int vy = 0;while (1){//conio.h是getch函数的头文件,//这个函数可以直接获取输入缓冲区的字符不需要回车确认cleardevice();solidcircle(x, y, 30);//获取键盘输入字符char ch=_getch();switch (ch){case'A':case'a':vx = -5;vy = 0;break;case'S':case's':vy = -5;vx = 0;break;case'W':case'w':vy = 5;vx = 0;break;case'D':case'd':vx = 5;vy = 0;break;}x += vx;y += vy;}}

2.动键盘去控制原来的运动情况:

默认我们的图形开始是从左向右运动的,我们键盘输入数据才移动。

void movecontour()
{//初始化坐标和水平竖直速度int x = 0;int y = 0;int vx = 5;int vy = 0;while (1){//conio.h是getch函数的头文件,//这个函数可以直接获取输入缓冲区的字符不需要回车确认cleardevice();solidcircle(x, y, 30);Sleep(40);//获取键盘输入字符x += vx;y += vy;//判断输入缓冲区中是否有内容,_kbhit()不会阻塞函数。//如果有内容进入语句,getch获取缓冲区的数值去改变速度的值。if (_kbhit()){char ch = _getch();switch (ch){case'A':case'a':vx = -5;vy = 0;break;case'S':case's':vy = -5;vx = 0;break;case'W':case'w':vy = 5;vx = 0;break;case'D':case'd':vx = 5;vy = 0;break;}}}}

相关文章:

easyx图形库基础:2.基本运动+键盘交互

基本运动键盘交互 一.基本运动1.基本运动&#xff1a;1.如何实现动画&#xff1a;2.实现一个小球从左到右从右到左&#xff1a;&#xff08;往返运动&#xff09;3.实现一个五角星的移动&#xff1a;4.实现一个五角星自转和圆周运动的集合&#xff1a;&#xff08;圆周运动&…...

计算机竞赛 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…...

UI自动化测试常见的Exception

一. StaleElementReferenceException&#xff1a; - 原因&#xff1a;引用的元素已过期。原因是页面刷新了&#xff0c;此时当然找不到之前页面的元素。- 解决方案&#xff1a;不确定什么时候元素就会被刷新。页面刷新后重新获取元素的思路不变&#xff0c;这时可以使用python的…...

魔棒:手机智能无人直播软件多少钱?

无人直播因为直播门槛低&#xff0c;不需要真人出镜&#xff0c;不需要请主播&#xff0c;加上可以24小时直播卖券&#xff0c;效果出奇的好&#xff0c;一时很受广大商家的欢迎&#xff0c;那么&#xff0c;这种ai智能无人直播软件究竟多少钱呢&#xff1f; 当然&#xff0c…...

网络安全 Day-32 Linux 系统定时任务补充

定时任务补充 1. 定时任务在生产时任务场景2. 定时任务实践 1. 定时任务在生产时任务场景 每天零点对系统数据备份每天我晚上零点统计财务报表每分钟剪口没有人进入计算机 2. 定时任务实践 定时任务服务启动&#xff1a;systemctl start crondsystemctl enable crond查看配置…...

【OpenGauss源码学习 —— 执行算子(hash join 算子)】

执行算子&#xff08;hash join 算子&#xff09; 连接算子hash join算子ExecInitHashJoin函数HashJoinState结构体TupleTableSlot 结构体JoinState结构体PlanState结构体ExecInitHashJoin函数部分代码介绍 ExecHashJoin函数调试信息 ExecEndHashJoin函数ExecReScanHashJoin函数…...

[Go版]算法通关村第十二关青铜——不简单的字符串转换问题

目录 题目&#xff1a;转换成小写字母思路分析&#xff1a;大写字母ASCII码 32 小写字母ASCII码Go代码Go代码-优化: 大写字母ASCII码 | 32 小写字母ASCII码 题目&#xff1a;字符串转换整数&#xff08;atoi&#xff09;思路分析&#xff1a;去除首部空格 明确正负 读取数…...

十种排序算法(附动图)

排序算法 一、基本介绍 ​ 排序算法比较基础&#xff0c;但是设计到很多计算机科学的想法&#xff0c;如下&#xff1a; ​ 1、比较和非比较的策略 ​ 2、迭代和递归的实现 ​ 3、分而治之思想 ​ 4、最佳、最差、平均情况时间复杂度分析 ​ 5、随机算法 二、排序算法的分类 …...

【校招VIP】测试类型之兼容性测试分析

考点介绍&#xff1a; 兼容性是测试工作里面比较复杂的一种情况&#xff0c;也是校招里面考察的一个重点&#xff0c;需要从屏幕功能&#xff0c;数据&#xff0c;操作系统等多个维度进行分析。 『测试类型之兼容性测试分析』相关题目及解析内容可点击文章末尾链接查看&#x…...

STM32--TIM定时器(1)

文章目录 TIM简介定时器类型 通用定时器预分频器时序计数器时序定时中断基本结构TIM内部中断工程TIM外部中断工程 TIM简介 STM32的TIM&#xff08;定时器&#xff09;是一种非常常用的外设&#xff0c;用于实现各种定时和计数功能。它是基于时钟信号进行计数&#xff0c;并在计…...

Android取证——基础知识

目录 一、安卓系统版本 二、安装操作系统UI 三、鉴权码 1.IMEI(手机序列号) 2.ICCID...

【学习心得】安装cuda/cudann和pytorch

一、查看驱动信息 # 进入CMD输入命令 nvidia-smi 也可以右下角图标打开NVIDIA 设置进行查看 二、下载安装CUDA 1、下载 下载地址 https://developer.nvidia.com/ 2、安装 推荐自定义安装。建议只勾选Cuda&#xff0c;只安装这一个就好&#xff0c;以免报错安装失败。 3、验证…...

中电金信通过KCSP认证 云原生能力获权威认可

中电金信通过KCSP&#xff08;Kubernetes Certified Service Provider&#xff09;认证&#xff0c;正式成为CNCF&#xff08;云原生计算基金会&#xff09;官方认证的 Kubernetes 服务提供商。 Kubernetes是容器管理编排引擎&#xff0c;底层实现为容器技术&#xff0c;是云原…...

【Spring】Bean的实例化

1、简介 在容器中的Bean要实例化为对象有三种方式 1、构造方法 2、静态工厂 3、实例工厂 4、实现工厂接口 2、构造方法 构造方法实例化Bean即是直接通过构造方法创建对象 <bean id"bookDao" class"com.wn.spring.dao.impl.BookDaoImpl"/> 当不存在…...

2023牛客暑期多校训练营8-C Clamped Sequence II

2023牛客暑期多校训练营8-C Clamped Sequence II https://ac.nowcoder.com/acm/contest/57362/C 文章目录 2023牛客暑期多校训练营8-C Clamped Sequence II题意解题思路代码 题意 解题思路 先考虑不加紧密度的情况&#xff0c;要支持单点修改&#xff0c;整体查询&#xff0…...

【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xf…...

企业计算机服务器遭到了locked勒索病毒攻击如何解决,勒索病毒解密

网络技术的不断发展&#xff0c;也为网络安全埋下了隐患&#xff0c;近期&#xff0c;我们收到很多企业的求助&#xff0c;企业的计算机服务器遭到了locked勒索病毒的攻击&#xff0c;导致企业的财务系统内的所有数据被加密无法读取&#xff0c;严重影响了企业的正常运行。最近…...

Redis哨兵模式搭建

Redis主从复制搭建 Redis虽然拥有非常高的性能&#xff0c;但是在实际的生产环境中&#xff0c;使用单机模式还是会产生不少问题的&#xff0c;比如说容易出现 单机故障&#xff0c;容量瓶颈&#xff0c;以及QPS瓶颈等问题。通常环境下&#xff0c;主从复制、哨兵模式、Redis…...

大语言模型控制生成的过程Trick:自定义LogitsProcessor实践

前言 在大模型的生成过程中&#xff0c;部分原生的大语言模型未经过特殊的对齐训练&#xff0c;往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语&#xff0c;最简单粗暴的方式就是在大模型生成的文本之后&#xff0c;添加敏感词库等规则手段进行敏感词过滤&#xf…...

Docker容器:docker的资源控制及docker数据管理

文章目录 一.docker的资源控制1.CPU 资源控制1.1 资源控制工具1.2 cgroups有四大功能1.3 设置CPU使用率上限1.4 进行CPU压力测试1.5 设置50%的比例分配CPU使用时间上限1.6 设置CPU资源占用比&#xff08;设置多个容器时才有效&#xff09;1.6.1 两个容器测试cpu1.6.2 设置容器绑…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

Objective-C常用命名规范总结

【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名&#xff08;Class Name)2.协议名&#xff08;Protocol Name)3.方法名&#xff08;Method Name)4.属性名&#xff08;Property Name&#xff09;5.局部变量/实例变量&#xff08;Local / Instance Variables&…...

工程地质软件市场:发展现状、趋势与策略建议

一、引言 在工程建设领域&#xff0c;准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具&#xff0c;正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

解读《网络安全法》最新修订,把握网络安全新趋势

《网络安全法》自2017年施行以来&#xff0c;在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂&#xff0c;网络攻击、数据泄露等事件频发&#xff0c;现行法律已难以完全适应新的风险挑战。 2025年3月28日&#xff0c;国家网信办会同相关部门起草了《网络安全…...