Как остановить перемешивание изображений с помощью таймеров в C # - PullRequest
0 голосов
/ 14 августа 2011

Я создаю простой игровой автомат. Одна кнопка для запуска и три кнопки остановки на каждом тайле Picturebox. Моя проблема в том, что каждый раз, когда я нажимаю каждую из кнопок остановки, Picturebox не останавливается.

Мне нужна помощь, в которой, если я нажму кнопку остановки на соответствующем Picturebox, она остановится, и они будут продолжать перемешивать изображения. Затем, если я нажму другую кнопку остановки, другая остановится и т. Д.

Вот что у меня сейчас:

namespace SlotMachine
{
    class SlotMac
    {
        private Form f;
        Button btn1 = new Button(); // First stop
        Button btn2 = new Button(); // Second stop
        Button btn3 = new Button(); // Third stop
        Button btn4 = new Button(); // Start
        Timer Clock;    // Tick
        Timer Clock1;   // Tick
        Timer Clock2;   // Tick
        Int32 tick = 0;

        public SlotMac()
        {
            f = new Form();
            f.Text = "Slot Machine";
            //f.Size = new Size(800, 700);
            f.FormBorderStyle = FormBorderStyle.FixedSingle;
        }

        PictureBox[] pics = new PictureBox[7];
        PictureBox pb = new PictureBox();

        public void Launch()
        {
            int i = 0;

            Clock = new Timer();
            Clock.Interval = 1000;
            Clock.Tick += new EventHandler(Clock_Tick);

            Clock1 = new Timer();
            Clock1.Interval = 1000;
            Clock1.Tick += new EventHandler(Clock1_Tick);

            Clock2 = new Timer();
            Clock2.Interval = 1000;
            Clock2.Tick += new EventHandler(Clock2_Tick);

            int x = 50;
            for (i = 0; i < pics.Length; i++)
            {
                pics[i] = new PictureBox();
                pics[i].Image = Image.FromFile(i+".jpg");
                pics[i].SetBounds(x, 100, 100, 100);
                x += 150;
                f.Controls.Add(pics[i]);
            }

            f.SetBounds(10, 20, 500, 500);

            // STOP
            btn1.Location = new Point(50, 250);
            btn1.Height = 40;
            btn1.Width = 100;
            f.Controls.Add(btn1);
            btn1.Text = "STOP";
            this.btn1.Click += new EventHandler(this.MyButtonClick);

            // STOP
            btn2.Location = new Point(200, 250);
            btn2.Height = 40;
            btn2.Width = 100;
            btn2.Text = "STOP";
            f.Controls.Add(btn2);
            this.btn2.Click += new EventHandler(this.MyButtonClick);

            // STOP
            btn3.Location = new Point(350, 250);
            btn3.Height = 40;
            btn3.Width = 100;
            btn3.Text = "STOP";
            f.Controls.Add(btn3);
            this.btn3.Click += new EventHandler(this.MyButtonClick);

            // START
            btn4.Location = new Point(200, 370);
            btn4.Height = 40;
            btn4.Width = 100;
            btn4.Text = "START";
            f.Controls.Add(btn4);
            this.btn4.Click += new EventHandler(btn4_Click);
            f.ShowDialog();

        }

        public void Stop_Click(object sender, EventArgs e)
        {

        }

        public void Clock_Tick(object sender, EventArgs e)
        {
            tick++;
            Random r = new Random();
            pics[0].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[1].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[2].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[3].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[4].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[5].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[6].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
        }

        public void Clock1_Tick(object sender, EventArgs e)
        {
            tick++;
            Random r = new Random();
            pics[0].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[1].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[2].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[3].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[4].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[5].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[6].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
        }

        public void Clock2_Tick(object sender, EventArgs e)
        {
            tick++;
            Random r = new Random();
            pics[0].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[1].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[2].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[3].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[4].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[5].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
            pics[6].Image = Image.FromFile(r.Next(0, 6) + ".jpg");
        }

        public void MyButtonClick(object sender, EventArgs e)
        {
            // I am having troubles in this part
            if (sender == btn1)
            {
                Clock.Stop();

            }
            if (sender == btn2)
            {
                Clock1.Stop();
            }
            if (sender == btn3)
            {
                Clock2.Stop();
            }
        }

        public void btn4_Click(object sender, EventArgs e)
        {
            Clock.Start();
            Clock1.Start();
            Clock2.Start();
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 14 августа 2011

Каждый тикер устанавливает все семь изображений в картинках. Остановить один из них не поможет, если другие все еще обновят все картинки.

0 голосов
/ 14 августа 2011

Я думаю, вам нужно создать отдельные массивы PictureBox для каждых часов. В противном случае PictureBox для того, что показано, будет постоянно отражать изменения, сделанные двумя другими таймерами.

По сути, если все они основаны на одном и том же массиве, то, когда другие часы изменяют массив, не имеет значения, изменят ли его первые часы или нет; это все еще меняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...