Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
11 / 11 / 6
Регистрация: 03.04.2011
Сообщений: 631

Не могу продумать цикл. Игра крестики нолики.

19.04.2012, 03:04. Показов 1826. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте. Игра крестики нолики поле 9 на 9 победа возникает если 5 крестиков идут подряд не могу описать цикл который проходит по диагонали с номером 4.0 3.1 2.2 1.3 0.4 этот цикл самый последний на данный момент в низу программы, не знаю как описать его чтоб именно эту диагональ сравнивал и фиксировал победу((( может кто сообразит подскажет
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
#include <vcl.h>
#pragma hdrstop
 
#include "krest.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
static int counterO=0,counterX=0;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
StringGrid1->Visible=false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::StringGrid1SelectCell(TObject *Sender, int ACol, int ARow,
                  bool &CanSelect)
{
        if (StringGrid1->Cells[ACol][ARow]=="") if (RadioButton1->Checked)
        {
         StringGrid1->Cells[ACol][ARow]="  X ";
        }
        if (StringGrid1->Cells[ACol][ARow]=="") if (RadioButton2->Checked)
        {
         StringGrid1->Cells[ACol][ARow]="  O ";
        }
        counterX=0;counterO=0;
        for (int i = 0; i < StringGrid1->ColCount; i++)
        { //сканирование по столбцам
               for (int j=0; j < StringGrid1->RowCount; j++)
               {
                if (StringGrid1->Cells[i][j]=="  X ")counterX++;
                else counterX=0;if(counterX==5) ShowMessage ("победа");
                if (StringGrid1->Cells[i][j]=="  O ") counterO++;
                else counterO=0;if(counterO==5) ShowMessage ("победа");
               }
        }
        counterX=0;counterO=0;
        for (int j = 0; j < StringGrid1->ColCount; j++)
        { //сканирование по строкам
              for (int i=0; i < StringGrid1->RowCount; i++)
               {
                if (StringGrid1->Cells[i][j]=="  X ")counterX++;
                else counterX=0;if(counterX==5) ShowMessage ("победа");
                if (StringGrid1->Cells[i][j]=="  O ") counterO++;
                else counterO=0;if(counterO==5) ShowMessage ("победа");
               }
        }
        counterX=0;counterO=0;
         for (int i = 0; i < StringGrid1->ColCount; i++)//сканирование по диагонали 1.1 2.2 3.3 ...
         {
                if (StringGrid1->Cells[i][i]=="  X ")counterX++;
                else counterX=0;if(counterX==5) ShowMessage ("победа");
                if (StringGrid1->Cells[i][i]=="  O ") counterO++;
                else counterO=0;if(counterO==5) ShowMessage ("победа");
         }
         counterX=0;counterO=0;
          for (int i=0; i < StringGrid1->RowCount; i++)
               {
                if (StringGrid1->Cells[i][8-i]=="  X ")counterX++;
                else counterX=0;if(counterX==5) ShowMessage ("победа");
                if (StringGrid1->Cells[i][8-i]=="  O ") counterO++;
                else counterO=0;if(counterO==5) ShowMessage ("победа");
               }
     counterX=0;counterO=0;
          for (int m=8; m<13;m++)   // диагональ 0.4 до 4.8
                  { if (StringGrid1->Cells[m-8][m-4]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=6; m<12;m++)   // диагональ 0.3 до 5.8
                  { if (StringGrid1->Cells[m-6][m-3]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=4; m<11;m++)   // диагональ 0.2 до 6.8
                  { if (StringGrid1->Cells[m-4][m-2]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=2; m<10;m++)   // диагональ 0.1 до 7.8
                  { if (StringGrid1->Cells[m-2][m-1]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=2; m<10;m++)   // диагональ 1.0,2.1 до 8.7
                  { if (StringGrid1->Cells[m-1][m-2]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=4; m<11;m++)   // диагональ 2.0 до 8.6
                  { if (StringGrid1->Cells[m-2][m-4]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=6; m<12;m++)   // диагональ 3.0 до 8.5
                  { if (StringGrid1->Cells[m-3][m-6]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
          for (int m=8; m<13;m++)   // диагональ 4.0 до 8.4
                  { if (StringGrid1->Cells[m-4][m-8]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
     counterX=0;counterO=0;
 
          for (int m=8,n=0; m<4;m--,n++)
           // диагональ 4.0 до 0.4
                  { if (StringGrid1->Cells[m-4][n]=="  X ") counterX++;
                    else counterX=0;
                    if(counterX==5) ShowMessage("победа");
                  }
 
 
      }
Вложения
Тип файла: rar крестики нолики.rar (6.7 Кб, 30 просмотров)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.04.2012, 03:04
Ответы с готовыми решениями:

Игра Крестики-нолики
Всем привет. Сделал игру Крестики-нолики на консоли, хотел бы узнать можно ее как-нибудь улучшить, упростить код(если возможно). Сама...

Игра крестики-нолики
как сделать так чтобы после окнчания игры в отдельном окне выводилось сообщение кто победил или ничья..

Игра судоку (крестики-нолики)
Люди подскажите пожалуйста. Препод дал задание написать игру судоку ну типа крестики нолики. Поле 9 на 9 . Выигрывает в том случае если 5...

5
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
19.04.2012, 03:07
Сеть, игра "Крестики-нолики"
Несколько небольших игрушек. Крестики-нолики.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
19.04.2012, 13:14
C++
1
2
3
4
  for (int m=4,n=0; n<5; m--,n++)   { 
  // äèàãîíàëü 4.0 äî 0.4 - 4.0   3.1   2.2   1.3   0.4
    if (StringGrid1->Cells[m][n]=="  X ") counterX++;
    else counterX=0;

Не по теме:

... красивый код, ТС!...



Добавлено через 3 часа 55 минут

Не по теме:

Как бы сделал я...

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 <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
//StringGrid1->Visible=false;
} 
//---------------------------------------------------------------------------
void __fastcall TForm1::gridSelectCell(TObject *Sender, int ACol, int ARow,
                  bool &CanSelect)
{
   bool vict;
   AnsiString Ce[2] = { " X"," O"  };
   if ((grid->Cells[ACol][ARow]=="")&&
       (box2->Enabled))
     grid->Cells[ACol][ARow]=Ce[box2->ItemIndex];
   box2->ItemIndex ^= 1;
   vict  = find5(1,1);  // äèàãîíàëü áýêñëýø
   vict |= find5(1,0);  // ãîðèçîíòàëü
   vict |= find5(0,1);  // âåðòèêàëü
   vict |= find5(1,-1); // äèàãîíàëü ñëýø
   Label1->Visible = vict ;
   box2->Enabled = !vict ;
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
      for (int co=0;co<grid->ColCount;co++)
        for (int rw=0;rw<grid->RowCount;rw++)
          grid->Cells[co][rw] = "";
      box2->Enabled = true;
      box2->ItemIndex = 0;
      Label1->Visible = false;
}
//---------------------------------------------------------------------------
 
bool __fastcall TForm1::find5(int co,int rw)
{
     int equ, res5=0;
     for (int i=0;i<9;i++)  {
       for (int j=0,equ=0;j<9;j++,equ=0)  {
         for (int k=0;k<5;k++)  {
           if ((i+co*k < 9)&&(j+rw*k < 9)&&
               (i+co*k >-1)&&(j+rw*k >-1)&&
               (grid->Cells[i+co*k][j+rw*k].Pos('X'))) equ++;
           res5 |= (equ>4);
         } 
         for (int s=0,equ=0;s<5;s++)  {
           if ((i+co*s < 9)&&(j+rw*s < 9)&&
               (i+co*s >-1)&&(j+rw*s >-1)&&
               (grid->Cells[i+co*s][j+rw*s].Pos('O'))) equ++;
           res5 |= (equ>4);
         }
       } 
     }
     return (res5 != 0) ;
}
//---------------------------------------------------------------------------

... и картинка
Миниатюры
Не могу продумать цикл. Игра крестики нолики.  
1
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 44
15.10.2013, 12:06
nick42, исходник бы весь...
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
15.10.2013, 12:56
Цитата Сообщение от pmipmi Посмотреть сообщение
nick42, исходник бы весь...
так он практически весь и приведен...
Вложения
Тип файла: rar 38.RAR (185.0 Кб, 31 просмотров)
1
0 / 0 / 0
Регистрация: 15.09.2013
Сообщений: 44
15.10.2013, 13:33
nick42, спасииибо.
попытаюсь ИИ прописать для компа
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.10.2013, 13:33
Помогаю со студенческими работами здесь

Игра крестики нолики, не могу разобраться с циклом не нахожу ошибку
Код еще не дописан во функции main но компилятор уже ругается на цикл whileбподстажите что нужно сделать чтобы заработал( #include...

Игра крестики-нолики
Здравствуйте, ребята! Вообщем такое задание: Создать класс типа игра крестики-нолики. Поле класса - массив из (3х3). Ставить можна...

Игра Крестики-нолики
Ребят, такая ситуация, задумал написать игру крестики нолики:) Суть в том чтобы сами крестики и нолики прописывались в матрицу 3 на 3, но...

Игра Крестики Нолики
Здравствуйте, Уважаемые Пользователи и Программисты КиберФорума! Будьте добры помочь мне с написанием программы) Задача: Написать игру...

Игра [Крестики Нолики] C++
Всем привет. Возможно кому-то пригодится исходный код игры . Все очень просто и легко. Компилятор Borland C++ Builder 6. #pragma...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru