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

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

19.04.2012, 03:04. Показов 1851. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в КА2. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа в КА2. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru