Advertisement
melnikovmaxim

BKV_tic_tac_toe

Dec 16th, 2019
413
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.92 KB | None | 0 0
  1. //link https://yadi.sk/d/xZkdriK5gUHufw
  2. #include <FL/Fl.H>
  3. #include <FL/Fl_Window.H>
  4. #include <FL/Fl_Button.H>
  5. #include <FL/Fl_Input.H>
  6. #include <FL/Fl_Output.H>
  7. #include <FL/fl_draw.H>
  8. #include <FL/Fl_File_Chooser.H>
  9. #include <iostream>
  10. #include <string>
  11.  
  12. Fl_Input* inp;
  13. Fl_Button* but[9][9];
  14. Fl_Button* first;
  15. Fl_Window* window2;
  16. Fl_Window* window;
  17. bool b = false;
  18. int K = 0;
  19. int q, w;
  20. int k1 = 1;
  21. const char player1[32] = "Победил игрок 1 (X)";
  22. const char player2[32] = "Победил игрок 2 (O)";
  23. std::string c;
  24. int p;
  25.  
  26. void recolor(int i, int j, std::string c, int p) {
  27.  
  28.     but[i][j]->color(FL_RED);
  29.     but[i][j]->redraw();
  30.     if (p == 1) {
  31.         k1 = 1;
  32.         while ((but[i + k1][j]->label()) == c) {
  33.  
  34.             but[i + k1][j]->color(FL_RED);
  35.             but[i + k1][j]->redraw();
  36.  
  37.             k1++;
  38.             if (i + k1 > K - 1)
  39.                 break;
  40.         }
  41.         k1 = 1;
  42.         while ((but[i - k1][j]->label()) == c) {
  43.  
  44.             but[i - k1][j]->color(FL_RED);
  45.             but[i - k1][j]->redraw();
  46.             k1++;
  47.             if (i - k1 < 0)
  48.                 break;
  49.         }
  50.     }
  51.     else if (p == 2)
  52.     {
  53.         k1 = 1;
  54.         while ((but[i][j + k1]->label()) == c) {
  55.  
  56.             but[i][j + k1]->color(FL_RED);
  57.             but[i][j + k1]->redraw();
  58.  
  59.             k1++;
  60.             if (j + k1 > K - 1)
  61.                 break;
  62.         }
  63.         k1 = 1;
  64.         while ((but[i][j - k1]->label()) == c) {
  65.  
  66.             but[i][j - k1]->color(FL_RED);
  67.             but[i][j - k1]->redraw();
  68.             k1++;
  69.             if (j - k1 < 0)
  70.                 break;
  71.         }
  72.     }
  73.     else if (p == 3)
  74.     {
  75.         k1 = 1;
  76.         while ((but[i + k1][j + k1]->label()) == c) {
  77.  
  78.             but[i + k1][j + k1]->color(FL_RED);
  79.             but[i + k1][j + k1]->redraw();
  80.  
  81.             k1++;
  82.             if (i + k1 > K - 1)
  83.                 break;
  84.             if (j + k1 > K - 1)
  85.                 break;
  86.         }
  87.         k1 = 1;
  88.         while ((but[i - k1][j - k1]->label()) == c) {
  89.  
  90.             but[i - k1][j - k1]->color(FL_RED);
  91.             but[i - k1][j - k1]->redraw();
  92.             k1++;
  93.             if (i - k1 < 0)
  94.                 break;
  95.             if (j - k1 < 0)
  96.                 break;
  97.         }
  98.     }
  99.     else if (p == 4)
  100.     {
  101.         k1 = 1;
  102.         while ((but[i + k1][j - k1]->label()) == c) {
  103.  
  104.             but[i + k1][j - k1]->color(FL_RED);
  105.             but[i + k1][j - k1]->redraw();
  106.  
  107.             k1++;
  108.             if (i + k1 > K - 1)
  109.                 break;
  110.             if (j - k1 < 0)
  111.                 break;
  112.         }
  113.         k1 = 1;
  114.         while ((but[i - k1][j + k1]->label()) == c) {
  115.  
  116.             but[i - k1][j + k1]->color(FL_RED);
  117.             but[i - k1][j + k1]->redraw();
  118.             k1++;
  119.             if (i - k1 < 0)
  120.                 break;
  121.             if (j + k1 > K - 1)
  122.                 break;
  123.         }
  124.     }
  125.     if (c == "X")
  126.         fl_alert(player1);
  127.     else
  128.         fl_alert(player2);
  129.     window2->hide();
  130.     exit(0);
  131. }
  132.  
  133. void
  134. button_callback(Fl_Widget* o, void*)
  135. {
  136.     Fl_Button* button = (Fl_Button*)o;
  137.     if (b == false && button->label() == "") {
  138.         button->label("X");
  139.         b = true;
  140.     }
  141.     else if (b == true && button->label() == "")
  142.     {
  143.         button->label("O");
  144.         b = false;
  145.     }
  146.     for (int i = 0; i < K; i++) {
  147.         for (int j = 0; j < K; j++) {
  148.             if ((i > 0) && (i < K - 1) && ((but[i][j]->label()) == (but[i + 1][j]->label())) && ((but[i][j]->label()) == (but[i - 1][j]->label())) && (but[i][j]->label() != "")) {
  149.                 p = 1;
  150.                 if (but[i][j]->label() == "X")
  151.                     recolor(i, j, "X", p);
  152.                 else
  153.                     recolor(i, j, "O", p);
  154.             }
  155.             if ((j > 0) && (j < K - 1) && ((but[i][j]->label()) == (but[i][j + 1]->label())) && ((but[i][j]->label()) == (but[i][j - 1]->label())) && (but[i][j]->label() != "")) {
  156.                 p = 2;
  157.                 if (but[i][j]->label() == "X")
  158.                     recolor(i, j, "X", p);
  159.                 else
  160.                     recolor(i, j, "O", p);
  161.             }
  162.             if ((j > 0) && (j < K - 1) && (i > 0) && (i < K - 1) && ((but[i][j]->label()) == (but[i + 1][j + 1]->label())) && ((but[i][j]->label()) == (but[i - 1][j - 1]->label())) && (but[i][j]->label() != "")) {
  163.                 p = 3;
  164.                 if (but[i][j]->label() == "X")
  165.                     recolor(i, j, "X", p);
  166.                 else
  167.                     recolor(i, j, "O", p);
  168.             }
  169.             if ((j > 0) && (j < K - 1) && (i > 0) && (i < K - 1) && ((but[i][j]->label()) == (but[i + 1][j - 1]->label())) && ((but[i][j]->label()) == (but[i - 1][j + 1]->label())) && (but[i][j]->label() != "")) {
  170.                 p = 4;
  171.                 if (but[i][j]->label() == "X")
  172.                     recolor(i, j, "X", p);
  173.                 else
  174.                     recolor(i, j, "O", p);
  175.             }
  176.  
  177.         }
  178.     }
  179.  
  180. }
  181. void
  182. button_callback2(Fl_Widget* o, void*)
  183. {
  184.     K = atoi(inp->value());
  185.     if (K > 2 && K < 10) {
  186.  
  187.         window2 = new Fl_Window(50 * K + 100, 50 * K + 100, "Игра 'Крестики-нолики'");
  188.         window2->color(FL_GRAY);
  189.         window->hide();
  190.         window2->begin();
  191.         int n = 0;
  192.         int nn = 0;
  193.         for (int i = 0; i < K; i++) {
  194.             nn = 0;
  195.             n = n + 50;
  196.             for (int j = 0; j < K; j++) {
  197.                 nn = nn + 50;
  198.                 but[i][j] = new Fl_Button(nn, n, 50, 50, "");
  199.                 but[i][j]->labelsize(36);
  200.                 but[i][j]->color(FL_WHITE);
  201.  
  202.             }
  203.  
  204.         }
  205.         window2->end();
  206.         window2->show();
  207.         for (int v = 0; v < K; v++) {
  208.             for (int m = 0; m < K; m++) {
  209.                 but[v][m]->callback(button_callback);
  210.             }
  211.         }
  212.     }
  213. }
  214.  
  215. int
  216. main()
  217. {
  218.     window = new Fl_Window(300, 100, "Игра 'Крестики-нолики'");
  219.     window->begin();
  220.     first = new Fl_Button(100, 55, 100, 40, "N");
  221.     inp = new Fl_Input(50, 5, 200, 40);
  222.     window->end();
  223.     first->callback(button_callback2);
  224.     window->show();
  225.     return Fl::run();
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement