unity实现一个简易的科学计算器

时间:2024-04-05 21:25:51

用UGUI先做一个大概的样式

unity实现一个简易的科学计算器

类似这样的,父子关系是这样的

unity实现一个简易的科学计算器

新建一个CalculateTool脚本,定义上述的按钮变量

unity实现一个简易的科学计算器

定义两个字符串用于显示和分析,定义一个操作符号和优先级的列表

unity实现一个简易的科学计算器

在Awake方法里面赋值:

unity实现一个简易的科学计算器

给这些按钮添加事件:

unity实现一个简易的科学计算器

给运算符号的列表添加值,后面的数代表优先级

unity实现一个简易的科学计算器

点击数字等按钮时候需要将点击的信息添加到显示和分析的字符串中,其中计算平方和立方的字符用 '[' 和 ']'这两个字符表示,显示则用输入法里的符号显示。

unity实现一个简易的科学计算器

接下来就是按下等号的时候需要计算: 先判断如果是空的话不计算,如果括号不匹配的话不计算。

unity实现一个简易的科学计算器

然后利用List这个现成的特别好用的类实现数字和操作符的分析,定义三个列表,缓冲的字符串用来判断如果是有好几位数字,小数,或者操作符是有很多个字符比如sin这种。

unity实现一个简易的科学计算器

unity实现一个简易的科学计算器

接下来分析字符串,将数字和操作符一个个都单独分开,按照输入的顺序添加到所有的列表中

unity实现一个简易的科学计算器

unity实现一个简易的科学计算器

对于操作符号,会出现sin这种正确的符号,也会有 *( 或者 )+ 这种两个符号,需要判断下区分开,括号要单独分出来,同样的乘方,三次方也要单独分出来。最后将等号加进去。

unity实现一个简易的科学计算器

将这些字符串都分开后,就是一步步的计算了:如果是数字就数字加入到数字列表中,没啥操作。

unity实现一个简易的科学计算器

如果这时不是数字就要比较优先级了,当前优先级大就将符号直接加到操作符的列表中,然后下一个。如果优先级小,进行计算,然后将数字删除,操作符删除,然后在当前进行下一轮判断,直到判断到当前符号为优先级大的符号或者列表里不再存在操作符了,结束判断。

unity实现一个简易的科学计算器

循环,如果优先级大,加到列表

unity实现一个简易的科学计算器

如果优先级小,计算,将计算的数字符号删除,将计算结果添加到数字列表

unity实现一个简易的科学计算器

同理在switch中可以写出其他操作符号的计算方式,比较特殊的是平方立方sin等,他们是对一个数进行操作的

unity实现一个简易的科学计算器

唯一不同的就是括号:

unity实现一个简易的科学计算器

如果是左括号接跳出一次这个循环。

unity实现一个简易的科学计算器

额外写个判断是否是数字的方法:

unity实现一个简易的科学计算器

unity实现一个简易的科学计算器

这样基本上一个科学计算器的大概就出现了,其中输入的方法和计算还有待后续的改进和添加

unity实现一个简易的科学计算器