Ejemplo n.º 1
0
        public const int BettingMoney = 100; // 배팅금

        static void Main(string[] args)
        {
            #region 섯다 족보
            IEnumerable <Genealogy> Gen = new Genealogy[]
            {
                new Genealogy {
                    Name = "삼팔광땡", Score = 100
                },
                new Genealogy {
                    Name = "광땡", Score = 90
                },
                new Genealogy {
                    Name = "멍텅구리 구사", Score = 80
                },
                new Genealogy {
                    Name = "일땡", Score = 61
                },
                new Genealogy {
                    Name = "이땡", Score = 62
                },
                new Genealogy {
                    Name = "삼땡", Score = 63
                },
                new Genealogy {
                    Name = "사땡", Score = 64
                },
                new Genealogy {
                    Name = "오땡", Score = 65
                },
                new Genealogy {
                    Name = "육땡", Score = 66
                },
                new Genealogy {
                    Name = "칠땡", Score = 67
                },
                new Genealogy {
                    Name = "팔땡", Score = 68
                },
                new Genealogy {
                    Name = "구땡", Score = 69
                },
                new Genealogy {
                    Name = "장땡", Score = 70
                },
                new Genealogy {
                    Name = "구사", Score = 50
                },
                new Genealogy {
                    Name = "알리", Score = 15
                },
                new Genealogy {
                    Name = "독사", Score = 14
                },
                new Genealogy {
                    Name = "구삥", Score = 13
                },
                new Genealogy {
                    Name = "장삥", Score = 12
                },
                new Genealogy {
                    Name = "장사", Score = 11
                },
                new Genealogy {
                    Name = "세륙", Score = 10
                },                                       // 십끗 => 4, 6 만
                new Genealogy {
                    Name = "갑오", Score = 9
                },                                       // 구끗
                new Genealogy {
                    Name = "팔끗", Score = 8
                },
                new Genealogy {
                    Name = "칠끗", Score = 7
                },
                new Genealogy {
                    Name = "육끗", Score = 6
                },
                new Genealogy {
                    Name = "오끗", Score = 5
                },
                new Genealogy {
                    Name = "사끗", Score = 4
                },
                new Genealogy {
                    Name = "삼끗", Score = 3
                },
                new Genealogy {
                    Name = "이끗", Score = 2
                },
                new Genealogy {
                    Name = "일끗", Score = 1
                },
                new Genealogy {
                    Name = "망통", Score = 0
                },
                new Genealogy {
                    Name = "암행어사", Score = 1
                },
                new Genealogy {
                    Name = "땡잡이", Score = 0
                }                                       // 3, 7 만
            };
            #endregion


            var spgt = from g in Gen where g.Score == 100 select g; // 삼팔광땡
            var gt   = from g in Gen where g.Score == 90 select g;  // 광땡
            var mtgr = from g in Gen where g.Score == 80 select g;  // 멍텅구리 구사

            foreach (Genealogy gen in spgt)
            {
                Console.WriteLine(gen.Name);
            }
            foreach (Genealogy gen in gt)
            {
                Console.WriteLine(gen.Name);
            }



            Console.WriteLine("┌────────────────┐");
            Console.WriteLine("│\t   룰을 선택하세요.       │");
            Console.WriteLine("│\t      1. Basic\t          │");
            Console.WriteLine("│\t      2. Simple\t          │");
            Console.WriteLine("└────────────────┘");
            Console.Write(" ☞ ");
            int      input    = int.Parse(Console.ReadLine());
            RuleType ruleType = (RuleType)input;
            Console.WriteLine();

            #region Memo1
            // unit test => 테스트 코드들을 모아두는??

            //Player p = new Player();
            //p.GoToShcool(); // 배팅하기. 아래 코드보다 이게 나음
            //p.Money -= 100; // 됨
            //p.Cards = new List<Card>(); // 카드 생성? 이 안됨
            //p.Cards.Add(new Card()); // 카드 추가는 됨
            #endregion

            #region  레이어 2명
            List <Player> players = new List <Player>();
            for (int i = 0; i < 2; i++)
            {
                if (ruleType == RuleType.Basic)
                {
                    players.Add(new BasicPlayer());
                }
                else
                {
                    players.Add(new SimplePlayer());
                }
            } // 각각의 타입에 따른 객체를 오버라이딩하여 생성
            #endregion

            #region Memo - var
            //// C#에서의 var은 타입을 유추할 수 있을 때 사용함.
            //int i = 1;
            //var i2 = 1;
            //string s = "aa";
            //var s2 = "bb";

            //Dictionary<int, List<List<string>>> list = new Dictionary<int, List<List<string>>>();
            //var list2 = new Dictionary<int, List<List<string>>>();
            #endregion

            #region  레이어들의 종잣돈 지급
            int ChanceNumber = 1;

            foreach (var player in players)
            {
                player.Money     = SeedMoney; // 플레이어들에게 500원씩 지급
                player.OneChance = ChanceNumber;
            }
            #endregion

            int round         = 1; // 초기 라운드
            int rematchNumber = 1; // 배팅금 배율

            #region 게임 시작
            while (true)
            {
                #region 올인시 게임 종료
                if (IsAnyoneAllIn(players)) //한명이 올인하면 게임 종료
                {
                    Console.WriteLine("┌────────────────┐");
                    Console.WriteLine("│\t    ~ 이제 그만 ~\t  │");
                    Console.WriteLine("└────────────────┘");
                    Console.WriteLine();
                    break;
                }
                #endregion

                Console.WriteLine(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                Console.WriteLine($"\t     [Round {round++}]");

                // 딜러는 매 라운드마다 하나씩 만들어짐
                Dealer dealer = new Dealer();

                #region 학교 출석 (배팅)
                foreach (var player in players)
                {
                    player.Money -= (BettingMoney * rematchNumber);

                    if (player.Money < 0)
                    {
                        Console.WriteLine("┌────────────────┐");
                        Console.WriteLine("│  ♨ 배팅금액 부족 경기불가 ♨  │");
                        Console.WriteLine("└────────────────┘");
                        return;
                    }
                    else
                    {
                        dealer.PutMoney(BettingMoney * rematchNumber);
                    }
                }
                #endregion

                #region 카드배분
                foreach (var player in players)
                {
                    player.Cards.Clear();

                    for (int i = 0; i < 2; i++)
                    {
                        player.Cards.Add(dealer.DrawCard());
                    }

                    Console.WriteLine(player.GetCardText());
                }
                #endregion

                #region 경기 (일반적 / 재경기)

                JudgeRematch(Rematch(players)); // 멍텅구리 구사, 구사, 무승부

                if (Rematch(players) == 80 || Rematch(players) == 50 ||
                    Rematch(players) == 40)
                {
                    int money = dealer.GetMoney() / 2;

                    for (int i = 0; i < 2; i++)
                    {
                        players[i].Money += money;
                    }

                    rematchNumber = rematchNumber * 2; // 재경기 시 배팅금 배율 2배
                    continue;
                }
                else  //일반적 상황
                {
                    // 승자 찾기
                    Player winner = FindWinner(players);

                    // 승자에게 상금 주가
                    winner.Money += dealer.GetMoney();

                    rematchNumber = 1; // 배팅금 배율 초기화

                    // 각 플레이어들의 돈 출력
                    for (int i = 0; i < 2; i++)
                    {
                        Console.Write($"     Player {i + 1}'s Money : ");
                        Console.WriteLine("₩ " + players[i].Money);
                    }

                    Console.WriteLine(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
                    Console.WriteLine();
                }
                #endregion

                PayBackOrGoToThePolice(players); // 기사회생, 경찰서
            }
            #endregion
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            Console.WriteLine("룰 타입을 선택하세요. (1:Basic, 2:Develop)");
            int      input    = int.Parse(Console.ReadLine());
            RuleType ruleType = (RuleType)input;

            Printline();
            List <Player> players = new List <Player>();

            if (ruleType == RuleType.Basic)
            {
                players.Add(new RealPlayer());
                players.Add(new ComputerPlayer());
            }

            else
            {
                for (int i = 0; i < 2; i++)
                {
                    players.Add(new RealPlayer());
                }
            }


            foreach (var player in players)
            {
                player.Money = SeedMoney;
            }

            int round = 1;

            while (true)
            {
                Console.WriteLine();
                Console.WriteLine();
                Console.WriteLine();

                // 한명이 오링이면 게임 종료
                if (IsAnyoneOring(players))
                {
                    break;
                }

                Console.WriteLine($"[Round {round}]을 진행합니다.");
                Printline();
                round++;

                Dealer dealer = new Dealer();

                // 학교 출석
                foreach (var player in players)
                {
                    player.Money -= BettingMoney;
                    dealer.PutMoney(BettingMoney);
                }

                // 카드 돌리기
                foreach (var player in players)
                {
                    player.Cards.Clear();
                    dealer.Cards.Clear();


                    for (int i = 0; i < 2; i++)
                    {
                        player.Cards.Add(dealer.DrawCard());
                    }

                    Console.WriteLine(player.GetCardText());
                }
                Printline();
                Console.WriteLine("게임을 계속하시겠습니까? (1. 콜   2. 다이)");
                Console.WriteLine("[콜] 하면 50원 추가 배팅 후 딜러 패 공개,");
                Console.WriteLine("[다이]하면 모든 패 공개 후 패배로 처리.");

                int sel = int.Parse(Console.ReadLine());

                bool surren = Surren(sel);

                //딜러 패 뽑기
                dealer.Cards.Add(dealer.DrawCard());

                //딜러가 뽑은 패 각자 덱으로 삽입
                foreach (var player in players)
                {
                    player.Cards.Add(dealer.DealerCard());
                }

                Printline();
                //딜러가 뽑은 패 공개
                Console.WriteLine(dealer.GetCardTextDealer());
                Printline();

                Console.WriteLine(players[0].GetCardText());

                PrintMyGokbo(players);

                Printline();

                if (!surren)
                {
                    foreach (var player in players)
                    {
                        player.Money -= CallBettingMoney;
                        dealer.PutMoney(CallBettingMoney);
                    }

                    Console.WriteLine("게임을 계속하시겠습니까? (1. 콜   2. 다이)");
                    Console.WriteLine("[콜]하면 모든 패 공개,");
                    Console.WriteLine("[다이]하면 패배로 처리.");

                    int finalsel = int.Parse(Console.ReadLine());

                    surren = Surren(finalsel);

                    Printline();
                    //무승부 찾기
                    if (Regame(players))
                    {
                        continue;
                    }
                }



                // 승자 찾기
                Player winner = FindWinner(players, surren);

                // 승자에게 상금 주기
                winner.Money += dealer.GetMoney();


                // 각 플레이어의 돈 출력
                Printline();
                foreach (var player in players)
                {
                    Console.Write(player.Money + "\t");
                }


                Console.WriteLine();
                Console.WriteLine("다음 라운드 진행을 위해 아무 숫자를 입력해 주세요.");
                int nextRound = int.Parse(Console.ReadLine());

                Printline();
            }
        }