Загрузка данных


using System;
using Avalonia.Controls;
using Avalonia.Interactivity;
using Avalonia.Media;

namespace MorskoyBoy
{
    public partial class MainWindow : Window
    {
        // 0 = тут пусто и мокро
        // 1 = тут сидит кораблик
        // 2 = мазила (пустое место с дыркой)
        // 3 = попал нафиг (горит)
        int[,] pole_patsana_odin = new int[10, 10];
        int[,] pole_patsana_dva = new int[10, 10];

        // Кнопки лежат тут чтобы тыкать в них
        Button[,] knopki_pervogo = new Button[10, 10];
        Button[,] knopki_vtorogo = new Button[10, 10];

        bool igraem_s_tupym_botom = true;
        int kto_shas_babaet = 1; // 1 это первый пацан, 2 это второй
        bool igra_vsyo_konchilas = false;

        int schetchik_pervogo = 0;
        int schetchik_vtorogo = 0;
        bool rezhim_yadernogo_udara = false;

        Random shaitan_mashina = new Random();

        public MainWindow()
        {
            InitializeComponent();
            nakolotit_knopok();
        }

        // --- ВХОД В ХАТУ ---

        private void knopka_vhod_k_zhelezyake(object? sender, RoutedEventArgs e)
        {
            igraem_s_tupym_botom = true;
            NadzorZaVtorym.Text = "ЗАГОН ЖЕЛЕЗЯКИ";
            vhod();
        }

        private void knopka_vhod_s_kentom(object? sender, RoutedEventArgs e)
        {
            igraem_s_tupym_botom = false;
            NadzorZaVtorym.Text = "ЗАГОН ВТОРОГО ПАЦАНА";
            vhod();
        }

        private void vhod()
        {
            PalkaMenu.IsVisible = false;
            BolshayaPolyana.IsVisible = true;
            davay_po_novoy();
        }

        private void nazad_nafig(object? sender, RoutedEventArgs e)
        {
            BolshayaPolyana.IsVisible = false;
            PalkaMenu.IsVisible = true;
        }

        private void perezapustit_etu_dich(object? sender, RoutedEventArgs e)
        {
            davay_po_novoy();
        }

        // --- СОЗДАНИЕ КНОПОК РУКАМИ ---

        private void nakolotit_knopok()
        {
            // Лепим 100 кнопок первому пацану
            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    int ryad = r;
                    int kolonna = c;

                    Button knopochka = new Button();
                    knopochka.Margin = new Avalonia.Thickness(1);
                    knopochka.HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Stretch;
                    knopochka.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Stretch;
                    knopochka.Click += (s, e) => tyk_po_pervomu_polu(ryad, kolonna);

                    knopki_pervogo[r, c] = knopochka;
                    Zagon1.Children.Add(knopochka);
                }
            }

            // Лепим 100 кнопок второму пацану
            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    int ryad = r;
                    int kolonna = c;

                    Button knopochka = new Button();
                    knopochka.Margin = new Avalonia.Thickness(1);
                    knopochka.HorizontalAlignment = Avalonia.Layout.HorizontalAlignment.Stretch;
                    knopochka.VerticalAlignment = Avalonia.Layout.VerticalAlignment.Stretch;
                    knopochka.Click += (s, e) => tyk_po_vtoromu_polu(ryad, kolonna);

                    knopki_vtorogo[r, c] = knopochka;
                    Zagon2.Children.Add(knopochka);
                }
            }
        }

        // --- ТУПОЙ РЕСЕТ И ТУПАЯ РАССТАНОВКА ---

        private void davay_po_novoy()
        {
            kto_shas_babaet = 1;
            schetchik_pervogo = 0;
            schetchik_vtorogo = 0;
            rezhim_yadernogo_udara = false;
            igra_vsyo_konchilas = false;

            ochistit_pole(pole_patsana_odin);
            ochistit_pole(pole_patsana_dva);

            // Швыряем корабли тупым способом: просто забиваем клетки!
            zasunut_korabli_v_tupuyu(pole_patsana_odin);
            zasunut_korabli_v_tupuyu(pole_patsana_dva);

            pokrasit_vsyo_nafig();
        }

        private void ochistit_pole(int[,] pole)
        {
            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    pole[r, c] = 0;
                }
            }
        }

        // Метод дуболома: тыкаем корабли по фиксированным шаблонам со сдвигом
        private void zasunut_korabli_v_tupuyu(int[,] pole)
        {
            int sdvig = shaitan_mashina.Next(0, 3);

            // Четырехпалубный (длинная палка)
            pole[0, 0 + sdvig] = 1;
            pole[0, 1 + sdvig] = 1;
            pole[0, 2 + sdvig] = 1;
            pole[0, 3 + sdvig] = 1;

            // Трехпалубный номер 1
            pole[2, 0 + sdvig] = 1;
            pole[2, 1 + sdvig] = 1;
            pole[2, 2 + sdvig] = 1;

            // Трехпалубный номер 2
            pole[4, 0 + sdvig] = 1;
            pole[4, 1 + sdvig] = 1;
            pole[4, 2 + sdvig] = 1;

            // Двухпалубный номер 1
            pole[6, 0 + sdvig] = 1;
            pole[6, 1 + sdvig] = 1;

            // Двухпалубный номер 2
            pole[6, 5 + sdvig] = 1;
            pole[6, 6 + sdvig] = 1;

            // Однопалубные шмакодявки
            pole[8, 0] = 1;
            pole[8, 3] = 1;
            pole[8, 6] = 1;
            pole[9, 8] = 1;
        }

        // --- СТРЕЛЬБА ДЛЯ ТУПЫХ ---

        private void nazhata_knopka_babaha(object? sender, RoutedEventArgs e)
        {
            int zaryad = (kto_shas_babaet == 1) ? schetchik_pervogo : schetchik_vtorogo;
            if (zaryad >= 5)
            {
                rezhim_yadernogo_udara = !rezhim_yadernogo_udara;
                pokrasit_vsyo_nafig();
            }
        }

        private void tyk_po_pervomu_polu(int r, int c)
        {
            // Сюда имеет право бить только второй пацан
            if (igra_vsyo_konchilas) return;
            if (kto_shas_babaet != 2) return;
            if (igraem_s_tupym_botom) return; // Человек не может стрелять за бота

            strelyat_po_faktu(pole_patsana_odin, r, c);
        }

        private void tyk_po_vtoromu_polu(int r, int c)
        {
            // Сюда имеет право бить только первый пацан
            if (igra_vsyo_konchilas) return;
            if (kto_shas_babaet != 1) return;

            strelyat_po_faktu(pole_patsana_dva, r, c);
        }

        private void strelyat_po_faktu(int[,] chuzhoe_pole, int r, int c)
        {
            // Если уже туда стреляли обычным пуком — игнорим
            if (!rezhim_yadernogo_udara && (chuzhoe_pole[r, c] == 2 || chuzhoe_pole[r, c] == 3))
            {
                return;
            }

            if (rezhim_yadernogo_udara)
            {
                // Самый тупой в мире бабах 3x3: просто 9 строк подряд в лоб!
                udarit_odnu_kletku(chuzhoe_pole, r - 1, c - 1);
                udarit_odnu_kletku(chuzhoe_pole, r - 1, c);
                udarit_odnu_kletku(chuzhoe_pole, r - 1, c + 1);

                udarit_odnu_kletku(chuzhoe_pole, r, c - 1);
                udarit_odnu_kletku(chuzhoe_pole, r, c);
                udarit_odnu_kletku(chuzhoe_pole, r, c + 1);

                udarit_odnu_kletku(chuzhoe_pole, r + 1, c - 1);
                udarit_odnu_kletku(chuzhoe_pole, r + 1, c);
                udarit_odnu_kletku(chuzhoe_pole, r + 1, c + 1);

                if (kto_shas_babaet == 1) schetchik_pervogo = 0;
                if (kto_shas_babaet == 2) schetchik_vtorogo = 0;
                rezhim_yadernogo_udara = false;
            }
            else
            {
                // Обычный одиночный тык
                udarit_odnu_kletku(chuzhoe_pole, r, c);

                if (kto_shas_babaet == 1 && schetchik_pervogo < 5) schetchik_pervogo++;
                if (kto_shas_babaet == 2 && schetchik_vtorogo < 5) schetchik_vtorogo++;
            }

            if (proverka_mordoboya()) return;

            // Передача очереди бить
            if (kto_shas_babaet == 1)
            {
                kto_shas_babaet = 2;
            }
            else
            {
                kto_shas_babaet = 1;
            }

            // Если ход бота — бот бьёт тупо и сразу
            if (igraem_s_tupym_botom && kto_shas_babaet == 2)
            {
                tupoy_hod_bota();
                if (proverka_mordoboya()) return;
                kto_shas_babaet = 1;
            }

            pokrasit_vsyo_nafig();
        }

        private void udarit_odnu_kletku(int[,] pole, int r, int c)
        {
            // Проверка чтоб за экран не улетело
            if (r < 0 || r > 9 || c < 0 || c > 9)
            {
                return;
            }

            if (pole[r, c] == 0)
            {
                pole[r, c] = 2; // Вода -> Бульк!
            }
            if (pole[r, c] == 1)
            {
                pole[r, c] = 3; // Лодка -> Бабах!
            }
        }

        private void tupoy_hod_bota()
        {
            // Если бот накопил ядерку — херачит 3x3 наугад
            if (schetchik_vtorogo >= 5)
            {
                int sluchayny_r = shaitan_mashina.Next(1, 9);
                int sluchayny_c = shaitan_mashina.Next(1, 9);

                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r - 1, sluchayny_c - 1);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r - 1, sluchayny_c);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r - 1, sluchayny_c + 1);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r, sluchayny_c - 1);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r, sluchayny_c);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r, sluchayny_c + 1);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r + 1, sluchayny_c - 1);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r + 1, sluchayny_c);
                udarit_odnu_kletku(pole_patsana_odin, sluchayny_r + 1, sluchayny_c + 1);

                schetchik_vtorogo = 0;
                return;
            }

            // Если ядерки нет — долбит вслепую в цикле пока не попадет в живую клетку
            while (true)
            {
                int r = shaitan_mashina.Next(0, 10);
                int c = shaitan_mashina.Next(0, 10);

                if (pole_patsana_odin[r, c] == 0 || pole_patsana_odin[r, c] == 1)
                {
                    udarit_odnu_kletku(pole_patsana_odin, r, c);
                    if (schetchik_vtorogo < 5) schetchik_vtorogo++;
                    break;
                }
            }
        }

        // --- ПРОВЕРКА КТО КОГО УШАТАЛ ---

        private bool proverka_mordoboya()
        {
            int zhivyh_u_pervogo = 0;
            int zhivyh_u_vtorogo = 0;

            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    if (pole_patsana_odin[r, c] == 1) zhivyh_u_pervogo++;
                    if (pole_patsana_dva[r, c] == 1) zhivyh_u_vtorogo++;
                }
            }

            if (zhivyh_u_vtorogo == 0)
            {
                igra_vsyo_konchilas = true;
                pokrasit_vsyo_nafig();
                OrisheSverhu.Text = "ПЕРВЫЙ ПАЦАН ВСЕХ РАЗВАЛИЛ!";
                return true;
            }

            if (zhivyh_u_pervogo == 0)
            {
                igra_vsyo_konchilas = true;
                pokrasit_vsyo_nafig();
                if (igraem_s_tupym_botom)
                {
                    OrisheSverhu.Text = "ЖЕЛЕЗЯКА ОКАЗАЛАСЬ СИЛЬНЕЕ!";
                }
                else
                {
                    OrisheSverhu.Text = "ВТОРОЙ ПАЦАН ВСЕХ РАЗВАЛИЛ!";
                }
                return true;
            }

            return false;
        }

        // --- ТУПАЯ ПОКРАСКА ВСЕХ КНОПОК ---

        private void pokrasit_vsyo_nafig()
        {
            // Красим поле 1
            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    int shtuka = pole_patsana_odin[r, c];
                    Button knopka = knopki_pervogo[r, c];

                    if (shtuka == 0)
                    {
                        knopka.Background = Brushes.Navy;
                        knopka.Content = "";
                    }
                    if (shtuka == 1)
                    {
                        // Свои корабли показываем если играем с ботом
                        if (igraem_s_tupym_botom || igra_vsyo_konchilas)
                        {
                            knopka.Background = Brushes.Green;
                            knopka.Content = "Ш";
                        }
                        else
                        {
                            knopka.Background = Brushes.Navy;
                            knopka.Content = "";
                        }
                    }
                    if (shtuka == 2)
                    {
                        knopka.Background = Brushes.Gray;
                        knopka.Content = "•";
                    }
                    if (shtuka == 3)
                    {
                        knopka.Background = Brushes.Red;
                        knopka.Content = "X";
                    }
                }
            }

            // Красим поле 2
            for (int r = 0; r < 10; r++)
            {
                for (int c = 0; c < 10; c++)
                {
                    int shtuka = pole_patsana_dva[r, c];
                    Button knopka = knopki_vtorogo[r, c];

                    if (shtuka == 0)
                    {
                        knopka.Background = Brushes.Navy;
                        knopka.Content = "";
                    }
                    if (shtuka == 1)
                    {
                        if (igra_vsyo_konchilas)
                        {
                            knopka.Background = Brushes.Green;
                            knopka.Content = "Ш";
                        }
                        else
                        {
                            knopka.Background = Brushes.Navy;
                            knopka.Content = "";
                        }
                    }
                    if (shtuka == 2)
                    {
                        knopka.Background = Brushes.Gray;
                        knopka.Content = "•";
                    }
                    if (shtuka == 3)
                    {
                        knopka.Background = Brushes.Red;
                        knopka.Content = "X";
                    }
                }
            }

            if (igra_vsyo_konchilas)
            {
                KnopkaMegaPuk.IsEnabled = false;
                return;
            }

            // Обновляем буковы сверху
            if (kto_shas_babaet == 1)
            {
                OrisheSverhu.Text = "ХОДИТ ПЕРВЫЙ ПАЦАН (лупи вправо)";
            }
            else
            {
                OrisheSverhu.Text = "ХОДИТ ВТОРОЙ ПАЦАН (лупи влево)";
            }

            // Обновляем супер бабах
            int tekushiy_zaryad = (kto_shas_babaet == 1) ? schetchik_pervogo : schetchik_vtorogo;

            if (tekushiy_zaryad >= 5)
            {
                KnopkaMegaPuk.IsEnabled = true;
                if (rezhim_yadernogo_udara)
                {
                    KnopkaMegaPuk.Background = Brushes.Orange;
                    KnopkaMegaPuk.Content = "ЖМИ НА КЛЕТКУ И БУДЕТ ВЗРЫВ 3x3!";
                }
                else
                {
                    KnopkaMegaPuk.Background = Brushes.Red;
                    KnopkaMegaPuk.Content = "БАБАХ ГОТОВ! НАЖМИ МЕНЯ (5/5)";
                }
            }
            else
            {
                KnopkaMegaPuk.IsEnabled = false;
                KnopkaMegaPuk.Background = Brushes.DarkRed;
                KnopkaMegaPuk.Content = "СУПЕР-БАБАХ КОПИТСЯ: " + tekushiy_zaryad + "/5";
            }
        }
    }
}