Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 11.42 KB | None | 0 0
  1. unit UnitCrossZero;
  2.  
  3. interface
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7.   Dialogs, ExtCtrls, ComCtrls, StdCtrls;
  8.  
  9. type
  10.   TForm1 = class(TForm)
  11.     Panel10: TPanel;
  12.     Panel1: TPanel;
  13.     Panel2: TPanel;
  14.     Panel3: TPanel;
  15.     Panel4: TPanel;
  16.     Panel5: TPanel;
  17.     Panel6: TPanel;
  18.     Panel7: TPanel;
  19.     Panel8: TPanel;
  20.     Panel9: TPanel;
  21.     Panel11: TPanel;
  22.     Panel13: TPanel;
  23.     Panel14: TPanel;
  24.     Player1Label: TLabel;
  25.     Player1Name: TEdit;
  26.     Player2Label: TLabel;
  27.     Player2Name: TEdit;
  28.     Label1: TLabel;
  29.     Label2: TLabel;
  30.     WinnerX: TLabel;
  31.     WinnerO: TLabel;
  32.     Button1: TButton;
  33.     Button2: TButton;
  34.     Panel12: TPanel;
  35.     Button3: TButton;
  36.     Button4: TButton;
  37.     procedure Panel1Click(Sender: TObject);
  38.     procedure Panel2Click(Sender: TObject);
  39.     procedure Panel3Click(Sender: TObject);
  40.     procedure Panel4Click(Sender: TObject);
  41.     procedure Panel5Click(Sender: TObject);
  42.     procedure Panel6Click(Sender: TObject);
  43.     procedure Panel7Click(Sender: TObject);
  44.     procedure Panel8Click(Sender: TObject);
  45.     procedure Panel9Click(Sender: TObject);
  46.     procedure Button1Click(Sender: TObject);
  47.     procedure Button2Click(Sender: TObject);
  48.     procedure Button3Click(Sender: TObject);
  49.     procedure Button4Click(Sender: TObject);
  50.   private
  51.     { Private declarations }
  52.   public
  53.     { Public declarations }
  54.   end;
  55.  
  56. var
  57.   Form1: TForm1;
  58.  
  59.   //Flag для поочередного хода X и O
  60.   //Если Flag=0 тогда вписываем X
  61.   //Если Flag=1 тогда вписываем O
  62.   Flag: Byte;
  63.  
  64. implementation
  65.  
  66. {$R *.dfm}
  67.  
  68. //Процедура очистки поля для игры - Новая игра
  69. procedure Clean;
  70. begin
  71.   Form1.Panel1.BevelInner:=bvNone;          //Меняем стиль панели
  72.   Form1.Panel1.Caption:='';                 //Очищаем заголовок панели
  73.   Form1.Panel2.BevelInner:=bvNone;
  74.   Form1.Panel2.Caption:='';
  75.   Form1.Panel3.BevelInner:=bvNone;
  76.   Form1.Panel3.Caption:='';
  77.   Form1.Panel4.BevelInner:=bvNone;
  78.   Form1.Panel4.Caption:='';
  79.   Form1.Panel5.BevelInner:=bvNone;
  80.   Form1.Panel5.Caption:='';
  81.   Form1.Panel6.BevelInner:=bvNone;
  82.   Form1.Panel6.Caption:='';
  83.   Form1.Panel7.BevelInner:=bvNone;
  84.   Form1.Panel7.Caption:='';
  85.   Form1.Panel8.BevelInner:=bvNone;
  86.   Form1.Panel8.Caption:='';
  87.   Form1.Panel9.BevelInner:=bvNone;
  88.   Form1.Panel9.Caption:='';
  89.   Flag:=0;
  90. end;
  91.  
  92. //Вывод сообщения о победе
  93. procedure OutputWinner(W: String);
  94. begin
  95.   if W = 'X' then begin
  96.     ShowMessage(Form1.Label1.Caption + ' победитель!');                 //Вывод победителя на экран
  97.     Form1.WinnerX.Caption:=IntToStr(StrToInt(Form1.WinnerX.Caption)+1)  //Подсчет количества побед Х
  98.   end
  99.   else begin
  100.     ShowMessage(Form1.Label2.Caption + ' победитель!');                 //Вывод победителя на экран
  101.     Form1.WinnerO.Caption:=IntToStr(StrToInt(Form1.WinnerO.Caption)+1); //Подсчет количества побед O
  102.   end;
  103.   Clean;                                                                // Очистка игрового поля
  104. end;
  105.  
  106. //Процедура проверки на выигрыш;
  107. procedure WinnerXO;
  108. var
  109.   Win: String;
  110. begin
  111.   try //Защита от непредвиденных ошибок
  112.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Первая вертикаль
  113.     if (Form1.Panel1.Caption=Form1.Panel4.Caption) and (Form1.Panel1.Caption=Form1.Panel7.Caption) and (Form1.Panel1.Caption<>'') then begin
  114.       Win:=Form1.Panel1.Caption;
  115.       OutputWinner(Win);
  116.     end;
  117.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Вторая вертикаль
  118.     if (Form1.Panel2.Caption=Form1.Panel5.Caption) and (Form1.Panel2.Caption=Form1.Panel8.Caption) and (Form1.Panel2.Caption<>'') then begin
  119.       Win:=Form1.Panel2.Caption;
  120.       OutputWinner(Win);
  121.     end;
  122.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Третья вертикаль
  123.     if (Form1.Panel3.Caption=Form1.Panel6.Caption) and (Form1.Panel3.Caption=Form1.Panel9.Caption) and (Form1.Panel3.Caption<>'') then begin
  124.       Win:=Form1.Panel9.Caption;
  125.       OutputWinner(Win);
  126.     end;
  127.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Первая горизонталь
  128.     if (Form1.Panel1.Caption=Form1.Panel2.Caption) and (Form1.Panel1.Caption=Form1.Panel3.Caption) and (Form1.Panel1.Caption<>'') then begin
  129.       Win:=Form1.Panel1.Caption;
  130.       OutputWinner(Win);
  131.     end;
  132.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Вторая горизонталь
  133.     if (Form1.Panel4.Caption=Form1.Panel5.Caption) and (Form1.Panel4.Caption=Form1.Panel6.Caption) and (Form1.Panel4.Caption<>'') then begin
  134.       Win:=Form1.Panel4.Caption;
  135.       OutputWinner(Win);
  136.     end;
  137.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Третья горизонталь
  138.     if (Form1.Panel7.Caption=Form1.Panel8.Caption) and (Form1.Panel7.Caption=Form1.Panel9.Caption) and (Form1.Panel7.Caption<>'') then begin
  139.       Win:=Form1.Panel7.Caption;
  140.       OutputWinner(Win);
  141.     end;
  142.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Первая диагональ
  143.     if (Form1.Panel1.Caption=Form1.Panel5.Caption) and (Form1.Panel1.Caption=Form1.Panel9.Caption) and (Form1.Panel1.Caption<>'') then begin
  144.       Win:=Form1.Panel1.Caption;
  145.       OutputWinner(Win);
  146.     end;
  147.     //Проверяем заголовки, если выигрышная комбинация то присваиваем победителя Х или О. Вторая диагональ
  148.     if (Form1.Panel3.Caption=Form1.Panel5.Caption) and (Form1.Panel3.Caption=Form1.Panel7.Caption) and (Form1.Panel3.Caption<>'') then begin
  149.       Win:=Form1.Panel7.Caption;
  150.       OutputWinner(Win);
  151.     end;
  152.      if (Form1.Panel1.Caption<>'') and (Form1.Panel2.Caption<>'') and (Form1.Panel3.Caption<>'') and (Form1.Panel4.Caption<>'') and (Form1.Panel5.Caption<>'') and (Form1.Panel6.Caption<>'') and (Form1.Panel7.Caption<>'') and (Form1.Panel8.Caption<>'') and (Form1.Panel9.Caption<>'') then begin
  153.       ShowMessage ('Ничья! Сыграйте ещё раз!');
  154.       Clean;
  155.      end;
  156.   except;
  157.   end;
  158. end;
  159.  
  160. //Процедура нажатие на панель
  161. procedure TForm1.Panel1Click(Sender: TObject);
  162. begin
  163.   if Panel1.Caption<>'' then exit;      //Проверка на то, что уже поставлено значение
  164.   if Flag=0 then begin
  165.     Panel1.Caption:='X';                //Выводим на панель (ставим) Х
  166.     Flag:=1;                            //Чтобы следующий пошел O
  167.   end
  168.   else begin
  169.     Panel1.Caption:='O';                //Выводим на панель (ставим) O
  170.     Flag:=0;                            //Чтобы следующий пошел X
  171.   end;
  172.    WinnerXO;                            //Проверка на победу
  173. end;
  174.  
  175. procedure TForm1.Panel2Click(Sender: TObject);
  176. begin
  177.   if Panel2.Caption<>'' then exit;
  178.   if Flag=0 then begin
  179.     Panel2.Caption:='X';
  180.     Flag:=1;
  181.   end
  182.   else begin
  183.     Panel2.Caption:='O';
  184.     Flag:=0;
  185.   end;
  186.   WinnerXO;
  187. end;
  188.  
  189. procedure TForm1.Panel3Click(Sender: TObject);
  190. begin
  191.   if Panel3.Caption<>'' then exit;
  192.   if Flag=0 then begin
  193.     Panel3.Caption:='X';
  194.     Flag:=1;
  195.   end
  196.   else begin
  197.     Panel3.Caption:='O';
  198.     Flag:=0;
  199.   end;
  200.   WinnerXO;
  201. end;
  202.  
  203. procedure TForm1.Panel4Click(Sender: TObject);
  204. begin
  205.   if Panel4.Caption<>'' then exit;
  206.   if Flag=0 then begin
  207.     Panel4.Caption:='X';
  208.     Flag:=1;
  209.   end
  210.   else begin
  211.     Panel4.Caption:='O';
  212.     Flag:=0;
  213.   end;
  214.   WinnerXO
  215. end;
  216.  
  217. procedure TForm1.Panel5Click(Sender: TObject);
  218. begin
  219.   if Panel5.Caption<>'' then exit;
  220.   if Flag=0 then begin
  221.     Panel5.Caption:='X';
  222.     Flag:=1;
  223.   end
  224.   else begin
  225.     Panel5.Caption:='O';
  226.     Flag:=0;
  227.   end;
  228.   WinnerXO
  229. end;
  230.  
  231. procedure TForm1.Panel6Click(Sender: TObject);
  232. begin
  233.   if Panel6.Caption<>'' then exit;
  234.   if Flag=0 then begin
  235.     Panel6.Caption:='X';
  236.     Flag:=1;
  237.   end
  238.   else begin
  239.     Panel6.Caption:='O';
  240.     Flag:=0;
  241.   end;
  242.   WinnerXO
  243. end;
  244.  
  245. procedure TForm1.Panel7Click(Sender: TObject);
  246. begin
  247.   if Panel7.Caption<>'' then exit;
  248.   if Flag=0 then begin
  249.     Panel7.Caption:='X';
  250.     Flag:=1;
  251.   end
  252.   else begin
  253.     Panel7.Caption:='O';
  254.     Flag:=0;
  255.   end;
  256.   WinnerXO
  257. end;
  258.  
  259. procedure TForm1.Panel8Click(Sender: TObject);
  260. begin
  261.   if Panel8.Caption<>'' then exit;
  262.   if Flag=0 then begin
  263.     Panel8.Caption:='X';
  264.     Flag:=1;
  265.   end
  266.   else begin
  267.     Panel8.Caption:='O';
  268.     Flag:=0;
  269.   end;
  270.   WinnerXO
  271. end;
  272.  
  273. procedure TForm1.Panel9Click(Sender: TObject);
  274. begin
  275.   if Panel9.Caption<>'' then exit;
  276.   if Flag=0 then begin
  277.     Panel9.Caption:='X';
  278.     Flag:=1;
  279.   end
  280.   else begin
  281.     Panel9.Caption:='O';
  282.     Flag:=0;
  283.   end;
  284.   WinnerXO
  285. end;
  286.  
  287. //Выход из программы
  288. procedure TForm1.Button4Click(Sender: TObject);
  289. begin
  290.   Close;
  291. end;
  292.  
  293. //Очистка поля для новой игры
  294. procedure TForm1.Button3Click(Sender: TObject);
  295. begin
  296.   Clean;
  297. end;
  298.  
  299. //Выход из программы
  300. procedure TForm1.Button2Click(Sender: TObject);
  301. begin
  302.   Close;
  303. end;
  304.  
  305. //Процедура ввода имен игроков
  306. procedure TForm1.Button1Click(Sender: TObject);
  307. begin
  308.   if (Player1Name.Text='') or (Player2Name.Text='') then
  309.     MessageBox(0,'Пожалуйста, заполните имя игроков!','Error!',mb_OK)
  310.   else
  311.     if (Player1Name.Text=Player2Name.Text) then
  312.       MessageBox(0,'Имена игроков не должны совпадать!','Error!',mb_OK)
  313.     else begin
  314.       Player1Label.Caption:='Игрок крестиками';
  315.       Label1.Caption:=Player1Name.Text;
  316.       Label1.Visible:=True;
  317.       Player2Label.Caption:='Игрок ноликами';
  318.       Label2.Caption:=Player2Name.Text;
  319.       Label2.Visible:=True;
  320.       Player1Name.Visible:=False;       //Скрываем поле для ввода имен
  321.       Player2Name.Visible:=False;       //Скрываем поле для ввода имен
  322.       WinnerX.Visible:=True;            //Отображаем количество побед крестиками
  323.       WinnerO.Visible:=True;            //Отображаем количество побед ноликами
  324.  
  325.       //Меняем вид формы
  326.       Panel13.Height:=40;
  327.       Panel14.Height:=40;
  328.       Panel11.Height:=56;
  329.       Button1.Visible:=False;
  330.       Button2.Visible:=False;
  331.       Form1.Height:=705;
  332.       Panel10.Visible:=True;
  333.       Panel12.Visible:=True;
  334.       Form1.Position:=poScreenCenter;   //Выводим форму по центру
  335.     end;
  336. end;
  337.  
  338. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement