七巧板Plus
2021-8-21 ~ 2021-9-1
(2)
游戏介绍
鼠标左键拖动图形移动,松开时自动吸附,按下 ctrl 键的同时拖动则不进行吸附,右键单击图形顺时针旋转 45°,ESC 结束游戏。
新增内容
增加了点吸附效果,拖动图形松开后,触发边吸附的同时也会触发点吸附。
拖动图形的同时,若按下 ctrl 键,则不会进行吸附。
不定期更新,力求完善。。。
程序说明
简要介绍程序中的一些点。
属性
使用模板类和 lambda 表达式实现了属性,用于对外暴露字段,详见 C# 属性。
使用属性可以简化程序,减少繁琐的 get 函数和 set 函数,提高了程序的可读性。
因为是自行封装的属性,所以存在很大的缺陷,很大程度上增加了类的大小(因为把函数成员变成了数据成员),属性的重写以及访问控制的不完善等。
对象管理机制
使用 Tangram 类来管理程序中所有的图形。
每一个图形对象在被创建之初就被加入到 Tangram 中,由该类来统一管理。每一个图形类仅提供一些属性来供用户合法地修改一些数据。
重载所有图形类公共基类 Base 类的 new 运算符,可以得知该对象位于栈中还是堆中,便于 Tangram 处理这些对象的析构。
对线段的数学描述
使用四个参数来描述一条线段,利于距离计算。
斜率:线段所在直线的斜率,描述直线的倾斜程度。
原点距离:坐标原点到线段所在直线的距离矢量。绝对值为距离,符号代表方向,配合斜率可用于描述一条直线。
端点距离:过坐标原点引一条垂直于该线段所在直线的直线,垂足到线段的两个端点的距离矢量称为该线段的端点距离。