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.左上左下右上右下:
- 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.基本运动:1.如何实现动画:2.实现一个小球从左到右从右到左:(往返运动)3.实现一个五角星的移动:4.实现一个五角星自转和圆周运动的集合:(圆周运动&…...

计算机竞赛 opencv 图像识别 指纹识别 - python
0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器视觉的指纹识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖,适…...

UI自动化测试常见的Exception
一. StaleElementReferenceException: - 原因:引用的元素已过期。原因是页面刷新了,此时当然找不到之前页面的元素。- 解决方案:不确定什么时候元素就会被刷新。页面刷新后重新获取元素的思路不变,这时可以使用python的…...

魔棒:手机智能无人直播软件多少钱?
无人直播因为直播门槛低,不需要真人出镜,不需要请主播,加上可以24小时直播卖券,效果出奇的好,一时很受广大商家的欢迎,那么,这种ai智能无人直播软件究竟多少钱呢? 当然,…...
网络安全 Day-32 Linux 系统定时任务补充
定时任务补充 1. 定时任务在生产时任务场景2. 定时任务实践 1. 定时任务在生产时任务场景 每天零点对系统数据备份每天我晚上零点统计财务报表每分钟剪口没有人进入计算机 2. 定时任务实践 定时任务服务启动:systemctl start crondsystemctl enable crond查看配置…...

【OpenGauss源码学习 —— 执行算子(hash join 算子)】
执行算子(hash join 算子) 连接算子hash join算子ExecInitHashJoin函数HashJoinState结构体TupleTableSlot 结构体JoinState结构体PlanState结构体ExecInitHashJoin函数部分代码介绍 ExecHashJoin函数调试信息 ExecEndHashJoin函数ExecReScanHashJoin函数…...

[Go版]算法通关村第十二关青铜——不简单的字符串转换问题
目录 题目:转换成小写字母思路分析:大写字母ASCII码 32 小写字母ASCII码Go代码Go代码-优化: 大写字母ASCII码 | 32 小写字母ASCII码 题目:字符串转换整数(atoi)思路分析:去除首部空格 明确正负 读取数…...

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

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

STM32--TIM定时器(1)
文章目录 TIM简介定时器类型 通用定时器预分频器时序计数器时序定时中断基本结构TIM内部中断工程TIM外部中断工程 TIM简介 STM32的TIM(定时器)是一种非常常用的外设,用于实现各种定时和计数功能。它是基于时钟信号进行计数,并在计…...
Android取证——基础知识
目录 一、安卓系统版本 二、安装操作系统UI 三、鉴权码 1.IMEI(手机序列号) 2.ICCID...

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

中电金信通过KCSP认证 云原生能力获权威认可
中电金信通过KCSP(Kubernetes Certified Service Provider)认证,正式成为CNCF(云原生计算基金会)官方认证的 Kubernetes 服务提供商。 Kubernetes是容器管理编排引擎,底层实现为容器技术,是云原…...
【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题意解题思路代码 题意 解题思路 先考虑不加紧密度的情况,要支持单点修改,整体查询࿰…...

【GitLab私有仓库】如何在Linux上用Gitlab搭建自己的私有库并配置cpolar内网穿透?
文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 前言 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具…...

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

Redis哨兵模式搭建
Redis主从复制搭建 Redis虽然拥有非常高的性能,但是在实际的生产环境中,使用单机模式还是会产生不少问题的,比如说容易出现 单机故障,容量瓶颈,以及QPS瓶颈等问题。通常环境下,主从复制、哨兵模式、Redis…...
大语言模型控制生成的过程Trick:自定义LogitsProcessor实践
前言 在大模型的生成过程中,部分原生的大语言模型未经过特殊的对齐训练,往往会“胡说八道”的生成一些敏感词语等用户不想生成的词语,最简单粗暴的方式就是在大模型生成的文本之后,添加敏感词库等规则手段进行敏感词过滤…...

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

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...

并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...