Форум программистов, компьютерный форум CyberForum.ru

Крестики-нолики - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 178, средняя оценка - 4.76
Casper!
 Аватар для Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
02.09.2008, 18:16     Крестики-нолики #1
Здраствуйте,помогите пожалуйсто с програмкои крестики нолики проблема не могу в вести символы.
Вот собственно сам код рамки .

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<iostream>
#include<time.h>
usingnamespace std;
void ramka(int vis,int shir)//a-visota,b-shirina
{
int kletka=3;
vis=(vis*kletka)-(vis-1);
shir=(shir*kletka)-(shir-1);
for(int i=1;i<=vis;i++)
{
for(int j=1;j<=shir;j++)
{
if(i==1)
{
if(j==1)
cout<<char(218);//218 Ъ
elseif(j==shir)
cout<<char(191)<<'\n';//191 ї
elseif(j!=i&&j%2==1&&j<shir)
cout<<char(194);// В
elseif (j%2==0&&j<shir)
cout<<char(196);// Д
}
elseif(i!=1&&i%2==0&&i<vis)
{
if(j%2==1&&j<shir)
cout<<char(179);// і
elseif (j==shir)
cout<<char(179)<<'\n';// і
elseif(j%2==0&&j<shir)
cout<<' ';
}
elseif(i%2==1&&i!=1&&i<vis)
{
if(j==1)
cout<<char(195);
elseif(j==shir)
cout<<char(180)<<'\n';
elseif(j!=1&&j%2==1&&j<shir)
cout<<char(197);//+
elseif(j%2==0&&j<shir)
cout<<char(196);//-
}
elseif(i==vis)
{
if(j==1)
cout<<char(192);//192 А
elseif(j==shir)
cout<<char(217)<<'\n';//217 Щ
elseif(j!=1&&j%2==1&&j<shir)
cout<<char(193);//193 Б
elseif (j%2==0&&j<shir)
cout<<char(196);//196 Д
}
}
}
}
void main()
{
/*int a,b;
cout<<"Vvedite kol-vo kletok\n";
cout<<"Visota";cin>>a;
cout<<"Shirina";cin>>b;*/
int vis=3,shir=3;
ramka(vis,shir);
}
у меня просто кончились идеи .
Зарание блогодарствую.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2008, 18:16     Крестики-нолики
Посмотрите здесь:

C++ Крестики нолики на С
Крестики-нолики C++
C++ Крестики-нолики
C++ Крестики Нолики
Крестики нолики C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.09.2008, 18:19     Крестики-нолики #2
Курсор, по-моему через MoveTo можно перемещать... А вообще проще графикой, наверное, сделать...
Casper!
 Аватар для Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
02.09.2008, 18:22  [ТС]     Крестики-нолики #3
Я только начинающий и щас учим тему функцый.и пока мы не должный использовать курсо.
ABTOP
 Аватар для ABTOP
36 / 36 / 2
Регистрация: 09.06.2008
Сообщений: 324
03.09.2008, 16:47     Крестики-нолики #4
А массивы вы уже учили? если да, то зделай печать рамки через массив и спрашивай пользователя: Куда вы хотите устновить Х или 0?... Ответом будут две координаты например: 1 3. И в клетку 1,3 ты устанавливай Х или 0 соответственно... и заново перепечатывай игровое поле с уже поставленным элементом...
Casper!
 Аватар для Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
04.09.2008, 13:48  [ТС]     Крестики-нолики #5
Ща попробуем
vetal-voyts
13 / 12 / 1
Регистрация: 23.08.2008
Сообщений: 43
04.09.2008, 23:43     Крестики-нолики #6

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include<iostream>
#include<conio.h>
 
using namespace std;
 
int const size=3;
char A[size][size]={{'_','_','_'}
                   ,{'_','_','_'}
                   ,{'_','_','_'}};
char play1='X';
char play2='O';
int index;
bool test=false;
 
int movePlayer(char player);
void printArray(char A[][size],int size);
bool testLine(int index,char player);
 
void main()
    {
    printArray(A,size);
    int i=0;
    while(!test||i++<9)
        {
        index=movePlayer(play1);
        printArray(A,size);
        test=testLine(index,play1);
        if(!test)
            {
            index=movePlayer(play2);
            printArray(A,size);
            test=testLine(index,play2);
            }
    }
    cout<<"you win\n";
    _getch();
    }
 
void printArray(char A[][size],int size)
    {
        system("cls");
        for(int i=0;i<size;i++){
            for(int j=0;j<size;j++){
                cout<<A[i][j];
                }
            cout<<endl;
            }
    }
 
int movePlayer(char player)
    {
    int i,j;
    cout<<"player "<<player<<" enter i : ";
    cin>>i;
    cout<<"player "<<player<<"enter j : ";
    cin>>j;
    A[i][j]=player;
    return 3*i+j;
    }
bool testLine(int index,char player)
    {
    bool res=false;
    switch(index){
        case 0:{
            if((A[0][0]==A[1][1]&&A[0][0]==A[2][2])||
               (A[0][0]==A[1][0]&&A[0][0]==A[2][0])||
               (A[0][0]==A[0][1]&&A[0][0]==A[0][2]))
                res=true;
            break;
            }
        case 1:{
            if((A[0][1]==A[0][0]&&A[0][1]==A[0][2])||
               (A[0][1]==A[1][1]&&A[0][1]==A[2][1]))
                res=true;
            break;
            }
        case 2:{
            if((A[0][2]==A[0][1]&&A[0][2]==A[0][0])||
               (A[0][2]==A[1][2]&&A[0][2]==A[2][2])||
               (A[0][2]==A[1][1]&&A[0][2]==A[2][0]))
                res=true;
            break;
            }
        case 3:{
            if((A[1][0]==A[0][0]&&A[1][0]==A[2][0])||
               (A[1][0]==A[1][1]&&A[1][0]==A[1][2]))
                res=true;
            break;     
            }
        case 4:{
            if((A[1][1]==A[0][0]&&A[1][1]==A[2][2])||
               (A[1][1]==A[0][1]&&A[1][1]==A[2][1])||
               (A[1][1]==A[0][2]&&A[1][1]==A[2][0])||
               (A[1][1]==A[1][2]&&A[1][1]==A[1][0]))
                res=true;
            break;
            }
        case 5:{
            if((A[1][2]==A[0][2]&&A[1][2]==A[2][2])||
               (A[1][2]==A[1][0]&&A[1][2]==A[1][1]))
                res=true;
            break;
            }
        case 6:{
            if((A[2][0]==A[1][0]&&A[2][0]==A[0][0])||
               (A[2][0]==A[1][1]&&A[2][0]==A[1][2])||
               (A[2][0]==A[2][1]&&A[2][0]==A[2][2]))
                res=true;
            break;
            }
        case 7:{
            if((A[2][1]==A[1][1]&&A[2][1]==A[0][1])||
               (A[2][1]==A[2][0]&&A[2][1]==A[2][2]))
                res=true;
            break;
            }
        case 8:{
            if((A[2][2]==A[1][2]&&A[2][2]==A[0][2])||
               (A[2][2]==A[1][1]&&A[2][2]==A[0][0])||
               (A[2][2]==A[2][1]&&A[2][2]==A[2][0]))
                res=true;
            break;
            }
        }
    return res;
    }
Vourhey
Почетный модератор
6468 / 2243 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
05.09.2008, 01:21     Крестики-нолики #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Что все работает, конечно, замечательно. Но, по-моему, код сильно раздут. Особенно testline. Вот мой вариант (под С):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
 
int a[3][3];
 
void print_field()
{
   int i, j;
   system("clear");
   printf("_______\n");
   for(i=0;i<3;i++)
   {   
      for(j=0;j<3;j++)
      {   
         printf("|");
         if (a[i][j] == 1) printf("X");
         else if (a[i][j] == -1) printf("0");
         else printf(" ");
      }   
      printf("|\n_______\n");
   }   
}
 
int test_for_win(int x,int y)
{
   if((a[y][0] == a[y][1]) && (a[y][1] == a[y][2]) && (a[y][0] != 0)) return 1;
   if((a[0][x] == a[1][x]) && (a[1][x] == a[2][x]) && (a[0][x] != 0)) return 1;
   if(((a[0][0] == a[1][1]) && (a[1][1] == a[2][2]) && (a[0][0] != 0) || ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0]) && a[0][2] != 0))) return 1;
   return 0;
}
 
int main(int argc, char *argv[])
{
   int i, j, val, c;
   for(c =0;c<9;c++)
   {   
      printf("Coordinates: ");
      scanf("%d %d", &i, &j);
      if (a[i-1][j-1] != 0) {printf("Already set. Retype.\n"); continue;}
      if(c % 2 == 0) a[i-1][j-1] = -1; 
      else a[i-1][j-1] = 1;
      print_field();
      if (test_for_win(j-1, i-1))
      {   
         exit(0);
      }   
   }   
   return 0;
}
Функция проверки сокращена засчет того, что принимает в качестве аргумента координаты изменненной клетки, а значит, остается проверить: по горизонтали (координата у), по вертикали (координата х), и диагонали.

P. S. честно признаюсь, первый раз в жизни крестики-нолики написал.. Можно отметить... Просто ощущение, что через это задание все проходят, а я упустил в свое время. Сейчас я латаю дыры прошлого...
Casper!
 Аватар для Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
05.09.2008, 13:11  [ТС]     Крестики-нолики #8
А у нас еще морскои бои будет
XuTPbIu_MuHTAu
Эксперт C++
 Аватар для XuTPbIu_MuHTAu
2218 / 733 / 10
Регистрация: 27.05.2008
Сообщений: 1,507
05.09.2008, 13:25     Крестики-нолики #9
Vourhey,Когда я только только начал писать программы,написал крестики-нолики с "ИИ".... искуственный интеллект состоял из огромного количества if-ов...я так собой гордился,а через некоторое время - смущался,так глупо написано было ) ностальгическая штука,что уж тут...
zlodeh
Сообщений: n/a
28.02.2009, 14:37     Крестики-нолики #10
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# include <iostream>
# include <time.h>
# include <stdlib.h>
# include <stdio.h>
#include <conio.h>
using namespace std;
 
const char SMILE = 88, SMILE1 = 89;
int x,y;
const int stol=3, stro=3;
char mas[stol][stro];
enum {UP = 72, DOWN = 80, LEFT = 75, RIGHT = 77, ENTER = 13, SPACE = 32, ESC = 27};
 
void print()
{
    
    int a=4;
    int b=4;
    for ( int i=0;i<=a;i++)
    {       
        for (int j=0;j<=b;j++)
        {
            if (i%2==1 && j%2==1)
            {
                cout<<"+ ";
            }
            else if (i%2==1 && j%2==0)
            {
                cout<<"- ";
            }
 
            else if (j%2==1 && i%2==0 )
            {
                cout<<"| ";
            }
            else if (j%2==0 && i%2==0 )
            {
                
                if(j/2 == x && i/2 ==y)
                    cout<<SMILE<<" ";
                else
                    cout<<mas[j/2][i/2]<<" ";
            }
        }
        cout<<"\n";
 
    }   
}
 
 
 
void main()
{
    int key;
    for (int i=0;i<stro;i++)
    {
        for(int j=0;j<stol;j++)
        {
            mas[i][j] = 0;
        }
    }
    
    while(true)
    {
        system("CLS");
        print();
 
        key = _getch();
        if(key==3 || key==0) key = _getch();
 
    switch(key)
        {
        case UP    : y > 0 ? y-- : y = stol-1; break;
        case DOWN  : y < stol-1 ? y++ : y = 0; break;
        case LEFT  : x > 0 ? x-- : x = stro-1; break;
        case RIGHT : x < stro-1 ? x++ : x = 0; break;
        case ESC   : exit(0); //выход из программы
        case ENTER : mas [x][y] = SMILE; break;
    }
    }
    
    
 
}
это моя программа Крестиков и ноликов,но ещё не до делана.
Тут чем лучше от предыдущих кодов,что пользователь сам с помощью клавиатуры : вперёд,назад,право и лево" выбирает.
Но я пока не до писал ходы компьютера.
reijii
0 / 0 / 0
Регистрация: 18.04.2008
Сообщений: 3
16.03.2009, 20:07     Крестики-нолики #11
Привет. пишу программу "крестики-нолики" , чтоб по локальной сети играть можно было.
Сама прога может быть и сервером, и клиентом.
надеюсь на помощь по двум вопросам:
1) соединение 2х приложений получается только, если оба запущены на 1 компьютере с ip-адрессом подключения 127.0.0.1
на разных же компьютерах: "ошибка соединения"
2) не получается сделать так, чтоб при выполнении обработчика ( например Edit1Click ) на приложении-сервер, те же действия обработчика выполнялись на приложении-клиент, и наоборот.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n=2; AnsiString text1="X";
         AnsiString text2="O";
 
AnsiString Server;     // Переменная для хранения имени или IP-адреса сервера
                       // к которому осуществляется подключение
bool IsServer = FALSE; // ИСТИНА если программа работает в режиме сервера
#define ListeningMsg L"Прослушивание..."
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Edit1Click(TObject *Sender)
{
if (n%2==0)
Edit1->Text="X";
else Edit1->Text="O";
Edit1->Enabled=false;
n=n+1;
 
//-----yslovie pobedbl "X'------
if (Edit1->Text=="X" && Edit2->Text=="X" && Edit3->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit1->Text=="X" && Edit4->Text=="X" && Edit7->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit1->Text=="X" && Edit5->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'-------
if (Edit1->Text=="O" && Edit2->Text=="O" && Edit3->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit1->Text=="O" && Edit4->Text=="O" && Edit7->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit1->Text=="O" && Edit5->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia--------------------
if (n==11)
{
 if (Edit1->Text=="X" && Edit2->Text!="X" && Edit5->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit2->Text!="X" && Edit5->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit2->Text!="X" && Edit9->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit2->Text!="X" && Edit9->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit3->Text!="X" && Edit5->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit3->Text!="X" && Edit5->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit3->Text!="X" && Edit9->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="X" && Edit3->Text!="X" && Edit9->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit1->Text=="O" && Edit2->Text!="O" && Edit5->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit2->Text!="O" && Edit5->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit2->Text!="O" && Edit9->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit2->Text!="O" && Edit9->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit3->Text!="O" && Edit5->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit3->Text!="O" && Edit5->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit3->Text!="O" && Edit9->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit1->Text=="O" && Edit3->Text!="O" && Edit9->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//--------------------------------
 
void __fastcall TForm1::Edit2Click(TObject *Sender)
{
if (n%2==0)
Edit2->Text="X";
else Edit2->Text="O";
Edit2->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'-------
if (Edit1->Text=="X" && Edit2->Text=="X" && Edit3->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit2->Text=="X" && Edit5->Text=="X" && Edit8->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'-------
if (Edit1->Text=="O" && Edit2->Text=="O" && Edit3->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit2->Text=="O" && Edit5->Text=="O" && Edit8->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia-------------------
if (n==11)
{
 if (Edit2->Text=="X" && Edit1->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="X" && Edit1->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="X" && Edit3->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="X" && Edit3->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit2->Text=="O" && Edit1->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="O" && Edit1->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="O" && Edit3->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit2->Text=="O" && Edit3->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//---------------------------
void __fastcall TForm1::Edit3Click(TObject *Sender)
{
if (n%2==0)
Edit3->Text="X";
else Edit3->Text="O";
Edit3->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'-----
if (Edit1->Text=="X" && Edit2->Text=="X" && Edit3->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit3->Text=="X" && Edit6->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit3->Text=="X" && Edit5->Text=="X" && Edit7->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'----------
if (Edit1->Text=="O" && Edit2->Text=="O" && Edit3->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit3->Text=="O" && Edit6->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit3->Text=="O" && Edit5->Text=="O" && Edit7->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia---------------------
if (n==11)
{
 if (Edit3->Text=="X" && Edit2->Text!="X" && Edit5->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit2->Text!="X" && Edit5->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit2->Text!="X" && Edit7->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit2->Text!="X" && Edit7->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit1->Text!="X" && Edit5->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit1->Text!="X" && Edit5->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit1->Text!="X" && Edit7->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="X" && Edit1->Text!="X" && Edit7->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit3->Text=="O" && Edit2->Text!="O" && Edit5->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit2->Text!="O" && Edit5->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit2->Text!="O" && Edit7->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit2->Text!="O" && Edit7->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit1->Text!="O" && Edit5->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit1->Text!="O" && Edit5->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit1->Text!="O" && Edit7->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit3->Text=="O" && Edit1->Text!="O" && Edit7->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//---------------------------------
void __fastcall TForm1::Edit4Click(TObject *Sender)
{
if (n%2==0)
Edit4->Text="X";
else Edit4->Text="O";
Edit4->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'--------------
if (Edit4->Text=="X" && Edit1->Text=="X" && Edit7->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit4->Text=="X" && Edit5->Text=="X" && Edit6->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'-------------
if (Edit4->Text=="O" && Edit1->Text=="O" && Edit7->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit4->Text=="O" && Edit5->Text=="O" && Edit6->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia-------------------------
if (n==11)
{
 if (Edit4->Text=="X" && Edit1->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="X" && Edit1->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="X" && Edit7->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="X" && Edit7->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit4->Text=="O" && Edit1->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="O" && Edit1->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="O" && Edit7->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit4->Text=="O" && Edit7->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//------------------------------
void __fastcall TForm1::Edit5Click(TObject *Sender)
{
if (n%2==0)
Edit5->Text="X";
else Edit5->Text="O";
Edit5->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'--------
if (Edit5->Text=="X" && Edit2->Text=="X" && Edit8->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit5->Text=="X" && Edit4->Text=="X" && Edit6->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit5->Text=="X" && Edit1->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit5->Text=="X" && Edit3->Text=="X" && Edit7->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'---------
if (Edit5->Text=="O" && Edit2->Text=="O" && Edit8->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit5->Text=="O" && Edit4->Text=="O" && Edit6->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit5->Text=="O" && Edit1->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit5->Text=="O" && Edit3->Text=="O" && Edit7->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia------------------
if (n==11)
{
 if (Edit5->Text=="X" && Edit1->Text!="X" && Edit4->Text!="X" && Edit7->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit1->Text!="X" && Edit3->Text!="X" && Edit4->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit1->Text!="X" && Edit6->Text!="X" && Edit7->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit1->Text!="X" && Edit3->Text!="X" && Edit6->Text!="X" && Edit8->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit4->Text!="X" && Edit7->Text!="X" && Edit8->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit4->Text!="X" && Edit3->Text!="X" && Edit8->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit4->Text!="X" && Edit2->Text!="X" && Edit7->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit7->Text!="X" && Edit8->Text!="X" && Edit9->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit7->Text!="X" && Edit2->Text!="X" && Edit6->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit7->Text!="X" && Edit1->Text!="X" && Edit8->Text!="X" && Edit6->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit8->Text!="X" && Edit9->Text!="X" && Edit6->Text!="X" && Edit3->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit9->Text!="X" && Edit6->Text!="X" && Edit3->Text!="X" && Edit2->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit6->Text!="X" && Edit3->Text!="X" && Edit2->Text!="X" && Edit1->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit6->Text!="X" && Edit2->Text!="X" && Edit1->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit3->Text!="X" && Edit2->Text!="X" && Edit1->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit3->Text!="X" && Edit2->Text!="X" && Edit4->Text!="X" && Edit9->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="X" && Edit2->Text!="X" && Edit1->Text!="X" && Edit4->Text!="X" && Edit7->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit5->Text=="O" && Edit1->Text!="O" && Edit4->Text!="O" && Edit7->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit1->Text!="O" && Edit3->Text!="O" && Edit4->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit1->Text!="O" && Edit6->Text!="O" && Edit7->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit1->Text!="O" && Edit3->Text!="O" && Edit6->Text!="O" && Edit8->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit4->Text!="O" && Edit7->Text!="O" && Edit8->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit4->Text!="O" && Edit3->Text!="O" && Edit8->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit4->Text!="O" && Edit2->Text!="O" && Edit7->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit7->Text!="O" && Edit8->Text!="O" && Edit9->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit7->Text!="O" && Edit2->Text!="O" && Edit6->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit7->Text!="O" && Edit1->Text!="O" && Edit8->Text!="O" && Edit6->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit8->Text!="O" && Edit9->Text!="O" && Edit6->Text!="O" && Edit3->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit9->Text!="O" && Edit6->Text!="O" && Edit3->Text!="O" && Edit2->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit6->Text!="O" && Edit3->Text!="O" && Edit2->Text!="O" && Edit1->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit6->Text!="O" && Edit2->Text!="O" && Edit1->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit3->Text!="O" && Edit2->Text!="O" && Edit1->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit3->Text!="O" && Edit2->Text!="O" && Edit4->Text!="O" && Edit9->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit5->Text=="O" && Edit2->Text!="O" && Edit1->Text!="O" && Edit4->Text!="O" && Edit7->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//---------------------------------
void __fastcall TForm1::Edit6Click(TObject *Sender)
{
if (n%2==0)
Edit6->Text="X";
else Edit6->Text="O";
Edit6->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'----------
if (Edit6->Text=="X" && Edit3->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit6->Text=="X" && Edit5->Text=="X" && Edit4->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'----------
if (Edit6->Text=="O" && Edit3->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit6->Text=="O" && Edit5->Text=="O" && Edit4->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia---------------------
if (n==11)
 {
 if (Edit6->Text=="X" && Edit3->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="X" && Edit3->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="X" && Edit9->Text!="X" && Edit4->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="X" && Edit9->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit6->Text=="O" && Edit3->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="O" && Edit3->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="O" && Edit9->Text!="O" && Edit4->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit6->Text=="O" && Edit9->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 }
}
//-------------------------------
void __fastcall TForm1::Edit7Click(TObject *Sender)
{
if (n%2==0)
Edit7->Text="X";
else Edit7->Text="O";
Edit7->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'--------
if (Edit7->Text=="X" && Edit1->Text=="X" && Edit4->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit7->Text=="X" && Edit3->Text=="X" && Edit5->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit7->Text=="X" && Edit8->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'----------
if (Edit7->Text=="O" && Edit1->Text=="O" && Edit4->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit7->Text=="O" && Edit3->Text=="O" && Edit5->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit7->Text=="O" && Edit8->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia-----------------------
if (n==11)
{
 if (Edit7->Text=="X" && Edit8->Text!="X" && Edit4->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit8->Text!="X" && Edit4->Text!="X" && Edit3->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit8->Text!="X" && Edit1->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit8->Text!="X" && Edit1->Text!="X" && Edit3->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit9->Text!="X" && Edit4->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit9->Text!="X" && Edit4->Text!="X" && Edit3->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit9->Text!="X" && Edit1->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="X" && Edit9->Text!="X" && Edit1->Text!="X" && Edit3->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit7->Text=="O" && Edit8->Text!="O" && Edit4->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit8->Text!="O" && Edit4->Text!="O" && Edit3->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit8->Text!="O" && Edit1->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit8->Text!="O" && Edit1->Text!="O" && Edit3->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit9->Text!="O" && Edit4->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit9->Text!="O" && Edit4->Text!="O" && Edit3->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit9->Text!="O" && Edit1->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit7->Text=="O" && Edit9->Text!="O" && Edit1->Text!="O" && Edit3->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//--------------------------------
void __fastcall TForm1::Edit8Click(TObject *Sender)
{
if (n%2==0)
Edit8->Text="X";
else Edit8->Text="O";
Edit8->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'---------
if (Edit8->Text=="X" && Edit7->Text=="X" && Edit9->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit8->Text=="X" && Edit2->Text=="X" && Edit5->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'---------
if (Edit8->Text=="O" && Edit7->Text=="O" && Edit9->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit8->Text=="O" && Edit2->Text=="O" && Edit5->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia---------------------
if (n==11)
 {
 if (Edit8->Text=="X" && Edit7->Text!="X" && Edit2->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="X" && Edit7->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="X" && Edit9->Text!="X" && Edit2->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="X" && Edit9->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit8->Text=="O" && Edit7->Text!="O" && Edit2->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="O" && Edit7->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="O" && Edit9->Text!="O" && Edit2->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit8->Text=="O" && Edit9->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//------------------------------
void __fastcall TForm1::Edit9Click(TObject *Sender)
{
if (n%2==0)
Edit9->Text="X";
else Edit9->Text="O";
Edit9->Enabled=false;
n=n+1;
//-----yslovie pobedbl "X'-----------
if (Edit9->Text=="X" && Edit3->Text=="X" && Edit6->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit9->Text=="X" && Edit1->Text=="X" && Edit5->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
if (Edit9->Text=="X" && Edit8->Text=="X" && Edit7->Text=="X")
{Form2->Show();  Form1->Enabled=false;}
//-----yslovie pobedbl "O'-----------
if (Edit9->Text=="O" && Edit3->Text=="O" && Edit6->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit9->Text=="O" && Edit1->Text=="O" && Edit5->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
if (Edit9->Text=="O" && Edit8->Text=="O" && Edit7->Text=="O")
{Form4->Show();  Form1->Enabled=false;}
//-----nichia--------------------------
if (n==11)
{
 if (Edit9->Text=="X" && Edit8->Text!="X" && Edit6->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit8->Text!="X" && Edit6->Text!="X" && Edit1->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit8->Text!="X" && Edit3->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit8->Text!="X" && Edit3->Text!="X" && Edit1->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit7->Text!="X" && Edit6->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit7->Text!="X" && Edit6->Text!="X" && Edit1->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit7->Text!="X" && Edit3->Text!="X" && Edit5->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="X" && Edit7->Text!="X" && Edit3->Text!="X" && Edit1->Text!="X")
     {Form3->Show(); Form1->Enabled=false;}
 
 if (Edit9->Text=="O" && Edit8->Text!="O" && Edit6->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit8->Text!="O" && Edit6->Text!="O" && Edit1->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit8->Text!="O" && Edit3->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit8->Text!="O" && Edit3->Text!="O" && Edit1->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit7->Text!="O" && Edit6->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit7->Text!="O" && Edit6->Text!="O" && Edit1->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit7->Text!="O" && Edit3->Text!="O" && Edit5->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
 if (Edit9->Text=="O" && Edit7->Text!="O" && Edit3->Text!="O" && Edit1->Text!="O")
     {Form3->Show(); Form1->Enabled=false;}
}
}
//------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
n=2;
Edit1->Text=" ";
Edit1->Enabled=true;
Edit2->Text=" ";
Edit2->Enabled=true;
Edit3->Text=" ";
Edit3->Enabled=true;
Edit4->Text=" ";
Edit4->Enabled=true;
Edit5->Text=" ";
Edit5->Enabled=true;
Edit6->Text=" ";
Edit6->Enabled=true;
Edit7->Text=" ";
Edit7->Enabled=true;
Edit8->Text=" ";
Edit8->Enabled=true;
Edit9->Text=" ";
Edit9->Enabled=true;
Button1->Enabled=false;
}
//--------------------------------------
//Обработчик, вызываемый при подключении клиента
void __fastcall TForm1::ClientSocket1Connect(TObject *Sender,
      TCustomWinSocket *Socket)
{
     StatusBar1->SimpleText = "Соединение с сервером " +
Socket->RemoteHost + "[" + Socket->RemoteAddress + "] установлено";
//Form1->Button1->Enabled=false;
}
//----------------------------------------
//Обработчик, вызываемый при подключении клиента к серверу
void __fastcall TForm1::ServerSocket1Accept(TObject *Sender,
      TCustomWinSocket *Socket)
{
    IsServer = true;
StatusBar1->SimpleText = Socket->RemoteHost + "[" + Socket->RemoteAddress
+ "] подключен к серверу";
}
//-------------------------------------
//Обработчик, вызываемый при ошибке сокета клиента
void __fastcall TForm1::ClientSocket1Error(TObject *Sender,
      TCustomWinSocket *Socket, TErrorEvent ErrorEvent, int &ErrorCode)
{
Form5->Label1->Caption="Ошибка соединения, сервер: " + Server;
Form5->Show();
Form1->Enabled=false;
ErrorCode = 0;
}
//-----------------------------------
//Обработчик, вызываемый при отключении клиента от сервера
void __fastcall TForm1::Button2Click(TObject *Sender)
{
   ServerSocket1->Close();
   ClientSocket1->Close();
   Close();
}
//---------------------------
//--кнопка подключиться, нажимается клиентом, после того как сервер нажал прослушивание
void __fastcall TForm1::Button3Click(TObject *Sender)
{
 if (ClientSocket1->Active)
        ClientSocket1->Active = false;
 if (InputQuery("Введите имя или IP-адрес подключаемого компьютера",
"Адрес:", Server))
 {
if (Server.Length() > 0)
        {
        ClientSocket1->Host = Server;
        ClientSocket1->Active = true;
        }
 }
}
//------------------------------
//-разъединение связи
 
void __fastcall TForm1::Button5Click(TObject *Sender)
{
  ClientSocket1->Active = false;
  ServerSocket1->Active = true;
  StatusBar1->SimpleText = ListeningMsg;
}
//--------------------------------
//--кнопка прослушивания, включается сервером для того, чтобы клиент смог
//--подключиться----------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
ClientSocket1->Active = false;
ServerSocket1->Active = true;
StatusBar1->SimpleText = ListeningMsg;
}
//-------------------------------
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
18.02.2010, 01:41     Крестики-нолики #12
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <stdio.h>
#include <stdlib.h>
 
int a[3][3];
 
void print_field()
{
   int i, j;
   system("clear");
   printf("_______\n");
   for(i=0;i<3;i++)
   {
      for(j=0;j<3;j++)
      {
         printf("|");
         if (a[i][j] == 1) printf("X");
         else if (a[i][j] == -1) printf("0");
         else printf(" ");
      }
      printf("|\n_______\n");
   }
}
 
int test_for_win(int x,int y)
{
   if((a[y][0] == a[y][1]) && (a[y][1] == a[y][2]) && (a[y][0] != 0)) return 1;
   if((a[0][x] == a[1][x]) && (a[1][x] == a[2][x]) && (a[0][x] != 0)) return 1;
   if(((a[0][0] == a[1][1]) && (a[1][1] == a[2][2]) && (a[0][0] != 0) || ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0]) && a[0][2] != 0))) return 1;
   return 0;
}
 
int main(int argc, char *argv[])
{
   int i, j, val, c;
   for(c =0;c<9;c++)
   {
      printf("Coordinates: ");
      scanf("%d %d", &i, &j);
      if (a[i-1][j-1] != 0) {printf("Already set. Retype.\n"); continue;}
      if(c % 2 == 0) a[i-1][j-1] = -1;
      else a[i-1][j-1] = 1;
      print_field();
      if (test_for_win(j-1, i-1))
      {
         exit(0);
      }
   }
   return 0;
}
а вы не подскажете как к этой проге Vourhey (нужно в С ), еще сделать так, чтобы вписывать участников и выписывать результат их игр пожалуйста
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
19.02.2010, 21:07     Крестики-нолики #13
Я пытаюсь дополнить немного, но у меня никак не получаеться, подскажите плииииииз...
вот например когда вводить коорлинаты 1 4 оно считает как 2 1 ..как избежать этого?
е исли этот ход повторяеться, то оно уже пишет как ход следющего игрока, а не того,который должен быть... где нужно подправить?


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <stdlib.h>
 
int a[3][3];
 
void pole ()
{
   int i, j;
   printf("_______\n");
   for(i=0;i<3;i++)
   {
      for(j=0;j<3;j++)
      {
         printf("|");
         if (a[i][j] == 1) printf("X");
         else if (a[i][j] == -1) printf("0");
         else printf(" ");
      }
      printf("|\n_______\n");
   }
}
 
int test(int x,int y)
 
{
   if((a[y][0] == a[y][1]) && (a[y][1] == a[y][2]) && (a[y][0] != 0)) return 1;
   if((a[0][x] == a[1][x]) && (a[1][x] == a[2][x]) && (a[0][x] != 0)) return 1;
   if((((a[0][0] == a[1][1]) && (a[1][1] == a[2][2]) && (a[0][0] != 0)) || ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0]) && a[0][2] != 0))) return 1;
   return 0;
}
 
int main(int argc, char *argv[])
{
 
 
 
   int i, j, krok;
  for(krok =0;krok<9;krok++)
   {
      if(krok % 2 == 0)
      printf ( " Pierwszy 0 ");
      else
      printf (" drugi X  ");
      printf("koordynaty: ");
      scanf("%d %d", &i, &j);
      if (a[i-1][j-1] != 0)
        {
            printf("Juz istnieje\n");
            continue;
        }
      if(krok % 2 == 0) a[i-1][j-1] = -1;
      else a[i-1][j-1] = 1;
      pole ();
      if (test(j-1, i-1))
 
      {
         exit(0);
      }
 
   }
   return 0;
}
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1331 / 864 / 50
Регистрация: 02.01.2009
Сообщений: 2,622
Записей в блоге: 1
19.02.2010, 21:25     Крестики-нолики #14
Так на вскидку..
Крестики-нолики
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
19.02.2010, 23:14     Крестики-нолики #15
Но мне нужно в С, а С++ я еще не учила... =((
к тому же счас только учусь программировать - мне эту прогу сложнее нужно написать - хотя бы 5на5, но я пробую сначала с 3на3 разобраться...

и с тем как игроков вводить...
и выводить хто победил..

а как делать даже обьяснить некому

вот и прошу у вас помощи

Добавлено через 1 час 41 минуту
"е исли этот ход повторяеться, то оно уже пишет как ход следющего игрока, а не того,который должен быть.."
вот с этим уже как-то разобралась =)

вариант

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <stdio.h>
#include <stdlib.h>
 
int a[3][3];
 
void pole ()
{
   int i, j;
   system (" ");
   printf("_______\n");
   for(i=0;i<3;i++)
   {
      for(j=0;j<3;j++)
      {
         printf("|");
         if (a[i][j] == 1) printf("X");
         else if (a[i][j] == -1) printf("0");
         else printf(" ");
      }
      printf("|\n_______\n");
   }
}
 
int test(int x,int y)
 
{
   if((a[y][0] == a[y][1]) && (a[y][1] == a[y][2]) && (a[y][0] != 0)) return 1;
   if((a[0][x] == a[1][x]) && (a[1][x] == a[2][x]) && (a[0][x] != 0)) return 1;
   if((((a[0][0] == a[1][1]) && (a[1][1] == a[2][2]) && (a[0][0] != 0)) || ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0]) && a[0][2] != 0))) return 1;
   return 0;
}
 
int main(int argc, char *argv[])
{
  int i, j, krok=0;
  while( krok<9 )
   {
      if(krok % 2 == 0)
      printf ( " Pierwszy 0 ");
      else
      printf (" drugi X  ");
      printf("koordynaty: ");
      scanf("%d %d", &i, &j);
      if (a[i-1][j-1] != 0)
        {
            printf("Juz istnieje\n");
            continue;
        }
      if(krok % 2 == 0) a[i-1][j-1] = -1;
      else a[i-1][j-1] = 1;
 
      pole ();
      if (test(j-1, i-1))
 
 
      {
         exit(0);
      }
      krok++;
   }
 
   return 0;
}
Цитата Сообщение от Женя. Посмотреть сообщение
вот например когда вводить коорлинаты 1 4 оно считает как 2 1 ..как избежать этого?
вот этого никак понять не могу =(

и как выводить кто выиграл - крестик или нолик =((


а чтобы вписать еще и имена игроков - у меня есть только прдположение, но я не знаю куда это поставить и верно ли.. возможно смешно... но все же - подскажите что да как,если не трудно...

я пока только простое написала, но еще не знаю куда и что вставить... возможно это дурацкий вопрос


C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int  x,o, krestik, nolik;
  printf ("imie pirwsze");
  scanf ("%d", &nolik);
  printf ("imie drugie");
  scanf ("%d", &krestik);
  x= krestik;
  o=nolik;
 
а потом где-то вставить
 
      if(krok % 2 == 0)
      printf ( " win ", o);
      else
      printf ("win  ", x);
вот мой ход мыслей - подскажите что не так =( или куда поставить это...
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
20.02.2010, 23:27     Крестики-нолики #16
файл *.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
#include <iostream>
#include <conio.h>
#include "mex.h"
 
 
using namespace std;
 
char matrix[3][3];
 
int main()
{
    char done=' ';
    init_matrix();
    do{
        show_matrix();
        cout<<endl;
        get_player_move();
        done=check();
        if (done!=' ')
        break;
        get_computer_move();
        done=check();
    } while (done==' ');
    if (done=='X')
    cout<<"vbI pobedili"<<endl;
    else cout<<"ya vbIigral!!"<<endl;
    show_matrix();
    getch();
    return 0;
}
 
void init_matrix(){
    int i=0;
    while (i<3){
        int j=0;
        while (j<3){
            matrix[i][j]=' ';
            j++;
        }
        i++;
    }
}
 
void show_matrix(){
    int tmp=0;
    while (tmp<3){
        printf("%c | %c | %c", matrix[tmp][0],matrix[tmp][1], matrix[tmp][2]);
        if (tmp!=2) printf("\n--|---|---\n");
        printf("\n");
        tmp++;
    }
}
 
void get_computer_move(){
    int i=0;
    int j=0;
    for (i=0; i<3; i++){
        for (j=0; j<3; j++)
        if (matrix[i][j]==' ') break;
        if (matrix[i][j]==' ') break;
    }
    if (i*j==9){
        cout<<"nichya";
        exit(0);
    } else
    matrix[i][j]='O';
}
 
void get_player_move(){
    cout<<"Vash xod gospodin...";
    int x=0;
    int y=0;
    cin>>x>>y;
    x--;
    y--;
    if (matrix[x][y]==' ')
    matrix[x][y]='X';
    else {
        cout<<"nevernbii xod, popbtaitec eshe"<<endl;
        get_player_move();
    }
}
 
char check(){
    int i=0;
    while (i<3){
        if (matrix[i][0]==matrix[i][1] && matrix[i][0]==matrix[i][2])
        return matrix[i][0];
        i++;
    }
 
    i=0;
    while (i<3){
        if (matrix[0][i]==matrix[1][i] && matrix[0][i]==matrix[2][i])
        return matrix[0][i];
        i++;
    }
 
    if (matrix[0][0]==matrix[1][1] && matrix[1][1]==matrix[2][2])
    return matrix[0][0];
 
    if (matrix[0][2]==matrix[1][1] && matrix[1][1]==matrix[2][0])
    return matrix[0][2];
    return ' ';
}
файл mex.h:

C++
1
2
3
4
5
void get_computer_move();
void get_player_move();
char check();
void init_matrix();
void show_matrix();
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
21.02.2010, 04:00     Крестики-нолики #17
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <stdio.h>
#include <stdlib.h>
 
int a[3][3];
 
void pole ()
{
   int i, j;
   system (" ");
   printf("_______\n");
   for(i=0;i<3;i++)
   {
      for(j=0;j<3;j++)
      {
         printf("|");
         if (a[i][j] == 1) printf("X");
         else if (a[i][j] == -1) printf("0");
         else printf(" ");
      }
      printf("|\n_______\n");
   }
}
 
int test(int x,int y)
 
{
   if((a[y][0] == a[y][1]) && (a[y][1] == a[y][2]) && (a[y][0] != 0)) return 1;
   if((a[0][x] == a[1][x]) && (a[1][x] == a[2][x]) && (a[0][x] != 0)) return 1;
   if((((a[0][0] == a[1][1]) && (a[1][1] == a[2][2]) && (a[0][0] != 0)) || ((a[0][2] == a[1][1]) && (a[1][1] == a[2][0]) && a[0][2] != 0))) return 1;
   return 0;
}
 
int main(int argc, char *argv[])
{
  char krestik_name[16];
  char nolik_name[16];
  int i, j, krok = 0;
 
  printf("wprowadz nazwe gracza krzyze: ");
  scanf("%s", krestik_name);
 
  printf("wprowadz nazwe gry kolko: ");
  scanf("%s", nolik_name);
 
  while( krok<9 )
   {
      if(krok % 2 == 0)
      printf ( "%s\n",nolik_name);
      else
      printf ("%s\n",krestik_name);
      printf("koordynaty: ");
      scanf("%d %d", &i, &j);
 
     if (i < 1 || i > 3 || j< 1 || j > 3)
     {
        printf("blad \n");
       continue;
     }
     if (a[i-1][j-1] != 0)
     {
         printf("Juz istnieje\n");
         continue;
     }
 
 
      if(krok % 2 == 0) a[i-1][j-1] = -1;
      else a[i-1][j-1] = 1;
 
      pole ();
      if (test(j-1, i-1))
      {
            if(krok % 2 == 0)
              {printf ( "___________________\n");
               printf ( "WIN____%s\n" ,nolik_name);
               printf ( "___________________\n");}
            else
               {printf ( "___________________\n");
                printf ("WIN_____%s\n",krestik_name);
                printf ( "___________________\n");}
 
          break;
      }
 
      krok++;
 
   }
   return 0;
}
вот вариант этой проги - как-то дошла к нему..
может кому-то пригодиться


счас хочу 10на10 сделать, но вот где -то в "тест" ошибку допустила...

C
1
2
3
4
5
6
7
8
int test(int x,int y)
 
{  int i,j;
   if((a[y][j] == a[y][j+1]) && (a[y][j+1] == a[y][j+2]) && (a[y][j+2] == a[y][j+3]) && (a[y][j+3] == a[y][j+4])&&(a[y][j] != 0)) return 1;
   if((a[i][x] == a[i+1][x]) && (a[i+1][x] == a[i+2][x]) &&(a[i+2][x] == a[i+3][x]) && (a[i+3][x] == a[i+4][x]) &&  (a[i][x] != 0)) return 1;
   if((((a[i][j] == a[i+1][j+1])&&(a[i+1][j+1] == a[i+2][j+2])&&(a[i+2][j+2] == a[i+3][j+3])&&(a[i+3][j+3] == a[i+4][j+4])&&(a[i][j] != 0)))||((a[i][j+4] == a[i+1][j+3]) && (a[i+1][j+3] == a[i+2][j+2]) &&(a[i+2][j+2] == a[i+3][j+1]) && (a[i+3][j+1] == a[i][j+4]) && a[i][j+4] != 0)) return 1;
   return 0;
}
может вы поймете где?
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.02.2010, 10:58     Крестики-нолики #18
попробуй вот так(проверка по строкам):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const int max_size_mas=10;
int Mas[i][j];
 
i=0;
while (i<(max_size_mas-1)){
  j=0;
  while (j<(max_size_mas-1)){
      if (Mas[i][0]!=Mas[i][j+1])
      break;
      j++;
   }
   if (j==9) return 1;// если строка полностью из крестиков(ноликов) то выход;
  i++;
}
когда поле 10 на 10, в ручную уже как то не удобно проверять)
Женя.
 Аватар для Женя.
4 / 4 / 1
Регистрация: 10.02.2010
Сообщений: 38
21.02.2010, 14:42     Крестики-нолики #19
Спасибо =)
но 10 на 10 немного другие условия победы

здесь нужно ряд из 5 крестиков или ноликов составить...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.02.2010, 17:38     Крестики-нолики
Еще ссылки по теме:

C++ Крестики-нолики
Крестики нолики C++
C++ Крестики нолики

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
PointsEqual
ниначмуроФ
 Аватар для PointsEqual
832 / 516 / 33
Регистрация: 12.10.2009
Сообщений: 1,915
21.02.2010, 17:38     Крестики-нолики #20
ааа, ну вот:


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int count=0; //количество подряд идущих крестиков
 
...
...
  while (j<(max_size_mas-1)){
      if (Mas[i][0]!=Mas[i][j+1])
      count=0;
      else  if (Mas[i][0]==Mas[i][j+1])
      count++;
      if (count==5)
      break;
      j++;
   }
...
...
Yandex
Объявления
21.02.2010, 17:38     Крестики-нолики
Ответ Создать тему
Опции темы

Текущее время: 01:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru