Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Исходный код программы




unit Unit1;

 

interface

 

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, IdUDPServer, IdBaseComponent, IdComponent, IdUDPBase,

IdUDPClient, StdCtrls, IdSocketHandle, ExtCtrls, XPMan, ComCtrls,ShellAPI;

 

type

TForm1 = class(TForm)

IdUDPClient1: TIdUDPClient;

IdUDPServer1: TIdUDPServer;

Memo1: TMemo;

Edit1: TEdit;

Timer1: TTimer;

Button3: TButton;

Button4: TButton;

Memo2: TMemo;

Label1: TLabel;

Button5: TButton;

Timer2: TTimer;

Button1: TButton;

Button2: TButton;

XPManifest1: TXPManifest;

Button6: TButton;

procedure Button1Click(Sender: TObject);

procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

procedure Timer1Timer(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure Timer2Timer(Sender: TObject);

procedure Button6Click(Sender: TObject);

 

private

{ Private declarations }

public

{ Public declarations }

end;

 

var

Form1: TForm1;

var

v,ip:string;

n:integer;

r:boolean; //ожидание сообщения

rx:boolean;//ожидания Х

ro:boolean;//ожидание О

r1:boolean;//ожидание текстового сообщения

r2:boolean;//ожидание первого сообщения после установленя связи

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);//Процедура выбора игры крестиками

begin

if Edit1.Text='' then

begin

showmessage('Введите имя');

exit;

end;

begin

r:=true;

ro:=true;

Timer1.Enabled:=true;

Timer2.Enabled:=true;

Button2.Visible:=False;

end;

end;

procedure TForm1.Button3Click(Sender: TObject);// если нажали "ДА"

begin

IdUDPClient1.Host:=ip;// запоминаем ip-адрес соперника

Button1.Visible:=False;

Button2.Visible:=False;

Button5.Visible:=True;

Button3.Visible:=False;

Button4.Visible:=False;

Label1.Visible:=False;

Memo2.Visible:=False;

messageDLG('Соединение установлено',mtInformation,[mbOk],0);

Edit1.Clear;

end;

 

procedure TForm1.Button4Click(Sender: TObject);// если нажали "НЕТ"

begin

IdUDPClient1.BroadcastEnabled:=true;

Timer1.Enabled:=true;

Button3.Visible:=False;

Button4.Visible:=False;

Memo2.Visible:=False;

Label1.Visible:=False;

end;

 

procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;

ABinding: TIdSocketHandle);

var

s1:string;

begin

if r=true then

begin

n:=AData.size;//размер принятого сообщения

Setlength(v,n);

AData.Read(v[1],n);

if(ro)and(v[1]=chr($02)) then //если ожидаем О и получили О

begin

s1:=Copy(v,2,n-1);//имя с кем хочешь играть

Memo2.Lines.Add(s1);

ip:=Abinding.PeerIP;

IdUDPClient1.Host:=ip;

r1:=true;

ro:=false;// отключаем ожидание О

IdUDPClient1.BroadcastEnabled:=false;

Timer2.Enabled:=false;//выключаем минутный таймер

Button3.Visible:=True;

Button4.Visible:=True;

Memo2.Visible:=True;

Label1.Visible:=True;

end

else

if (rx)and(v[1]=chr($01)) then //ожидание Х и получили Х

begin

s1:=Copy(v,2,n-1);//имя с кем хочешь играть

Memo2.Lines.Add(s1);

Button3.Visible:=True;

Button4.Visible:=True;

Memo2.Visible:=True;

Label1.Visible:=True;

ip:=ABinding.Peerip;

IdUDPClient1.Host:=ip;

IdUDPClient1.Send(Chr($02)+Edit1.Text);//Отправка крестику имя нолика

r:=true; //Ожидание текстового сообщения включено

rx:=false;//Ожидание "Х" выключено

r2:=true;//Ожидание первого сообщения после установления диалога включено

end;

if (r1)and(ABinding.PeerIP=ip) then

begin

if r2 then

begin

r2:=false;

end;

end;

if (v[1]<>Chr($01))and(v[1]<>Chr($02))then //Если принятое сообщение не является запросом

begin

Memo1.Lines.Add(v+s1);

Timer2.Enabled:=false;

end;

end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);//Процедура для секундного таймера

begin

IdUDPClient1.Host:='255.255.255.255';

IdUDPClient1.Send(Chr($01)+Edit1.Text); //Отправка крестика и имени

end;

 

 

procedure TForm1.Button5Click(Sender: TObject);//Процедура нажатия кнопки "Отправить"

var m:string;

begin

Timer2.Enabled:=true;

m:=Edit1.Text;

IdUDPClient1.Host:=ip;

IdUDPClient1.Send(m);

Memo1.Lines.Add(m);

Edit1.Clear;

end;

 

procedure TForm1.Button2Click(Sender: TObject);//Процедура выбора игры ноликами

begin

if Edit1.Text='' then

begin

showmessage('Введите имя');

exit;

end;

begin

Timer2.Enabled:=true;

Button1.Visible:=False;

r:=true;

rx:=true;

end;

end;

procedure TForm1.FormCreate(Sender: TObject); //Процедура создания формы

begin

ip:='';

r:=false;

ro:=false;

rx:=false;

Timer1.Enabled:=false;

Timer2.Enabled:=false;

Button3.Visible:=false;

Button4.Visible:=false;

Memo2.Visible:=false;

Label1.Visible:=false;

end;

procedure TForm1.Timer2Timer(Sender: TObject);//Процедура для минутного таймера

begin

Timer2.Enabled:=false;

Timer1.Enabled:=false;

messageDLG('Нет ответа',mtInformation,[mbOk],0);

r:=false;

end;

 

procedure TForm1.Button6Click(Sender: TObject);//рестарт программы

begin

if MessageBox(Handle,'Перезапустить программу?','Вопрос',MB_YESNO or

MB_ICONQUESTION or MB_DEFBUTTON2)=IDYES

then begin

ShellExecute (0, 'open', PChar(Application.ExeName), nil, nil,

SW_SHOWNORMAL);

{Halt}PostQuitMessage(0);

end;

end;

 

end.

Блок – схемы

Процедура принятия сообщений

Процедура нажатия «Х»

 

Процедура TForm1.Timer1Timer

Процедура отправки сообщений






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных