static void Main(string[] args) { ClientClass server = new ClientClass(); // byte[] data = new byte[Constants.SIZE_OF_BYTES_NULL]; int[,] board = new int[10, 10]; //Game field int X1 = Constants.COORDINATE_NULL, Y1 = Constants.COORDINATE_NULL, X2 = Constants.COORDINATE_NULL, Y2 = Constants.COORDINATE_NULL; //from (Х1, Y1) to (X2, Y2) int me = Constants.ID_PLAYER1; //my ID int enemy = Constants.ID_PLAYER2; //enemy ID if (server.FirstConnection_ChangeMyId().Item1 == true) //Connect to server { me = Constants.ID_PLAYER2; enemy = Constants.ID_PLAYER1; } Console.WriteLine(me.ToString()); int t = 0; while (true) { Console.WriteLine(t++.ToString()); byte[] data = server.GetStatus(); //ПGet cur status board = GameBehavior.ParseStatus(data); Console.WriteLine("Get data"); if (GameBehavior.IsMeCurPlayer(data, me) == false) //Not my move { continue; } //You need to get X1, Y1, X2, Y2 //CODE HERE //CODE HERE //CODE HERE X1 = 2; Y1 = 6; X2 = 3; Y2 = 7; //Example Console.WriteLine(X1.ToString() + " " + Y1.ToString() + " " + X2.ToString() + " " + Y2.ToString()); data = GameBehavior.ConvertMoveToByte(X1, Y1, X2, Y2); server.SendMove(data); //Send move Console.WriteLine("Send data"); } }
//конец функций static void Main(string[] args) { ClientClass server = new ClientClass(); //Класс для взаимодействия с сервером byte[] data = new byte[Constants.SIZE_OF_BYTES_NULL]; int[,] board = new int[10, 10]; //Игровое поле int X1 = Constants.COORDINATE_NULL, Y1 = Constants.COORDINATE_NULL, X2 = Constants.COORDINATE_NULL, Y2 = Constants.COORDINATE_NULL; //Ход с (Х1, Y1) на (X2, Y2) int me = Constants.ID_PLAYER1; //ID этого агента int enemy = Constants.ID_PLAYER2; //ID врага if (server.FirstConnection_ChangeMyId().Item1 == true) //Подключение сервера { me = Constants.ID_PLAYER2; enemy = Constants.ID_PLAYER1; } Console.WriteLine(me.ToString()); int t = 0; while (true) { Console.WriteLine(t++.ToString()); data = server.GetStatus(); //Получение текущего статуса board = GameBehavior.ParseStatus(data); //Парсинг Console.WriteLine("Get data"); /* for (int i = 0; i <= 1; ++i) * { * for (int j = 0; j <= 12; ++j) * { * board[i,j] = 5; * board[j, i] = 5; * } * } * * for (int i = 11; i <= 12; ++i) * { * for (int j = 0; j <= 12; ++j) * { * board[i, j] = 5; * board[j, i] = 5; * } * }*/ if (GameBehavior.IsMeCurPlayer(data, me) == false) //Не мой ход { continue; } //Вычисления X1, Y1, X2, Y2. Может, функция другого класса? //КОДИТЬ ЗДЕСЬ //КОДИТЬ ЗДЕСЬ Random rnd = new Random(); stones.Clear(); movements.Clear(); find_stones(board, stones); //заполнили камушки в первой итерации (реальные камни) foreach (stone st in stones) //побежали по камушкам { //Console.WriteLine("values"); if (st.owner == me) //по нашим { for (int i = Math.Max(2, st.x - 2); i <= Math.Min(10, st.x + 2); ++i) //вот это надо уточнить, все ли возможные ходы я проверяю { for (int j = Math.Max(2, st.y - 2); j <= Math.Min(10, st.y + 2); ++j) { //проверь проверку, она выше int newmove = SmartCheckMovePossible(st.x, st.y, i, j, st.owner, board); if ((newmove == 1) || (newmove == 2)) { move_val a = new move_val(); a.x1 = st.x; a.y1 = st.y; a.x2 = i; a.y2 = j; a.atk = 0; int[,] atc_board = board; atc_board = DoSmartMove(st.owner, st.x, st.y, i, j, atc_board, ref a.atk); int max_enemy_profit = 0; ArrayList atc_stones = new ArrayList(); //список камней предпологаемого хода find_stones(atc_board, atc_stones); //а вот тут побежали по вражеским камушкам foreach (stone st1 in atc_stones) { if (st1.owner == enemy) { for (int k = Math.Max(2, st1.x - 2); k <= Math.Min(10, st1.x + 2); ++k)//Никитос посмотри то же что и наверху { for (int l = Math.Max(2, st1.y - 2); l <= Math.Min(10, st1.y + 2); ++l) { int newenemymove = SmartCheckMovePossible(st1.x, st1.y, k, l, st1.owner, board); if ((newenemymove == 1) || (newenemymove == 2)) { int[,] def_board = atc_board; int local_profit = 0; DoSmartMove(st1.owner, st1.x, st1.y, k, l, def_board, ref local_profit); Console.WriteLine(local_profit); if (local_profit > max_enemy_profit) { max_enemy_profit = local_profit; } } } } } } a.def = max_enemy_profit; movements.Add(a); } } } } } //теперь находим в списке самый выгодный ход move_val winners_move = new move_val(); foreach (move_val move in movements)//побежали по камушкам { winners_move.atk = -50; winners_move.def = 50; if ((move.atk - move.def) > (winners_move.atk - winners_move.def)) { winners_move.x1 = move.x1; winners_move.y1 = move.y1; winners_move.x2 = move.x2; winners_move.y2 = move.y2; winners_move.atk = move.atk; winners_move.def = move.def; } else if ((move.atk - move.def) == (winners_move.atk - winners_move.def)) { //немного непредсказуемости int chance = rnd.Next(0, 5); if (chance == 1) { winners_move.x1 = move.x1; winners_move.y1 = move.y1; winners_move.x2 = move.x2; winners_move.y2 = move.y2; winners_move.atk = move.atk; winners_move.def = move.def; } } } //Вывод хода из программы X1 = winners_move.x1; Y1 = winners_move.y1; X2 = winners_move.x2; Y2 = winners_move.y2; //КОДИТЬ ЗДЕСЬ //КОДИТЬ ЗДЕСЬ Console.WriteLine(X1.ToString() + " " + Y1.ToString() + " " + X2.ToString() + " " + Y2.ToString()); data = GameBehavior.ConvertMoveToByte(X1, Y1, X2, Y2); //Перевод хода в массив байтов server.SendMove(data); //Отправка на сервер Console.WriteLine("Send data"); } }