using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Text.RegularExpressions; using System.Windows.Forms; namespace HandRecorderPS.parser { class Players { private Dictionary> __getPlayers; public Dictionary> _getPlayers { get { return __getPlayers; } set { __getPlayers = value; } } public void getPlayers(string history) { Regex rx; MatchCollection mc; Dictionary> players = new Dictionary>(); // INTO CONFIGFILE string _stacks = @"Seat\s(\d+):\s(\w+)\s\(\s\$(.+)\s\)"; string _button = @"Seat\s(\d+)\sis\sthe\sbutton"; string _totalplayers = @"Total\snumber\sof\splayers\s:\s(\d+).*?"; string _sitoutsearch = @"(\S+) is sitting out."; string _sitoutplayerA = @"Seat \d+: "; string _sitoutplayerE = @" \(.*?\)"; string _ButtonTitle = "Button"; int ButtonSeat = 0; if (Regex.IsMatch(history, _totalplayers)) ButtonSeat = Convert.ToInt16(Regex.Match(history, _button).Groups[1].ToString()); int SitoutPlayers = 0; rx = new Regex(_sitoutsearch); mc = rx.Matches(history); foreach (Match mtch in mc) { if (Regex.IsMatch(history, _sitoutplayerA + mtch.Groups[1].ToString() + _sitoutplayerE)) { SitoutPlayers++; } } int TotalPlayers = 0; if (Regex.IsMatch(history, _totalplayers)) TotalPlayers = Convert.ToInt16(Regex.Match(history, _totalplayers).Groups[1].ToString()) - SitoutPlayers; Stack seats; seats = getSeats(TotalPlayers); int i = 0; int pSeat = 0; rx = new Regex(_stacks); mc = rx.Matches(history); foreach (Match mtch in mc) { players.Add(i, new Dictionary()); players[i].Add("PlayerSeatNumber", mtch.Groups[1].ToString()); players[i].Add("PlayerName", mtch.Groups[2].ToString()); players[i].Add("PlayerStack", mtch.Groups[3].ToString()); pSeat = Convert.ToInt16(players[i]["PlayerSeatNumber"].ToString()); if (pSeat == ButtonSeat) { players[i].Add("PlayerSeatTitle", _ButtonTitle); } else if ((pSeat > ButtonSeat) && (i < TotalPlayers)) { players[i].Add("PlayerSeatTitle", seats.Pop().ToString()); } i++; } // benennt die restlichen positionen i = 0; pSeat = 0; int x = 1; while (seats.Count > 0) { pSeat = Convert.ToInt16(players[i]["PlayerSeatNumber"]); if ((pSeat == x) && (pSeat < ButtonSeat)) { players[i].Add("PlayerSeatTitle", seats.Pop().ToString()); i = 0; x++; } else if (i == TotalPlayers) { i = 0; x++; } else { i++; } } __getPlayers = players; } private Stack getSeats(int TotalPlayers) { string[] SeatTitleList; if (TotalPlayers == 10) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "UTG+1", "UTG", "BB", "SB" }; } else if (TotalPlayers == 9) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "UTG+1", "BB", "SB" }; } else if (TotalPlayers == 8) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "UTG+2", "BB", "SB" }; } else if (TotalPlayers == 7) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "MP1", "BB", "SB" }; } else if (TotalPlayers == 6) { SeatTitleList = new string[] { "CO", "MP3", "MP2", "BB", "SB" }; } else if (TotalPlayers == 5) { SeatTitleList = new string[] { "CO", "MP3", "BB", "SB" }; } else if (TotalPlayers == 4) { SeatTitleList = new string[] { "CO", "BB", "SB" }; } else if (TotalPlayers == 3) { SeatTitleList = new string[] { "BB", "SB" }; } else if (TotalPlayers == 2) { SeatTitleList = new string[] { "BB" }; } else { SeatTitleList = new string[0]; } return arrToStack(SeatTitleList); } private Stack arrToStack(string[] myStr) { Stack myStack = new Stack(); if (myStr.Length > 0) { foreach (string sStr in myStr) { myStack.Push(sStr); } } return myStack; } } }