コード例 #1
0
ファイル: MainForm.cs プロジェクト: yeon1004/BreakOutGame
        private void BtnChallenge_Click(object sender, EventArgs e)
        {
            // hide main form
            this.Hide();

            // show other form
            ChallengeMode challengeMode = new ChallengeMode();

            ChallengeMode.formName = "ChallengeMode";
            challengeMode.Location = this.Location;
            challengeMode.ShowDialog();

            // close application
            this.Close();
        }
コード例 #2
0
ファイル: Form1.cs プロジェクト: yeon1004/BreakOutGame
        public void timer1_Tick(object sender, EventArgs e)
        {
            Rectangle rc = this.ClientRectangle;

            //새로고침 범위 최소화하기 위한 ocircle
            Rectangle ocircle = new Rectangle(ball.Location, ball.Size);

            //볼 이동
            ball.Offset(ball_x, ball_y);

            //공 튕기기
            if (ball.Bottom > rc.Bottom)
            {
                gameTimer.Stop();
                MessageBox.Show("패배!");

                if (Form1.formName == "StageMode")
                {
                    // hide main form
                    this.Hide();

                    // show other form
                    SelectStage selectStage = new SelectStage();
                    selectStage.ShowDialog();
                    selectStage.Location = this.Location;

                    // close application
                    this.Close();
                }
                else
                {
                    // hide main form
                    this.Hide();

                    // show other form
                    ChallengeMode challengeMode = new ChallengeMode();
                    challengeMode.ShowDialog();
                    challengeMode.Location = this.Location;

                    // close application
                    this.Close();
                }
            }
            else if ((ball.Left <= rc.Left || ball.Right >= rc.Right) || IsBumpedX(bar))
            {
                ball_x = -ball_x;
            }
            else if (ball.Top < rc.Top)
            {
                ball_y = -ball_y;
            }
            else if (IsBumpedY(bar)) //공 바에 튕길 때 각도 조절
            {
                int ballc = ball.Right - (ball.Width / 2);
                switch ((ballc - bar.Left) / (bar.Width / 8) + 1)
                {
                case 1:
                case 2:
                    if (ball_y < 0)
                    {
                        ball_y = 2;
                    }
                    else
                    {
                        ball_y = -3;
                    }
                    if (ball_x < 0)
                    {
                        ball_x = -5;
                    }
                    else if (ball_x > 0)
                    {
                        ball_x = 5;
                    }
                    break;

                case 7:
                case 8:
                    if (ball_y > 0)
                    {
                        ball_y = -2;
                    }
                    else
                    {
                        ball_y = 3;
                    }
                    if (ball_x < 0)
                    {
                        ball_x = -5;
                    }
                    else if (ball_x > 0)
                    {
                        ball_x = 5;
                    }
                    break;

                case 3:
                case 6:
                    if (ball_y < 0)
                    {
                        ball_y = 3;
                    }
                    else if (ball_y > 0)
                    {
                        ball_y = -3;
                    }
                    if (ball_x < 0)
                    {
                        ball_x = -5;
                    }
                    else if (ball_x > 0)
                    {
                        ball_x = 5;
                    }
                    break;

                case 4:
                case 5:
                    if (ball_y < 0)
                    {
                        ball_y = 4;
                    }
                    else if (ball_y > 0)
                    {
                        ball_y = -4;
                    }
                    if (ball_x < 0)
                    {
                        ball_x = -4;
                    }
                    else if (ball_x > 0)
                    {
                        ball_x = 4;
                    }
                    break;

                default:
                    ball_y = -ball_y;
                    break;
                }
                //ball_y = -ball_y;
                if (item1_on >= 0)
                {
                    ball_x = ball_x * 3 / 2;
                    ball_y = ball_y * 3 / 2;
                }
            }

            int blockNum = 0;

            if (item4_on >= 0)
            {
                //벽돌 맞을 경우
                foreach (Control ctrl in this.Controls)
                {
                    if (ctrl is PictureBox)
                    {
                        blockNum++;
                        if (IsBumpedX((PictureBox)ctrl))
                        {
                            this.Controls.Remove(ctrl);
                            ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                        }
                        else if (IsBumpedY((PictureBox)ctrl))
                        {
                            this.Controls.Remove(ctrl);
                            ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                        }
                    }

                    if (ctrl is Button)
                    {
                        if (IsBumpedX((Button)ctrl) || IsBumpedY((Button)ctrl))
                        {
                            int itemId = Convert.ToInt32(ctrl.Tag.ToString());
                            switch (itemId)
                            {
                            case 1:         //공 빨라짐
                                this.Controls.Remove(ctrl);
                                if (item1_on < 0)
                                {
                                    Item1();
                                }
                                break;

                            case 2:         //바 짧아짐
                                this.Controls.Remove(ctrl);
                                if (item2_on < 0)
                                {
                                    Item2();
                                }
                                break;

                            case 3:         //바 길어짐
                                this.Controls.Remove(ctrl);
                                if (item3_on < 0)
                                {
                                    Item3();
                                }
                                break;

                            case 4:         //공 무적
                                this.Controls.Remove(ctrl);
                                if (item4_on < 0)
                                {
                                    Item4();
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                //벽돌 맞을 경우
                foreach (Control ctrl in this.Controls)
                {
                    if (ctrl is PictureBox)
                    {
                        blockNum++;
                        if (IsBumpedX((PictureBox)ctrl))
                        {
                            int iblockTag = Convert.ToInt32(ctrl.Tag.ToString());
                            switch (iblockTag)
                            {
                            case 1:          //일반 벽돌
                                ball_x = -ball_x;
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            case 2:          //돌벽돌
                                ball_x = -ball_x;
                                ctrl.BackgroundImage = new Bitmap("res/block_stone2.png");
                                ctrl.Tag             = "21";
                                break;

                            case 21:        //한번 맞았던 돌벽돌
                                ball_x = -ball_x;
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            case 3:         //철벽돌
                                ball_x = -ball_x;
                                break;

                            case 4:          //유리 벽돌
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            default:
                                break;
                            }
                        }
                        else if (IsBumpedY((PictureBox)ctrl))
                        {
                            int iblockTag = Convert.ToInt32(ctrl.Tag.ToString());
                            switch (iblockTag)
                            {
                            case 1:          //일반 벽돌
                                ball_y = -ball_y;
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            case 2:          //돌벽돌
                                ball_y = -ball_y;
                                ctrl.BackgroundImage = new Bitmap("res/block_stone2.png");
                                ctrl.Tag             = "21";
                                break;

                            case 21:        //한번 맞았던 돌벽돌
                                ball_y = -ball_y;
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            case 3:         //철벽돌
                                ball_y = -ball_y;
                                break;

                            case 4:          //유리 벽돌
                                this.Controls.Remove(ctrl);
                                ItemDrop(ctrl.Left, ctrl.Right, ctrl.Bottom, ctrl.Top);
                                break;

                            default:
                                break;
                            }
                        }
                    }

                    if (ctrl is Button)
                    {
                        if (IsBumpedX((Button)ctrl) || IsBumpedY((Button)ctrl))
                        {
                            int itemId = Convert.ToInt32(ctrl.Tag.ToString());
                            switch (itemId)
                            {
                            case 1:         //공 빨라짐
                                this.Controls.Remove(ctrl);
                                if (item1_on < 0)
                                {
                                    Item1();
                                }
                                break;

                            case 2:         //바 짧아짐
                                this.Controls.Remove(ctrl);
                                if (item2_on < 0)
                                {
                                    Item2();
                                }
                                break;

                            case 3:         //바 길어짐
                                this.Controls.Remove(ctrl);
                                if (item3_on < 0)
                                {
                                    Item3();
                                }
                                break;

                            case 4:         //공 무적
                                this.Controls.Remove(ctrl);
                                if (item4_on < 0)
                                {
                                    Item4();
                                }
                                break;

                            default:
                                break;
                            }
                        }
                    }
                }
            }
            if (blockNum <= 0)
            {
                GameClear();
            }

            //최소 범위만 새로고침
            if (ocircle != ball)
            {
                int left   = Math.Min(ocircle.Left, ball.Left);
                int top    = Math.Min(ocircle.Top, ball.Top);
                int right  = Math.Max(ocircle.Right, ball.Right);
                int bottom = Math.Max(ocircle.Bottom, ball.Bottom);
                this.Invalidate(new Rectangle(left, top, right - left + 1, bottom - top + 1));
            }
        }