找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
游戏黄埔已经开课啦,大家速速报名赶快上车
查看: 1527|回复: 0

APP应用《计算器》素材

[复制链接]

162

主题

33

回帖

891

积分

管理员

积分
891
发表于 2025-2-20 13:23:05 | 显示全部楼层 |阅读模式
  1. using UnityEngine;
  2. using UnityEngine.UI;


  3. public class CalculatorController : MonoBehaviour
  4. {
  5.     [SerializeField] private Text displayText;
  6.     private string currentInput = "";
  7.     private string previousNumber = "";
  8.     private char currentOperator = ' ';
  9.     private bool isNewNumber = true;
  10.     [SerializeField] private Button btn0;
  11.     [SerializeField] private Button btn1;
  12.     [SerializeField] private Button btn2;
  13.     [SerializeField] private Button btn3;
  14.     [SerializeField] private Button btn4;
  15.     [SerializeField] private Button btn5;
  16.     [SerializeField] private Button btn6;
  17.     [SerializeField] private Button btn7;
  18.     [SerializeField] private Button btn8;
  19.     [SerializeField] private Button btn9;
  20.     //操作符按钮
  21.     [SerializeField] private Button AddBTN;
  22.     [SerializeField] private Button SubBTN;
  23.     [SerializeField] private Button MBTN;
  24.     [SerializeField] private Button DBTN;
  25.     [SerializeField] private Button EqualBTN;
  26.     [SerializeField] private Button clearBTN;
  27.     [SerializeField] private Button decimalBTN;
  28.    
  29.    

  30.     void Start()
  31.     {
  32.         UpdateDisplay("0");
  33.         // 数字按钮
  34.         btn0.onClick.AddListener(() => OnNumberPressed("0"));
  35.         btn1.onClick.AddListener(() => OnNumberPressed("1"));
  36.         btn2.onClick.AddListener(() => OnNumberPressed("2"));
  37.         btn3.onClick.AddListener(() => OnNumberPressed("3"));
  38.         btn4.onClick.AddListener(() => OnNumberPressed("4"));
  39.         btn5.onClick.AddListener(() => OnNumberPressed("5"));
  40.         btn6.onClick.AddListener(() => OnNumberPressed("6"));
  41.         btn7.onClick.AddListener(() => OnNumberPressed("7"));
  42.         btn8.onClick.AddListener(() => OnNumberPressed("8"));
  43.         btn9.onClick.AddListener(() => OnNumberPressed("9"));
  44.         //添加操作符按钮
  45.         AddBTN.onClick.AddListener(() => OnOperatorPressed('+'));
  46.         SubBTN.onClick.AddListener(() => OnOperatorPressed('-'));
  47.         MBTN.onClick.AddListener(() => OnOperatorPressed('*'));
  48.         DBTN.onClick.AddListener(() => OnOperatorPressed('/'));
  49.         // 清除按钮
  50.         clearBTN.onClick.AddListener(OnClearPressed);

  51.         // 小数点按钮
  52.         decimalBTN.onClick.AddListener(OnDecimalPressed);
  53.         //添加等号按钮
  54.         EqualBTN.onClick.AddListener(OnEqualPressed);
  55.     }

  56.     // 数字按钮点击
  57.     public void OnNumberPressed(string number)
  58.     {
  59.         if (isNewNumber)
  60.         {
  61.             currentInput = number;
  62.             isNewNumber = false;
  63.         }
  64.         else
  65.         {
  66.             currentInput += number;
  67.         }
  68.         UpdateDisplay(currentInput);
  69.     }

  70.     // 运算符按钮点击
  71.     public void OnOperatorPressed(char operatorChar)
  72.     {
  73.         previousNumber = currentInput;
  74.         currentOperator = operatorChar;
  75.         isNewNumber = true;
  76.     }

  77.     // 等号按钮点击
  78.     public void OnEqualPressed()
  79.     {
  80.         if (string.IsNullOrEmpty(previousNumber) || isNewNumber) return;

  81.         double result = Calculate(
  82.             double.Parse(previousNumber),
  83.             double.Parse(currentInput),
  84.             currentOperator
  85.         );

  86.         currentInput = result.ToString();
  87.         previousNumber = "";
  88.         currentOperator = ' ';
  89.         isNewNumber = true;
  90.         UpdateDisplay(currentInput);
  91.     }

  92.     // 清除按钮
  93.     public void OnClearPressed()
  94.     {
  95.         currentInput = "";
  96.         previousNumber = "";
  97.         currentOperator = ' ';
  98.         UpdateDisplay("0");
  99.         isNewNumber = true;
  100.     }

  101.     // 小数点处理
  102.     public void OnDecimalPressed()
  103.     {
  104.         if (!currentInput.Contains("."))
  105.         {
  106.             currentInput += ".";
  107.             UpdateDisplay(currentInput);
  108.         }
  109.     }

  110.     private double Calculate(double a, double b, char op)
  111.     {
  112.         switch (op)
  113.         {
  114.             case '+': return a + b;
  115.             case '-': return a - b;
  116.             case '*': return a * b;
  117.             case '/':
  118.                 if (b == 0)
  119.                 {
  120.                     ShowError("Cannot divide by zero!");
  121.                     return 0;
  122.                 }
  123.                 return a / b;
  124.             default: return 0;
  125.         }
  126.     }

  127.     private void UpdateDisplay(string text)
  128.     {
  129.         displayText.text = text.Length > 8 ? text.Substring(0, 8) : text;
  130.     }

  131.     private void ShowError(string message)
  132.     {
  133.         displayText.text = message;
  134.         currentInput = "";
  135.         Invoke("ResetAfterError", 1.5f);
  136.     }

  137.     private void ResetAfterError()
  138.     {
  139.         UpdateDisplay("0");
  140.         isNewNumber = true;
  141.     }

  142.     //数字按钮事件绑定
  143.     // 示例:数字1按钮
  144.    
  145.    
  146. }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|平顶山市图灵科技 ( 豫ICP备2024088136号-1| 豫公网安备41040202000275号 )

GMT+8, 2025-5-23 01:56 , Processed in 0.048111 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表