Exemplo n.º 1
0
        private void btnOK_Click(object sender, EventArgs e)
        {
            player = players[dealer.GetCurrentPlayer()];

            if (isChangeAbility)
            {
                str = textBox.Text;
                if (int.TryParse(str, out num))
                {
                    num = Int32.Parse(str);
                    if (num <= (int)Card.Pattern.Joker)
                    {
                        dealer.ChangePattern((Card.Pattern)(num - 1));

                        isChangeAbility  = false;
                        lblQuestion.Text = "놓을 카드 번호를 입력해주세요.";
                        board.GetFieldCard().SpecialAbility(dealer);
                        dealer.ResetPlayCount();
                        GoToNextTurn();
                    }
                    else
                    {
                        MessageBox.Show("잘못된 입력입니다.");
                    }
                }
                else
                {
                    MessageBox.Show("숫자만 입력해주세요.");
                }
            }
            else
            {
                str = textBox.Text;
                if (int.TryParse(str, out num))
                {
                    if (num <= player.GetCardAmount())
                    {
                        if (dealer.CanPlayCard(player.GetCard(num)))
                        {
                            //카드 개수가 0개인지 확인
                            if (!GameIsEnd(players))
                            {
                                //처음 필드에 올려지는 카드는 능력을 발휘하지 않음
                                if (isInitialPrint)
                                {
                                    isInitialPrint = false;
                                }

                                //플레이어의 카드를 보드의 필드카드로 보냄
                                Card card = player.PlayCard(num);
                                SetCardToField(card, board, dealer);

                                //문양을 바꾸는 능력은 사용자의 입력을 미리 받아둬야함
                                if (IsChangeAbilityCard(card))
                                {
                                    lblQuestion.Text = "어떤 문양으로 변경?  1:♠  2:♣  3:◆  4:♥";
                                    isChangeAbility  = true;
                                }
                                else
                                {
                                    dealer.ResetPlayCount();
                                    //카드의 스페셜 능력 발동, 딜러를 건내줌
                                    card.SpecialAbility(dealer);
                                }

                                textBox.Clear();

                                if (GameIsEnd(players))
                                {
                                    GameEnd(players);
                                }

                                if (dealer.GetPlayCount() == 0)
                                {
                                    GoToNextTurn();
                                }
                                else
                                {
                                    DrawBoard();
                                }
                            }
                        }
                        else
                        {
                            MessageBox.Show("낼 수 없는 카드입니다.");
                            //낼 수 없는 카드인데도 턴이 넘겨지는 버그
                        }
                    }
                    else
                    {
                        MessageBox.Show("잘못된 입력입니다.");
                    }
                }
                else
                {
                    MessageBox.Show("숫자만 입력해주세요.");
                }
            }
        }
Exemplo n.º 2
0
        static void Main(string[] args)
        {
            //플레이하는 인원 수와 인원 수 당 제시할 카드 수 지정
            int  playersNumber    = 2;
            int  playingCardCount = 7;
            bool isPlayCountEnd   = false;

            //클래스들 선언
            Dealer        dealer  = new Dealer();
            Board         board   = new Board();
            List <Player> players = new List <Player>();

            //지정된 플레이어 수만큼 생성 후 리스트에 추가
            for (int i = 0; i < playersNumber; i++)
            {
                Player player = new Player(i);
                players.Add(player);
            }

            //먼저 시작할 플레이어 결정
            dealer.SetCurrentPlayer(0);

            //보드에서 카드 셔플
            board.SetCard();

            //플레이어들에게 지정한 만큼의 카드 배분
            for (int i = 0; i < playersNumber; i++)
            {
                for (int j = 0; j < playingCardCount; j++)
                {
                    SendCardToPlayer(board, players[i]);
                }
            }

            //필드에 하나 카드를 올려놓음. 이 카드를 시작으로 게임을 진행
            Card firstCard = board.GetBoardCard();

            SetCardToField(firstCard, board, dealer);


            String str = "";
            int    num = 0;

            //게임은 한 명이 파산하거나 카드 갯수가 0개가 될 때까지 계속된다.
            while (!GameIsEnd(players))
            {
                //시작하면 플레이어 한 명이 한 턴을 시작한다.
                Player player = players[dealer.GetCurrentPlayer()];

                //반복가능 횟수만큼 플레이 가능(특수카드 능력에 대비)
                for (int i = 0; i < dealer.GetPlayCount(); i++)
                {
                    isPlayCountEnd = false;

                    //화면을 보여줌
                    PrintBoard(board, dealer, players, player);

                    //반복가능 횟수 한 번을 썼으면(카드를 내던가 받던가 다 했으면)
                    while (!isPlayCountEnd)
                    {
                        //가진 카드 중 몇 번째 카드를 선택할 건지 선택지를 주고 플레이어가 선택
                        System.Console.WriteLine("몇 번째 카드를 선택? (카드 받기 : 0)");
                        str = System.Console.ReadLine();
                        try
                        {
                            num = Int32.Parse(str);
                        }
                        catch (FormatException e)
                        {
                            System.Console.WriteLine(e.Message);
                            continue;
                        }
                        if (num > player.GetCardAmount())
                        {
                            System.Console.WriteLine("잘못된 입력입니다.");
                            continue;
                        }

                        //새 카드를 뽑는 경우
                        if (num == 0)
                        {
                            //플레이어가 카드를 새로 받음
                            if (dealer.GetDamage() > 0)
                            {
                                for (int j = 1; j <= dealer.GetDamage(); j++)
                                {
                                    SendCardToPlayer(board, player);
                                }

                                dealer.ResetDamage();
                            }
                            else
                            {
                                SendCardToPlayer(board, player);
                            }

                            //카드 수가 초과할 경우를 대비해 확인
                            if (GameIsEnd(players))
                            {
                                break;
                            }
                        }
                        //카드를 내는 경우
                        else
                        {
                            //카드가 낼 수 있는지 딜러가 현재 문양과 숫자를 보고 판단
                            //맞으면 그대로 제출하도록, 아니면 사용 가능한 카드를 제출하거나 새카드를 뽑을 때까지 재질문
                            if (!dealer.CanPlayCard(player.GetCard(num)))
                            {
                                System.Console.WriteLine("낼 수 없는 카드입니다.");
                                continue;
                            }

                            //카드 개수가 0개인지 확인
                            if (GameIsEnd(players))
                            {
                                break;
                            }

                            //플레이어의 카드를 보드의 필드카드로 보냄
                            Card card = player.PlayCard(num);
                            SetCardToField(card, board, dealer);

                            //문양을 바꾸는 능력은 사용자의 입력을 미리 받아둬야함
                            if (IsChangeAbilityCard(card))
                            {
                                while (true)
                                {
                                    System.Console.WriteLine("어떤 문양으로 변경?  1:♠  2:♣  3:◆  4:♥");
                                    str = System.Console.ReadLine();
                                    try
                                    {
                                        num = Int32.Parse(str);
                                    }
                                    catch (FormatException e)
                                    {
                                        System.Console.WriteLine(e.Message);
                                        continue;
                                    }

                                    dealer.ChangePattern((Card.Pattern)(num - 1));
                                    break;
                                }
                            }

                            //카드의 스페셜 능력 발동, 딜러를 건내줌
                            card.SpecialAbility(dealer);
                        }

                        isPlayCountEnd = true;
                    }
                }

                //게임이 계속 되면 다음 턴으로 넘김
                dealer.SetNextTurn();
            }

            Player winner = GetWinner(players);

            System.Console.WriteLine($"Winner is Player{winner.no}");
        }