Как написать крестики нолики по сети на C#?

Как написать крестики нолики по сети на C#? Нужно использовать WinForms и Broadcast. Чтоб на одном ПК можно было запустить два экземпляра программы и играть. Не совсем понимаю концепцию.


Ответы (2 шт):

Автор решения: Pavel Popov

Примерно такой алгоритм я вижу(это основные моменты) Вам нужно будет придумать свой протокол общения, я привожу и чисто для примера самый простой.

  1. Запускаем два приложения клиент А и Б
  2. Каждое приложения при запуске генерируют себе уникальное ИД и отправляют в сеть сообщение "Привет я готов играть" + свой уникальный ИД (сообщения должны повторяться с какой то периодичностью, что бы новые запустившиеся игроки то же вас видели в сети)
  3. Каждое запущенное приложение получает такое сообщение и выводит в список потенцильных партнеров для игры
  4. Человек с приложением А выбирает из списка партрера Б и жмет "Играть"
  5. В сеть отправляется сообщение приглашения "Привет я готов" + Ид партнера + свое ИД
  6. Опять же все получают это сообщение, но только тот чье ИД указано в приглашении откликается сообщением "Играем"+ Ид партнера + свое ИД (если в данный момент партнер Б уже выключился, от него просто не придет ответ и первый клиент А удалит его из списка)
  7. Игра началась, клиент А делает ход и шлет клиенту Б точку куда он поставил(например крест) + Ид партнера + свое ИД (опять же это сообщения видят все НО реагируют на него только партнер по своему ИД в теле сообщения!) И так далее....

Погуглите примеры работы с UDP, как тут

→ Ссылка
Автор решения: azaz zone
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp17
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Начать игру?(да/нет)");
            string otvet = Console.ReadLine();
            while (otvet == "да")
            {
                int oh = 1;
                int[,] b = new int[3, 3];
                Console.WriteLine("Вспомогательная таблица:");
                for (int u = 0; u < 3; u++)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        b[u, i] = oh;
                        Console.Write(b[u, i] + " ");
                        oh++;
                    }
                    Console.WriteLine();
                }
                Console.WriteLine();
                string[,] a = new string[3, 3];
                for (int u = 0; u < 3; u++)
                {
                    for (int i = 0; i < 3; i++)
                    {
                        a[u, i] = ".";
                        Console.Write(a[u, i] + " ");
                    }
                    Console.WriteLine();
                }
                while (otvet == "да")
                {
                    int s = Convert.ToInt32(Console.ReadLine());
                    if (s == 1)
                    {
                        a[0, 0] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 2)
                    {
                        a[0, 1] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 3)
                    {
                        a[0, 2] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 4)
                    {
                        a[1, 0] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 5)
                    {
                        a[1, 1] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 6)
                    {
                        a[1, 2] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 7)
                    {
                        a[2, 0] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 8)
                    {
                        a[2, 1] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if (s == 9)
                    {
                        a[2, 2] = "x";
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if ("x" == a[0, 0] && "x" == a[1, 1] && "x" == a[2, 2] || "x" == a[0, 2] && "x" == a[1, 1] && "x" == a[2, 0] || "x" == a[0, 0] && "x" == a[1, 0] && "x" == a[2, 0] || "x" == a[0, 1] && "x" == a[1, 1] && "x" == a[2, 1] || "x" == a[0, 2] && "x" == a[1, 2] && "x" == a[2, 2] || "x" == a[0, 0] && "x" == a[0, 1] && "x" == a[0, 2] || "x" == a[1, 0] && "x" == a[1, 1] && "x" == a[1, 2] || "x" == a[2, 0] && "x" == a[2, 1] && "x" == a[2, 2])
                    {
                        Console.WriteLine("Крестик выиграл!!");
                        Console.WriteLine("Начать заново?(да/нет)");
                        otvet = Console.ReadLine();
                        oh = 1;
                        Console.WriteLine("Вспомогательная таблица:");
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                b[u, i] = oh;
                                Console.Write(b[u, i] + " ");
                                oh++;
                            }
                            Console.WriteLine();
                        }
                        Console.WriteLine();
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                a[u, i] = ".";
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                    if ("." != a[0, 0] && "." != a[0, 1] && "." != a[0, 2] && "." != a[1, 0] && "." != a[1, 1] && "." != a[1, 2] && "." != a[2, 0] && "." != a[2, 1] && "." != a[2, 2])
                    {
                        Console.WriteLine("Ничья!!!");
                        Console.WriteLine("Начать заново?(да/нет)");
                        otvet = Console.ReadLine();
                        oh = 1;
                        Console.WriteLine("Вспомогательная таблица:");
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                b[u, i] = oh;
                                Console.Write(b[u, i] + " ");
                                oh++;
                            }
                            Console.WriteLine();
                        }
                        Console.WriteLine();
                        for (int u = 0; u < 3; u++)
                        {
                            for (int i = 0; i < 3; i++)
                            {
                                a[u, i] = ".";
                                Console.Write(a[u, i] + " ");
                            }
                            Console.WriteLine();
                        }
                    }
                        Console.WriteLine();
                        int ss = Convert.ToInt32(Console.ReadLine());
                        if (ss == 1)
                        {
                            a[0, 0] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 2)
                        {
                            a[0, 1] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 3)
                        {
                            a[0, 2] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 4)
                        {
                            a[1, 0] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 5)
                        {
                            a[1, 1] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 6)
                        {
                            a[1, 2] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 7)
                        {
                            a[2, 0] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 8)
                        {
                            a[2, 1] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == 9)
                        {
                            a[2, 2] = "o";
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if ("o" == a[0, 0] && "o" == a[1, 1] && "o" == a[2, 2] || "o" == a[0, 2] && "o" == a[1, 1] && "o" == a[2, 0] || "o" == a[0, 0] && "o" == a[1, 0] && "o" == a[2, 0] || "o" == a[0, 1] && "o" == a[1, 1] && "o" == a[2, 1] || "o" == a[0, 2] && "o" == a[1, 2] && "o" == a[2, 2] || "o" == a[0, 0] && "o" == a[0, 1] && "o" == a[0, 2] || "o" == a[1, 0] && "o" == a[1, 1] && "o" == a[1, 2] || "o" == a[2, 0] && "o" == a[2, 1] && "o" == a[2, 2])
                        {
                            Console.WriteLine("Нолик выиграл!!");
                            Console.WriteLine("Начать заново?(да/нет)");
                            otvet = Console.ReadLine();
                            oh = 1;
                            Console.WriteLine("Вспомогательная таблица:");
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    b[u, i] = oh;
                                    Console.Write(b[u, i] + " ");
                                    oh++;
                                }
                                Console.WriteLine();
                            }
                            Console.WriteLine();
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    a[u, i] = ".";
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if (ss == s)
                        {
                            Console.WriteLine("Вы жульничиете!");
                            Console.WriteLine("Начать заново?(да/нет)");
                            otvet = Console.ReadLine();
                            oh = 1;
                            Console.WriteLine("Вспомогательная таблица:");
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    b[u, i] = oh;
                                    Console.Write(b[u, i] + " ");
                                    oh++;
                                }
                                Console.WriteLine();
                            }
                            Console.WriteLine();
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    a[u, i] = ".";
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                        if ("." != a[0, 0] && "." != a[0, 1] && "." != a[0, 2] && "." != a[1, 0] && "." != a[1, 1] && "." != a[1, 2] && "." != a[2, 0] && "." != a[2, 1] && "." != a[2, 2])
                        {
                            Console.WriteLine("Ничья!!!");
                            Console.WriteLine("Начать заново?(да/нет)");
                            otvet = Console.ReadLine();
                            oh = 1;
                            Console.WriteLine("Вспомогательная таблица:");
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    b[u, i] = oh;
                                    Console.Write(b[u, i] + " ");
                                    oh++;
                                }
                                Console.WriteLine();
                            }
                            Console.WriteLine();
                            for (int u = 0; u < 3; u++)
                            {
                                for (int i = 0; i < 3; i++)
                                {
                                    a[u, i] = ".";
                                    Console.Write(a[u, i] + " ");
                                }
                                Console.WriteLine();
                            }
                        }
                    }
                }
            }
        }
    }
→ Ссылка