private static void GoRound(List <Player> players, Dealer dealer, ref int groundMoney) { Break($"게임을 시작합니다. 참가비 {Constant.BettingMoney}원이 들어갑니다."); // 카드 회수 foreach (var player in players) { player.DropCards(); } dealer.Shuffle(); // 참가비 foreach (var player in players) { player.Bet.BetMoney += Constant.BettingMoney; } Console.Clear(); // 카드 뽑기 for (int i = 0; i < 2; i++) { foreach (var player in players) { player.AddCard(dealer.DrawCard()); } } // 1페이즈 : 자신의 카드 1장을 확인한다 PhaseOne(players); // 2페이즈 : 자신의 카드 1장과 상대방 카드 1장을 확인하고 베팅한다 PhaseTwo(players); }
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 }
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(); } }