c#电梯控制程序winform

一道编程题。

c#电梯控制程序winform。主要是理了电梯控制清逻辑。


            CheckBoxsup = new CheckBox[5];
            CheckBoxsup[0] = new CheckBox();
            CheckBoxsup[1] = new CheckBox();
            CheckBoxsup[2] = ch2u;
            CheckBoxsup[3] = ch3u;
            CheckBoxsup[4] = ch4;
            CheckBoxsdown = new CheckBox[5];
            CheckBoxsdown[0] = new CheckBox();
            CheckBoxsdown[1] = ch1;
            CheckBoxsdown[2] = ch2d;
            CheckBoxsdown[3] = ch3d;
            CheckBoxsdown[4] = new CheckBox();
            CheckBoxGoto = new CheckBox[5];
            CheckBoxGoto[0] = new CheckBox();
            CheckBoxGoto[1] = chkBoxfloor1;
            CheckBoxGoto[2] = chkBoxfloor2;
            CheckBoxGoto[3] = chkBoxfloor3;
            CheckBoxGoto[4] = chkBoxfloor4;
            Xfloor = 1;//当前楼层


        /// <summary>
        /// 打开关闭电梯门
        /// </summary>

        private void XOpenClose()
        {
            pictureBox3.Image = testA.Properties.Resources.ElevatorOpen;
            pictureBox3.Update();
            Thread.Sleep(500);
            pictureBox3.Image = testA.Properties.Resources.ElevatorClose;
            pictureBox3.Update();
            Thread.Sleep(500);
        }
        /// <summary>
        /// 判断方向逻辑
        /// </summary>
        private void Xwhere()
        {
            int sum = 0;//记录是否有任何需求按钮按下

            for (int i = 1; i <= 4; i++)//轮询1-4楼三种按钮数组
            {
                if (CheckBoxsup[i].Checked || CheckBoxGoto[i].Checked || CheckBoxsdown[i].Checked)
                //如果i楼有按钮按下
                {
                    sum = 1;//记录,有最少1个按钮按下

                    if (i > Xfloor && Xflag != UpDown.Down)//如果需求楼层>当前楼层并且电梯方向是上行或停止
                    {
                        Xflag = UpDown.Up;//继续上行
                        break;//已确定方向,其他方向的不管,跳出循环
                    }
                    else if (i < Xfloor && Xflag != UpDown.Up)//如果需求楼层<当前楼层并且电梯方向是下行或停止
                    {
                        Xflag = UpDown.Down;//继续下行
                        break;//已确定方向,其他方向的再管,跳出循环
                    }

                    else//其他情况: 需求楼层与原方向相反 或 需求楼层=当前楼层(方向停) 则方向重置为停止 
                    {
                        Xflag = UpDown.Stop;//设置为停止

                    }

                }

            }

            if (sum == 0)//无任何按钮按下
            {
                Xflag = UpDown.Stop; //状态设置为停
            }

        }
        /// <summary>
        /// 电梯上下停控制
        /// </summary>
        /// <param name="updown"></param>
        private void XUpDown(UpDown updown)
        {
            timer1.Stop();
            if (updown == UpDown.Up)
            {
                //  panelElevator.Location = new Point(panelElevator.Location.X, panelElevator.Location.Y - panelElevator.Height);
                int y1 = panelElevator.Location.Y - panelElevator.Height;
                for (int i = 0; i <= panelElevator.Height; i+=1)
                {
                    Application.DoEvents();
                    panelElevator.Location = new Point(panelElevator.Location.X, panelElevator.Location.Y - 1);
                    //     panelElevator.Update();
                    Thread.Sleep(10);


                }
                Thread.Sleep(10);
            }
            else if (updown == UpDown.Down)
            {
                // panelElevator.Location = new Point(panelElevator.Location.X, panelElevator.Location.Y + 1);
                int y1 = panelElevator.Location.Y + panelElevator.Height;
                for (int i = 0; i <= panelElevator.Height; i+=1)
                {
                    Application.DoEvents();
                    panelElevator.Location = new Point(panelElevator.Location.X, panelElevator.Location.Y + 1);
                    //     panelElevator.Update();
                    Thread.Sleep(10);
                }
                //  panelElevator.Update();
                Thread.Sleep(10);
            }
            else if (updown == UpDown.Stop)
            {

                panelElevator.Update();
            }
            timer1.Start();
        }

        /// <summary>
        /// 轮询电梯
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
          
       private void timer1_Tick(object sender, EventArgs e)
        { 

            Xwhere(); // 判断方向
            if (Xflag == UpDown.Up)
            {
              
               XUpDown(UpDown.Up);
                Xfloor++;

                if (CheckBoxGoto[Xfloor].Checked || CheckBoxsup[Xfloor].Checked)
                {
                    XOpenClose();
                    CheckBoxGoto[Xfloor].Checked = CheckBoxsup[Xfloor].Checked = false;
                }

            }


            if (Xflag == UpDown.Down)
            {
                XUpDown(UpDown.Down);

                Xfloor--;
                {
                    if (CheckBoxGoto[Xfloor].Checked || CheckBoxsdown[Xfloor].Checked)
                    {
                        XOpenClose();
                        CheckBoxGoto[Xfloor].Checked = CheckBoxsdown[Xfloor].Checked = false;
                    }

                }

            }
            if (Xflag == UpDown.Stop)
            {
                if (CheckBoxsup[Xfloor].Checked || CheckBoxGoto[Xfloor].Checked || CheckBoxsdown[Xfloor].Checked)
                {
                    XOpenClose();
                    CheckBoxGoto[Xfloor].Checked = CheckBoxsup[Xfloor].Checked = CheckBoxsdown[Xfloor].Checked = false;

                }
            }

         
             
        }



  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值