예제 #1
0
        private void picDisks_Click(object sender, EventArgs e)
        {
            try
            {
                PictureBox ClickedDisks = (PictureBox)sender; //sender lúc này 9 là picturebox ứng với đĩa được nhấn

                if (DisksRodA.Contains(ClickedDisks))         //Kiểm tra đĩa đang thuộc tập đĩa nào -> kiếm ->Dùng phương thức contains truyền vào đĩa được nhấn

                {
                    picTower_Click(picTowerA, new EventArgs());// nếu đĩa được nhấn nằm ở cọc A -> Gọi lại phương thức xử lí sự kiện click cho cọc A
                }
                else if (DisksRodB.Contains(ClickedDisks))
                {
                    picTower_Click(picTowerB, new EventArgs());
                }

                else
                {
                    picTower_Click(picTowerC, new EventArgs());
                }
            }catch (InvalidCastException a)
            {
                MessageBox.Show("Click chính xác vô bạn ei", "Thông báo", MessageBoxButtons.OK);
            }
        }
예제 #2
0
        private void btnPlay_Click(object sender, EventArgs e)
        {
            //reset
            tmrCountTime.Stop(); // ->Khi bấm vào thì những trạng thái đang dùng trước đó sẽ trả về ban đầu
                                 // -> Để người dùng có thể bắt đầu chơi lại 1 game mới
            tmrAnimation.Enabled = false;
            btnAuto.Enabled      = true;
            rtbLog.Text          = "Đồ án 1 - Poon & Thanh Tuấn";
            foreach (PictureBox disk in disks)
            {
                disk.Visible = false; // trả về trạng thái ban đầu -> ẩn các đĩa -> Tính đa hình
            }

            time              = new TimeSpan(0); // làm mới lại thời gian bắt đầu từ 0
            lblTime.Text      = "Thời Gian: 00:00:00";
            lblMoveCount.Text = "Số Lần Di Chuyển: 0 lần";
            moveCount         = 0;// reset số lần đã di chuyển về 0 -> chưa di chuyển lần nào


            DisksRodA.Clear();//Khi được reset thì xoá hết các đĩa của cọc
            DisksRodB.Clear();
            DisksRodC.Clear();

            picTowerA.BorderStyle = picTowerB.BorderStyle = picTowerC.BorderStyle = BorderStyle.None; //Khi chọn vào 1 cái cọc sẽ có 1 cái border single
                                                                                                      //-> Tắt hết borderStyle nếu có cọc nào đang được chọn
            FirstClickedDisks = SecondClickedDisks = null;                                            //reset lần chọn đầu và lần 2

            //Initialize ( Khởi tạo sau khi reset )

            nubLevel.Enabled  = false; //Tắt điều chỉnh số đĩa để tránh người dùng đang dùng 3 đĩa nhưng có thể sửa lại n đĩa trong lúc đang chơi
            level             = (int)nubLevel.Value;
            btnGiveUp.Enabled = true;
            btnPlay.Enabled   = false;
            btnPlay.Text      = "PLAY AGAIN";

            int x = picTowerA.Location.X + DistXFromTowerToDisk, y = FIRSTY; // Các đĩa khởi tạo sẽ bỏ vào cọc A nên toạ độ x phải giống nhau

            // Toạ độ cột A + khoảng chênh lệch -> Toạ độ đĩa

            for (int i = (int)nubLevel.Value - 1; i >= 0; --i, y -= DISKHEIGHT) //Khi người dùng chọn n đĩa thì phải hiển thị nó lên và xếp nó vào cọc A
            {                                                                   //Để biết đĩa nằm vị trí nào ta dùng 1 vòng for i từ số lượng chuyển kiểu của giá trị số lượng đĩa người dùng chọn -1 ( lùi 1 )
                                                                                //Duyệt thông qua mảng PictureBox[] disks
                                                                                //Ví dụ người ta chọn 3 đĩa thì ứng với đĩa 1,2,3 phần tử 0,1,2 và đĩa lớn sẽ hiển thị trước ( đĩa số 3 )

                disks[i].Location = new Point(x, y);                            // Trước khi hiển thị đĩa phải chỉnh lại vị trí (Location -> bản thân nó là kiểu Point để lưu được toạ độ)
                                                                                // Dựa vào location bên frm Design
                                                                                // Góc toạ độ O nằm ở góc trái trên của form -> Chiều dương x từ O -> sang phải,y từ O -> xuống dưới
                                                                                // Các đĩa đều nằm chung vị trí nên có y = 411 ( được định nghĩa bằng 1 cái hằng số ở trên bài )

                disks[i].Visible = true;                                        // Hiển thị đĩa thứ i
                //Khi vòng lặp chạy lần kế cần lùi toạ độ y lại 1 đoạn = chiều cao đĩa -> đặt nó ở trên
                DisksRodA.Push(disks[i]);                                       // Sau khi khởi tạo phải push nó vào Stack đĩa cọc A -> Gọi phương thức push(đĩa thứ i)
            }

            if (nubLevel.Value == 2)
            {
                lblLeast.Text = "(Tối Thiểu 3 Lần)";
            }

            if (nubLevel.Value == 3)
            {
                lblLeast.Text = "(Tối Thiểu 7 Lần)";
            }

            if (nubLevel.Value == 4)
            {
                lblLeast.Text = "(Tối Thiểu 15 Lần)";
            }

            if (nubLevel.Value == 5)
            {
                lblLeast.Text = "(Tối Thiểu 31 Lần)";
            }

            if (nubLevel.Value == 6)
            {
                lblLeast.Text = "(Tối Thiểu 63 Lần)";
            }

            if (nubLevel.Value == 7)
            {
                lblLeast.Text = "(Tối Thiểu 127 Lần)";
            }

            if (nubLevel.Value == 8)
            {
                lblLeast.Text = "(Tối Thiểu 255 Lần)";
            }

            tmrCountTime.Start(); // Cho chạy timer
        }