Example #1
0
        static void Main(string[] args)
        {
            List <Socket> UsersSocketList = new List <Socket>();
            List <User>   UsersList       = new List <User>();
            List <Player> Players         = new List <Player>();

            //Ввод числа игроков
            Console.WriteLine("Введите число игроков (от 2 до 5)");
            ColClient = Console.Read() - (byte)'0';
            if (ColClient < 2)
            {
                ColClient = 2;
            }
            else if (ColClient > maxColClient)
            {
                ColClient = 5;
            }

            while (StartConnect(ColClient, ref UsersSocketList, ref UsersList))
            {
                Players = CreatePlayerList(UsersList);
                StartGame(UsersSocketList, ref Players);
                SendToPlayersSecret(UsersSocketList, Players);
                Game(UsersSocketList, ref Players);
                string viners = GameResult(UsersSocketList, ref Players);

                for (int i = 0; i < UsersSocketList.Count(); i++)
                {
                    JsonHandle.SendObject(UsersSocketList[i], viners);
                }

                SavePlayerList(Players);
            }
            Console.ReadLine();
        }
Example #2
0
        static void SendToPlayersSecret(List <Socket> UsersSockets, List <Player> PlayerList)
        {
            string jsonObjectString = JsonConvert.SerializeObject(PlayerList, Formatting.Indented);

            // файл для записи сериализованного объекта
            StreamWriter Sw = new StreamWriter("PlayerTmp.json");

            Sw.Write(jsonObjectString);
            Sw.Flush();
            Sw.Close();
            for (int i = 0; i < UsersSockets.Count(); i++)
            {
                // десериализация из файла
                StreamReader  Sr         = new StreamReader("PlayerTmp.json");
                string        jsonObject = Sr.ReadToEnd();
                List <Player> SendList   = JsonConvert.DeserializeObject <List <Player> >(jsonObject);
                Sr.Close();
                for (int j = 0; j < PlayerList.Count(); j++)
                {
                    if (i != j)
                    {
                        SendList[j].card1 = "00";
                        SendList[j].card2 = "00";
                    }
                }
                JsonHandle.SendObject(UsersSockets[i], true); //refresh
                Thread.Sleep(100);
                JsonHandle.SendObject(UsersSockets[i], SendList);
                Thread.Sleep(100);
            }
        }
Example #3
0
        static bool StartConnect(int ColClient, ref List <Socket> UsersSockets, ref List <User> Users)
        {
            bool result = true;

            try
            {
                //конечная локальная точка
                int         Port       = 11020;
                IPHostEntry ipHost     = Dns.GetHostEntry("localhost");
                IPAddress   ipAddr     = ipHost.AddressList[1];
                IPEndPoint  ipEndPoint = new IPEndPoint(ipAddr, Port);

                //Сoздаем сокет Ncp/Ip
                Socket sListener = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                sListener.Bind(ipEndPoint);
                sListener.Listen(ColClient);

                //Сокет для локальной точки и прослушивание входящих сокетов
                UsersSockets = new List <Socket>();
                Users        = new List <User>();

                //tiemer
                Thread thread1 = new Thread(ListnerTimer);
                thread1.IsBackground = true;
                thread1.Start(sListener); //запускаем
                while ((UsersSockets.Count() < ColClient))
                {
                    //!!!
                    Console.WriteLine("Ожидаем соединения через {0}", ipEndPoint);

                    //Ожидаем соединения
                    Socket handler = sListener.Accept();


                    //общаемся с клиентом
                    Users.Add(JsonConvert.DeserializeObject <User>(JsonHandle.ReciveString(handler)));

                    ///!!!
                    //Console.WriteLine("Login {0}", user.login);

                    //Отвечаем
                    Port++;
                    JsonHandle.SendObject(handler, Port);
                    ipEndPoint = new IPEndPoint(ipAddr, Port);

                    //close
                    handler.Shutdown(SocketShutdown.Both);
                    handler.Close();

                    //Сoздаем сокет Tcp/Ip
                    Socket UserSender = new Socket(ipAddr.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                    //Сокет подключение
                    try
                    {
                        UserSender.Connect(ipEndPoint);
                        UsersSockets.Add(UserSender);
                    }
                    catch
                    {
                        Port--;
                    }
                }
                //close
                thread1.Abort();
                sListener.Close();
                sListener = null;

                //проверка на число пользователей
                if (UsersSockets.Count() < 2)
                {
                    result = false;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
            }

            return(result);
        }
Example #4
0
        static void Game(List <Socket> UsersSockets, ref List <Player> PlayerList)
        {
            TPokerAction pokerAction;
            bool         stop  = false;
            bool         raise = true;

            do
            {
                raise = false;
                for (int i = 0; i < UsersSockets.Count(); i++)
                {
                    if ((PlayerList[i].fold != true) && PlayerList[i].money != 0)
                    {
                        JsonHandle.SendObject(UsersSockets[i], false); //stop
                        Thread.Sleep(100);
                        JsonHandle.SendObject(UsersSockets[i], stop);
                        pokerAction = JsonConvert.DeserializeObject <TPokerAction>(JsonHandle.ReciveString(UsersSockets[i]));
                        switch (pokerAction)
                        {
                        case TPokerAction.Check:
                            PlayerList[i].money = PlayerList[i].money + PlayerList[i].bet - MaxBet;
                            if (PlayerList[i].money > 0)
                            {
                                AllMoney          = AllMoney - PlayerList[i].bet + MaxBet;
                                PlayerList[i].bet = MaxBet;
                            }
                            else
                            {
                                AllMoney            = AllMoney - PlayerList[i].bet + MaxBet + PlayerList[i].money;
                                PlayerList[i].bet   = MaxBet + PlayerList[i].money;
                                PlayerList[i].money = 0;
                            }
                            break;

                        case TPokerAction.Rais:
                            int DopBet = JsonConvert.DeserializeObject <int>(JsonHandle.ReciveString(UsersSockets[i]));

                            if (PlayerList[i].bet + DopBet < MaxBet)
                            {
                                DopBet = MaxBet - PlayerList[i].bet;
                            }
                            PlayerList[i].money = PlayerList[i].money - DopBet;
                            if (PlayerList[i].money > 0)
                            {
                                AllMoney          += DopBet;
                                PlayerList[i].bet += DopBet;
                            }
                            else
                            {
                                AllMoney            = AllMoney + DopBet + PlayerList[i].money;
                                PlayerList[i].bet   = PlayerList[i].bet + DopBet + PlayerList[i].money;
                                PlayerList[i].money = 0;
                            }
                            if (MaxBet < PlayerList[i].bet)
                            {
                                MaxBet = PlayerList[i].bet;
                                raise  = true;
                            }
                            break;

                        default:
                            PlayerList[i].fold = true;
                            PlayerList[i].bet  = 0;
                            break;
                        }
                        PlayerList[i].MaxBet = MaxBet;
                    }

                    SendToPlayersSecret(UsersSockets, PlayerList);
                }

                //new circle
                raise = raise && (PlayerList[0].bet != MaxBet);
                stop  = ((PlayerList[0].table.Length == 10) && (raise == false));
                if ((raise == false) && !stop)
                {
                    int    num       = rand.Next(0, cards.Deck.Count());
                    string TableCard = cards.Deck[num];
                    cards.Deck.Remove(TableCard);
                    if (PlayerList[0].table == "")
                    {
                        num        = rand.Next(0, cards.Deck.Count());
                        TableCard += cards.Deck[num];
                        cards.Deck.Remove(cards.Deck[num]);
                        num        = rand.Next(0, cards.Deck.Count());
                        TableCard += cards.Deck[num];
                        cards.Deck.Remove(cards.Deck[num]);
                    }
                    foreach (Player player in PlayerList)
                    {
                        player.table = player.table + TableCard;
                    }
                }
                SendToPlayersSecret(UsersSockets, PlayerList);
                // stop game
            }while(!stop);
            for (int i = 0; i < UsersSockets.Count(); i++)
            {
                JsonHandle.SendObject(UsersSockets[i], false); //stop
                Thread.Sleep(200);
                JsonHandle.SendObject(UsersSockets[i], stop);
            }
        }