C#winform实现气泡碰撞电脑桌面边缘(碰撞后改变气泡颜色)

C#winform实现气泡碰撞电脑桌面边缘

  • 1 使用说明
  • 2 Form代码
  • 3 工具栏代码

1 使用说明

  • 添加一个Form1,将Form1.cs的代码替换掉
  • 并引入工具类

2 Form代码

using System;
using System.Drawing;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;namespace MVC模式实例
{public partial class Form1 : Form{private const string BoyName = "张娇娇", GirlName = "刘亚弟";/// <summary>/// 气泡移动时间间隔,单位:毫秒/// </summary>private int _nInterval = 10;/// <summary>/// 气泡每次移动的距离/// </summary>private float _step = 5;/// <summary>/// 气泡的直径/// </summary>private int _size = 400;/// <summary>/// 控制气泡碰撞边缘后修改气泡颜色/// </summary>private int _nColorIndex;/// <summary>/// 气泡移动的直线方程k,b值/// </summary>private float _dK = -1, _dB = 3;/// <summary>/// 气泡上次位置/// </summary>private PointF _lastPoint;/// <summary>/// 气泡(左上角)活动的范围/// </summary>private int _dScreenWidth, _dScreenHeight;/// <summary>/// 气泡移动的方向/// </summary>private E_LF _eLf = E_LF.RIGHT;/// <summary>/// 现场运行状态/// </summary>private bool _isRunning = true;/// <summary>/// 气泡碰撞/// </summary>public Form1(){InitializeComponent();Init();}private void Form1_FormClosing(object sender, FormClosingEventArgs e){_isRunning = false;}private void Init(){SetBubbleStyle();this.Region = new Region(Bubble.CreateHeartPath(this, _size));_dScreenWidth = Screen.PrimaryScreen.Bounds.Width - this.Width;_dScreenHeight = Screen.PrimaryScreen.Bounds.Height - this.Height;Random ran = new Random();_dK = -1;_dB = ran.Next(0, _dScreenHeight);_lastPoint = new PointF(0, _dB);new Task(BubbleMoveThread).Start();}private void RefreshForm(Action eventRefresh){if (InvokeRequired){Invoke(new EventHandler(delegate { RefreshForm(eventRefresh); }));}else{eventRefresh?.Invoke();}}private void BubbleMoveThread(){while (_isRunning){try{Thread.Sleep(_nInterval);UpdataLocation(out float x, out float y);_lastPoint.X = x;_lastPoint.Y = y;RefreshForm(() =>{this.Left = (int)_lastPoint.X;this.Top = (int)_lastPoint.Y;});}catch (Exception ex){Console.WriteLine(ex.Message);}}}private void SetBubbleStyle(){RefreshForm(() =>{try{_nColorIndex = (_nColorIndex + 5) % Bubble.BubbleColor.Length;this.BackColor = Bubble.BubbleColor[_nColorIndex];label1.Text = _dK > 0 ? BoyName : GirlName;label1.ForeColor = Bubble.GetInverseColor(Bubble.BubbleColor[_nColorIndex]);}catch{}});}private void UpdataKB(){SetBubbleStyle();_dK *= -1;_dB = _lastPoint.Y - _dK * _lastPoint.X;}private void UpdataLocation(out float x, out float y){x = _lastPoint.X + (_eLf == E_LF.RIGHT ? _step : -_step);if (x > _dScreenWidth){UpdataKB();_eLf = E_LF.LEFT;}if (x < 0){UpdataKB();_eLf = E_LF.RIGHT;}x = _lastPoint.X + (_eLf == E_LF.RIGHT ? _step : -_step);y = GetY(x);if (y < 0 || y > _dScreenHeight){UpdataKB();UpdataLocation(out x, out y);}}private float GetY(float x) => _dK * x + _dB;public enum E_LF { LEFT, RIGHT }}
}

3 工具栏代码

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Reflection;
using System.Windows.Forms;namespace MVC模式实例
{public class Bubble{/// <summary>/// 存储气泡颜色集合/// </summary>public static Color[] BubbleColor;static Bubble(){BubbleColor = GetCommonColors();}/// <summary>/// 设置气泡窗体的基本属性/// </summary>/// <param name="form"></param>private static void SetFormStyle(Form1 form, float size){form.ShowInTaskbar = false;form.FormBorderStyle = FormBorderStyle.None; //先把窗体设置为无边框的样式form.TopMost = true;form.Text = "气泡碰撞案例"; //设置窗体的关联文本form.Opacity = 0.7; //设置窗体的不透明度为0.7相反就是窗体的透明度为0.3form.Size = new Size((int)size, (int)size);}/// <summary>/// 获取圆形/// </summary>public static GraphicsPath CreateCirclePath(Form1 form, float size){SetFormStyle(form, size);GraphicsPath path = new GraphicsPath();path.AddEllipse(0, 0, size, size);return path;}/// <summary>/// 获取心形/// </summary>public static GraphicsPath CreateHeartPath(Form1 form, float size){SetFormStyle(form, size);GraphicsPath path = new GraphicsPath();float width = size;float height = size - size / 9;// 定义心形的参数方程float t;for (t = 0; t <= 2 * Math.PI; t += 0.01f){float x = 16 * (float)Math.Pow(Math.Sin(t), 3);float y = -(13 * (float)Math.Cos(t) - 5 * (float)Math.Cos(2 * t) - 2 * (float)Math.Cos(3 * t) - (float)Math.Cos(4 * t));// 将参数方程的坐标转换为窗体的坐标x = x * width / 32 + width / 2;y = y * height / 26 + height / 2;if (t == 0){path.StartFigure();}else{path.AddLine(new PointF(x, y), new PointF(x, y));}}path.CloseFigure();return path;}/// <summary>/// 获取颜色的互补色/// </summary>public static Color GetInverseColor(Color color){int red = 255 - color.R;int green = 255 - color.G;int blue = 255 - color.B;return Color.FromArgb(red, green, blue);}/// <summary>/// 获取常见颜色/// </summary>public static Color[] GetCommonColors(){var colors = new List<Color>();var properties = typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static);for (var index = 0; index < properties.Length; index++){var property = properties[index];if (property.PropertyType == typeof(Color)){Color color = (Color)property.GetValue(null);colors.Add(color);}}return colors.ToArray();}}
}

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

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

相关文章

MySQL为什么默认使用RR隔离级别?

大家好&#xff0c;我是锋哥。今天分享关于【MySQL为什么默认使用RR隔离级别&#xff1f;】面试题。希望对大家有帮助&#xff1b; MySQL为什么默认使用RR隔离级别&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 MySQL 默认使用 RR (Repeatable Read) …

人工智能之数学基础:线性方程组求解的得力助手——增广矩阵

本文重点 增广矩阵是一个极具实用价值的工具,尤其在处理线性方程组时,它展现了卓越的功效。通过整合系数和常数项,增广矩阵简化了计算过程并提供了判断方程组解集的有效方法。 增广矩阵的起源与定义 增广矩阵的概念源于线性方程组求解的需求。在解决线性方程组时,我们常…

【Axure高保真原型】增删改饼图

今天和大家分享能增删改的饼图的原型模版&#xff0c;该模版是用Axure原生元件制作的&#xff0c;所以不需要联网或者调用外部接口&#xff0c;使用也很方便&#xff0c;默认数据在中继器表格里填写&#xff0c;默认支持20个不同颜色的扇形&#xff0c;后续可根据实际需要自己增…

WordPress系统获取webshell的攻略

一.后台修改模板拿WebShell 1.进入Vulhub靶场并执⾏以下命令开启靶场&#xff1b;在浏览器中访问并安装好 #执⾏命令 cd /vulhub/wordpress/pwnscriptum docker-compose up -d 2. 修改其WP的模板&#xff0c;登陆WP后点击 【外 观】 --》 【编辑】 --》 404.php 3.插入一句话木…

Java反序列化CommonsBeanutils无依赖打Shiro

说明 如果您之前未了解过 Commons Collections&#xff08;CC&#xff09;利用链&#xff0c;建议您先阅读相关基础文章&#xff0c;然后再回头阅读此文章。这样可以更好地理解其中的内容 Java反序列化-Commons Collections3利用链分析详解 Java反序列化-Commons Collections…

用curl和python通过网络测试Ollama服务器的配置和状态

当一个Ollama服务器创建好后&#xff0c;除了用ollama指令来测试&#xff0c;还可以使用curl和python来通过网络测试Ollama的配置是否正确&#xff0c;远程是否能正常连上并与服务器进行交互。 目录 启动Ollama服务器 下载模型 curl测试 检查服务器状态 列出已安装的模型…

蓝桥杯青少组stema2025年3月9日scratch初级组真题——转动的图形

完整题目可查看&#xff1a; 转动的图形_scratch_少儿编程题库学习中心-嗨信奥https://www.hixinao.com/tiku/scratch/show-5106.html?_shareid3 程序演示可查看&#xff1a; 转动的图形-scratch作品-少儿编程题库学习中心-嗨信奥https://www.hixinao.com/scratch/creation…

杰理科技JL703N双模蓝牙芯片—云信

杰理科技JL703N芯片运算能力、接收灵敏度、发射功率、音频性能等指标均处于行业一流水平&#xff0c;能满足多场景的应用需求&#xff0c;具有以下明显优势&#xff1a; 一、高性能双核浮点CPU&#xff0c;算力十足 JL703N芯片搭载了32位高性能双核CPU&#xff0c;主频高达32…

Asp.net Core API 本地化

本文是一个demo&#xff0c;演示了如何根据用户接口查询字段(正常放header中),设置当前culture&#xff0c;并获取当前culture的key value给用户提示 创建Resources文件夹&#xff0c;添加以下三个文件 其中ExceptionUnuse 是一个空的类&#xff0c;供IStringLocalizer使用&a…

工业相机选型

工业相机选型 一、工业相机分类二、相机的主要参数2.1 分辨率2.2 速度2.3 光学接口 / 接口类型2.4 相机靶面尺寸2.5 像元尺寸2.6 精度 三、镜头介绍及选型方法3.1 工作距离&#xff08;WD&#xff09;3.2 视场角(FOV)3.3 &#xff08;镜头&#xff09;靶面尺寸3.4 帧率3.5 光圈…

eFish-SBC-RK3576 工业相机(IMX系列)方案设计

一、核心硬件架构 1. ‌图像传感器配置‌ ‌IMX系列选型‌&#xff1a; IMX678&#xff08;1/1.8" CMOS&#xff0c;2000万像素&#xff0c;全局快门&#xff0c;HDR 120dB&#xff09;IMX541&#xff08;2/3" CMOS&#xff0c;1200万像素&#xff0c;12bit ADC&…

网络华为HCIA+HCIP 广域网技术

目录 PPP协议 PPP链路建立流程 PPP链路接口状态机 LCP报文格式 LCP协商过程-正常协商 LCP协商过程-参数不匹配&#xff08;MRU&#xff09; LCP协商过程-参数不识别 PPP认证模式 - PAP PPP认证模式 - CHAP NCP协商 - 静态IP地址协商 NCP协商 - 动态IP地址协商 P…

B站pwn教程笔记-5

复习和回顾 首先复习一下ELF文件在内存和磁盘中的不同。内存只关注读写这权限&#xff0c;会合并一些代码段。 动态链接库只在内存中单独装在一份 因为很多软件都要用动态链接库了&#xff0c;不可能一个个单独复制一份。但是在有的调试环境下会单独显示出来各一份。 ld.so是装…

Vue Router 的核心实现原理是什么?

文章目录 一、路由模式实现原理1. Hash 模式2. History 模式 二、响应式路由系统1. 路由对象响应化2. 路由映射解析 三、组件渲染机制1. RouterView 实现2. 路由匹配流程 四、导航守卫系统1. 守卫执行流程2. 守卫类型对比 五、核心源码结构六、设计亮点分析七、性能优化策略总结…

CherryStudio + 火山引擎DeepSeek R1 告别服务器繁忙

CherryStudio 火山引擎DeepSeek R1 告别服务器繁忙 一、下载CherryStudio并安装 CherryStudio是功能强大的多模型桌面客户端&#xff0c;支持Windows、macOS和Linux系统。集成了多种主流的大语言模型&#xff08;如OpenAI、DeepSeek、Gemini等&#xff09;以及本地模型运行功…

Hessian 矩阵是什么

Hessian 矩阵是什么 目录 Hessian 矩阵是什么Hessian 矩阵的性质及举例说明**1. 对称性****2. 正定性决定极值类型****特征值为 2(正),因此原点 ( 0 , 0 ) (0, 0) (0,0) 是极小值点。****3. 牛顿法中的应用****4. 特征值与曲率方向****5. 机器学习中的实际意义**一、定义与…

C#从入门到精通(1)

目录 第一章 C#与VS介绍 第二章 第一个C#程序 &#xff08;1&#xff09;C#程序基本组成 1.命名空间 2.类 3.Main方法 4.注释 5.语句 6.标识符及关键字 &#xff08;2&#xff09;程序编写规范 1.代码编写规则 2.程序命名方法 3.元素命名规范 第三章 变量 &…

【LINUX操作系统】 动静态库的链接原理

初识linux&#xff08;16&#xff09; 动静态库&#xff08;手搓动静态库&#xff01;&#xff09;-CSDN博客 完成了对动静态库使用的学习&#xff0c;现在浅显理解下动态库加载的原理。 1. 宏观认知 磁盘中的应用程序main和动态库libmystdio.so先加载到内存中 加载到内存后&am…

广东启动“跨境电商+产业带”系列活动 三年打造30个产业振兴样板

大湾区经济网湾区财经快讯&#xff0c;近日&#xff0c;2025年广东省“跨境电商&#xff0b;产业带”助力“百千万工程”系列活动在中山市古镇镇启动。作为外贸领域新质生产力的重要载体&#xff0c;跨境电商将通过赋能县域特色产业带转型升级&#xff0c;为城乡融合与乡村振兴…

穿透递归的本质:从无限梦境到可控魔法的蜕变之路

穿透递归的本质&#xff1a;从无限梦境到可控魔法的蜕变之路&#xff08;C实现&#xff09; 一、递归&#xff1a;程序员的盗梦空间 在计算机科学的宇宙中&#xff0c;递归是最接近魔法本质的编程范式。它像一面镜子中的镜子&#xff0c;引导我们通过自我相似性破解复杂问题。…