Advertisement
lartman

WPF_TicTacToe

Jan 30th, 2021 (edited)
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.31 KB | None | 0 0
  1. using System;
  2. using System.Windows;
  3. using System.Windows.Controls;
  4. using System.IO;
  5.  
  6. namespace cross
  7. {
  8.     /// <summary>
  9.     /// Логика взаимодействия для MainWindow.xaml
  10.     /// </summary>
  11.     public partial class MainWindow : Window
  12.     {  
  13.    
  14.         string status = "player_1";  
  15.         char sym = 'X'; //Крестик
  16.         string playername_1 = "Player 1"
  17.         string playername_2 = "Player 2"
  18.          
  19.         string mode = "";
  20.         if(System.IO.File.Exists("config.txt")){
  21.         static string[] config = File.ReadAllLines("config.txt"); // Файл конфигурации
  22.         string playername_1 = config[0];
  23.         string playername_2 = config[1];
  24.         string mode = config[2];
  25.         }
  26.  
  27.         char[,] table = new char[,] { { ' ', ' ', ' ' }, { ' ', ' ', ' ' }, { ' ', ' ', ' ' } }; //Двумерный массив для хранения крестиков и ноликов
  28.        
  29.         public MainWindow()
  30.         {
  31.             InitializeComponent();
  32.             CheckStatus();            
  33.         }
  34.             private void Button_Click(object sender, RoutedEventArgs e) //ход
  35.         {          
  36.             CheckStatus();
  37.             checkPlayer();
  38.            
  39.             int index_1 = (int)Char.GetNumericValue((sender as Button).Name[6]);
  40.                 int index_2 = (int)Char.GetNumericValue((sender as Button).Name[4]);
  41.             if (table[index_2, index_1] == ' '){
  42.                 table[index_2, index_1] = sym;
  43.                 (sender as Button).Content = sym.ToString();
  44.             }
  45.             if (mode == "bot") //Режим игры с ботом
  46.             {
  47.                 switchPlayer();
  48.                 checkPlayer();
  49.                 CheckStatus();
  50.                 winCheck(sym);
  51.                 bool flag = true;
  52.                 while (flag) //Псевдо ИИ бота)) (генерация рандомных координат хода)
  53.                 {
  54.                     index_2 = new Random().Next(0, 2);
  55.                     index_1 = new Random().Next(0, 2);
  56.                     if(table[index_2, index_1] == ' ')                  
  57.                         flag = false;
  58.                 }
  59.                 table[index_2, index_1] = sym;
  60.                 CompatNames($"{index_2.ToString()}_{index_1.ToString()}");
  61.                 winCheck(sym);
  62.             }
  63.             winCheck(sym);
  64.             switchPlayer();
  65.             checkPlayer();
  66.             CheckStatus();          
  67.         }
  68.             public void switchPlayer() //Следующий ход
  69.             {
  70.                 switch (status)
  71.                 {
  72.                     case "player_1":
  73.                         status = "player_2";
  74.                         break;
  75.                     case "player_2":
  76.                         status = "player_1";
  77.                         break;
  78.                 }
  79.             }
  80.             public void checkPlayer() //Установка знаков в взависимости от игрока
  81.             {
  82.                 switch (status)
  83.                 {
  84.                     case "player_1":
  85.                         sym = 'X';
  86.                         break;
  87.                     case "player_2":
  88.                         sym = 'O';
  89.                         break;
  90.                 }
  91.             }
  92.         public void winCheck(char s) //Проверка ходов
  93.         {
  94.             int count = 0;
  95.             char player_sym = s;
  96.             string player_name = " ";
  97.             int count_2 = 0;
  98.             switch (s)
  99.             {
  100.                 case 'X':
  101.                     player_name = "player_1";
  102.                     break;
  103.                 case 'O':
  104.                     player_name = "player_2";
  105.                     break;
  106.             }
  107.             for (int j = 0; j < 3; j++) //Горизонтальная проверка
  108.             {
  109.                 for (int i = 0; i < 3; i++)
  110.                 {
  111.                     if (table[j, i] == player_sym){
  112.                         count += 1;
  113.                     }
  114.                 }
  115.                 if (count == 3){
  116.                     MessageBox.Show(player_name + " выиграл! #цикл гориз. - '-'");
  117.                     this.Close();
  118.                 }
  119.                 count = 0;
  120.             } //Крестовые проверки
  121.             for (int j = 0; j < 3; j++)
  122.             {                
  123.                     if (table[j, count_2] == player_sym){
  124.                         count += 1;
  125.                     }
  126.                 count_2 += 1;
  127.             }
  128.                 if (count == 3){
  129.                 MessageBox.Show(player_name + " выиграл! #цикл накрест - '\\'");
  130.                 this.Close();
  131.             }
  132.             count = 0;
  133.             count_2 = 0;
  134.            
  135.             for (int j = 2; j > -1; j--)
  136.             {
  137.                 if (table[j, count_2] == player_sym){
  138.                     count += 1;
  139.                 }
  140.                 count_2 += 1;
  141.             }
  142.             if (count == 3){
  143.                 MessageBox.Show(player_name + " выиграл! #цикл накрест - '/'");
  144.                 this.Close();
  145.             }
  146.             count = 0;
  147.             count_2 = 0;
  148.  
  149.             for (int i = 0; i < 3; i++) //Вертикальная проверка
  150.             {
  151.                 for (int j = 0; j < 3; j++)
  152.                 {
  153.                     if (table[j, count_2] == player_sym){
  154.                         count += 1;
  155.                     }
  156.                 }
  157.                 count_2 += 1;
  158.  
  159.                 if (count == 3){
  160.                     MessageBox.Show(player_name + " выиграл! #цикл верт. - '|'");
  161.                     this.Close();
  162.                 }
  163.                 count = 0;
  164.             }
  165.             count_2 = 0;
  166.         }
  167.         public void CheckStatus() {
  168.             switch (status)
  169.             {
  170.                 case "player_1":
  171.                     status_bar.Content = "Идёт " + playername_1;
  172.                     break;
  173.                 case "player_2":
  174.                     status_bar.Content = "Идёт " + playername_2;
  175.                     break;
  176.             }
  177.         }      
  178.         public void CompatNames(string numbers)
  179.         {
  180.             switch (numbers)
  181.             {
  182.                 case "0_0":
  183.                     btn_0_0.Content = sym.ToString();
  184.                     break;
  185.                 case "0_1":
  186.                     btn_0_1.Content = sym.ToString();
  187.                     break;
  188.                 case "0_2":
  189.                     btn_0_2.Content = sym.ToString();
  190.                     break;
  191.                 case "1_0":
  192.                     btn_1_0.Content = sym.ToString();
  193.                     break;
  194.                 case "1_1":
  195.                     btn_1_1.Content = sym.ToString();
  196.                     break;
  197.                 case "1_2":
  198.                     btn_1_2.Content = sym.ToString();
  199.                     break;
  200.                 case "2_0":
  201.                     btn_2_0.Content = sym.ToString();
  202.                     break;
  203.                 case "2_1":
  204.                     btn_2_1.Content = sym.ToString();
  205.                     break;
  206.                 case "2_2":
  207.                     btn_2_2.Content = sym.ToString();
  208.                     break;
  209.             }
  210.         }
  211.         }  
  212.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement