Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: Крестики нолики на с++  (Прочитано 12877 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн unimix

  • Активист
  • *
  • Сообщений: 537
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #15 : 06 Октября 2014, 08:05:52 »
Приступил к написанию крестиков ноликов и столкнулся с двумя проблемами: в функциях win_X() и win_O() программа не остонавливаеться, а в функциях igrok_1() и igrok_2() вообще чёт не то твориться.

Прежде, чем писать код на С++, всё-таки стоит изучить этот ЯП. Книг много написано, можно почитать по указанному выше ресурсу. Попутно в этих книгах всё-таки дают некоторые знания по программированию.

Для написания "крестиков-ноликов" стоило бы знать: что такое циклы, для чего они нужны, примеры их использования; что такое массивы, для чего они нужны, примеры работы с ними; что такое функции,  для чего они нужны, примеры их использования. Желательно читать последовательно и с самого начала, с введения.

Зачем объяснять то, что и так описано в книгах, но упорно игнорируется?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #16 : 06 Октября 2014, 16:42:09 »
Гриб_под_зонтом, это всего лишь пример цикла. Для проверки нам нужно просмотреть весь массив на совпадение по вертикали, горизонтали, диагоналям. Например можно так
Код: (vala) [Выделить]
for(var x = 0; x < 3; x++)
{
if(pole[x, 0] != ' ' && pole[x, 0] == pole[x, 1] && pole[x, 1] == pole[x, 2])
{
// Кто то выиграл Кто можно узнать по pole[x, 0]
}
}
Сейчас мы просмотрели по горизонтали. Как сделать для вертикали подумай, выложи сюда код.
Вот:
Код: (cpp) [Выделить]
for (int x=0; x<3; x++)
   {
   if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2])
   {
   if (a[x][0]=='X'){cout<<"Первый игрок выиграл!";}
   if (a[x][0]=='O'){cout<<"Второй игрок выиграл!";}
   }
   if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x])
   {
   if (a[x][0]=='X'){cout<<"Первый игрок выиграл!";}
   if (a[x][0]=='O'){cout<<"Второй игрок выиграл!";}
   }
   if (a[0][0])!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2])
   {
   if (a[x][0]=='X'){cout<<"Первый игрок выиграл!";}
   if (a[x][0]=='O'){cout<<"Второй игрок выиграл!";}
   }
   if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0])
   {
   if (a[x][0]=='X'){cout<<"Первый игрок выиграл!"}
   if (a[x][0]=='O'){cout<<"Второй игрок выиграл!"}
   }
   }
« Последнее редактирование: 06 Октября 2014, 16:44:01 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #17 : 06 Октября 2014, 17:06:00 »
Гриб_под_зонтом, процедуры функции(терминология плюсов) - штука удобная. Чтобы не писать каждый раз почти одно и тоже -
Код: (cpp) [Выделить]
void kto_vyigral(int x, int y)
{
        if (a[x][y]=='X'){cout<<"Первый игрок выиграл!";}
        else{cout<<"Второй игрок выиграл!";}
}
// У нас только 3 варианта. 1 - ' ' исключен, второй только что, остался только один.
Тогда код примерно такой
Код: (cpp) [Выделить]
           for (int x=0; x<3; x++)
           {
                   if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2])
                   {
                           kto_vyigral([x][0]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
                   if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x])
                   {
                           kto_vyigral([0][x]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
                   if (a[0][0])!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2])
                   {
                           kto_vyigral([0][0]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
                   if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0])
                   {
                           kto_vyigral([0][2]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
           }
Но одна ошибка осталась - мы проверяем по диагонали одно и тоже три раза. Исправляем.
Код: (cpp) [Выделить]
           for (int x=0; x<3; x++)
           {
                   if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2])
                   {
                           kto_vyigral([x][0]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
                   if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x])
                   {
                           kto_vyigral([0][x]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
           } // Выносим по диагонали за тело цикла, которое повторяется ТРИ раза
           if (a[0][0])!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2])
           {
                   kto_vyigral([0][0]);
                   return; // Ответ уже найден, дальше гонять процессор нет смысла
           }
           if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0])
           {
                   kto_vyigral([0][2]);
                   return; // Ответ уже найден, дальше гонять процессор нет смысла
           }
Процедура функция для проверки кто выиграл готова.
« Последнее редактирование: 06 Октября 2014, 21:30:43 от alsoijw »
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #18 : 07 Октября 2014, 00:07:33 »
Поправил код:
Код: (cpp) [Выделить]
#include <iostream>
using namespace std;

 char a [3] [3] = {{' ',' ',' '},
                   {' ',' ',' '},
                   {' ',' ',' '}};
   
   void print_a()
     {
for (int i=0; i<3; i++)
  {
              cout<<a[i][0]<<" | "<<a[i][1]<<" | "<<a[i][2];
              if (i<2) {cout<<endl<<"----------";}
              cout<<endl;
           }
     }
   void who_win()
   {
   int x, y;
   if (a[x][y]=='X'){cout<<"Первый игрок выиграл!";}
   if (a[x][y]=='O'){cout<<"Второй игрок выиграл!";}
   }
   void igrok_1()
   {
  int l;
  cout<<"Ход первого игрока: ";
  cin>>l;
  cout<<endl;
  if (l==1 && a[0][0]==' ') {a[0][0]='X';}
  if (l==2 && a[0][1]==' ') {a[0][1]='X';}
  if (l==3 && a[0][2]==' ') {a[0][2]='X';}
  if (l==4 && a[1][0]==' ') {a[1][0]='X';}
  if (l==5 && a[1][1]==' ') {a[1][1]='X';}
  if (l==6 && a[1][2]==' ') {a[1][2]='X';}
  if (l==7 && a[2][0]==' ') {a[2][0]='X';}
  if (l==8 && a[2][1]==' ') {a[2][1]='X';}
  if (l==9 && a[2][2]==' ') {a[2][2]='X';}
   }
   void igrok_2()
   {
     int k;
  cout<<"Ход второго игрока: ";
      cin>>k;
  cout<<endl;
  if (k==1 && a[0][0]==' ') {a[0][0]='O';}
  if (k==2 && a[0][1]==' ') {a[0][1]='O';}
  if (k==3 && a[0][2]==' ') {a[0][2]='O';}
  if (k==4 && a[1][0]==' ') {a[1][0]='O';}
  if (k==5 && a[1][1]==' ') {a[1][1]='O';}
  if (k==6 && a[1][2]==' ') {a[1][2]='O';}
  if (k==7 && a[2][0]==' ') {a[2][0]='O';}
  if (k==8 && a[2][1]==' ') {a[2][1]='O';}
  if (k==9 && a[2][2]==' ') {a[2][2]='O';}
   }
   int win()
   {
   for (int x=0; x<3; x++)
          {
           if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2]){who_win(); return 0;}
           if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x]){who_win(); return 0;}
          }
        if (a[0][0]!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2]){who_win(); return 0;}
        if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0]){who_win(); return 0;}
   }
   int main()
     {
print_a();
igrok_1();
print_a();
win();
igrok_2();
print_a();
win();
igrok_1();
print_a();
win();
igrok_2();
print_a();
win();
igrok_1();
print_a();
win();
igrok_2();
print_a();
win();
igrok_1();
print_a();
win();
igrok_2();
print_a();
win();
igrok_1();
print_a();
win();
cout<<"Ничья!"<<endl;
return 0;
}
при выиграше одного из игроков выкидывает следуещее: "Ошибка сегментирования(сделан дамп памяти)". Что с этим сделать?
« Последнее редактирование: 07 Октября 2014, 08:40:49 от Гриб_под_зонтом »
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #19 : 07 Октября 2014, 00:16:58 »
Гриб_под_зонтом,
   void who_win()
   {
           int x, y;
           if (a[x][y]=='X'){cout<<"Первый игрок выиграл!";}
           if (a[x][y]=='O'){cout<<"Второй игрок выиграл!";}
   }
Чему равны x и y?
Извините, я все еще учусь

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #20 : 07 Октября 2014, 08:41:24 »
Гриб_под_зонтом,
   void who_win()
   {
           int x, y;
           if (a[x][y]=='X'){cout<<"Первый игрок выиграл!";}
           if (a[x][y]=='O'){cout<<"Второй игрок выиграл!";}
   }
Чему равны x и y?
В функции win заданы x и y
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #21 : 07 Октября 2014, 12:50:06 »
Сделай так и посмотри
   void who_win()
   {
           int x, y;
           cout << "x=" << x  << " y=" << y;
//           if (a[x][y]=='X'){cout<<"Первый игрок выиграл!";}
//           if (a[x][y]=='O'){cout<<"Второй игрок выиграл!";}
   }
Извините, я все еще учусь

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #22 : 07 Октября 2014, 17:07:38 »
Гриб_под_зонтом, читай внимательно Посмотри на мой код еще раз. kto_vyigral([0][0]); void kto_vyigral(int x, int y) А вообще c++ должен предупреждать, что переменные неинициализированы. Vala предупреждает.

Пользователь решил продолжить мысль 07 Октября 2014, 17:09:07:
Гриб_под_зонтом, да и еще разберись с отступами и избавься от goto. Это тебе не ассемблер.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #23 : 07 Октября 2014, 17:22:22 »
А вообще c++ должен предупреждать, что переменные неинициализированы.
Попробовал g++, удивился, по-умолчанию предупреждения не выводит :(
Извините, я все еще учусь

Оффлайн peregrine

  • FSM
  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 7215
  • Gentoo x64 Ubuntu 16.04.1 x64
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #24 : 07 Октября 2014, 18:39:51 »
SergeyIT, с GCC ключ -Wall обязателен. Если лень писать makefile для простеньких примеров, то надо юзать clang (очень хорошо ругается на ошибки).
Гриб_под_зонтом, про область видимости переменной что знаешь?

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #25 : 07 Октября 2014, 19:13:00 »
Предупреждение? Они с дуба винды рухнули?
Код: (vala) [Выделить]
void main()
{
int a;
stdout.printf(@"$a");
}
1.vala:4.2-4.22: error: use of possibly unassigned local variable `a'
stdout.printf(@"$a");
^^^^^^^^^^^^^^^^^^^^^
Compilation failed: 1 error(s), 0 warning(s)
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #26 : 07 Октября 2014, 23:34:39 »
Гриб_под_зонтом, хотя бы так сделай
.......
       void who_win(char who)
       {
               if (who=='X'){cout<<"Первый игрок выиграл!";}
               else if (who=='O'){cout<<"Второй игрок выиграл!";}
               else {cout<<"Ошибка!";};
               cout<<endl;
       }
......
       int win()
       {
               for (int x=0; x<3; x++)
              {
               if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2]){who_win(a[x][0]); return 0;}
               if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x]){who_win(a[0][x]); return 0;}
              }
            if (a[0][0]!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2]){who_win(a[0][0]); return 0;}
            if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0]){who_win(a[0][2]); return 0;}
            return 1;
       }
......
и соображай дальше
Извините, я все еще учусь

Оффлайн Гриб_под_зонтом

  • Автор темы
  • Активист
  • *
  • Сообщений: 301
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #27 : 13 Октября 2014, 21:57:32 »
Вот работающий код :
Код: (cpp) [Выделить]
#include <iostream>
using namespace std;

 char a [3] [3] = {{' ',' ',' '},
                   {' ',' ',' '},
                   {' ',' ',' '}};
   
   void print_a()
     {
for (int i=0; i<3; i++)
  {
              cout<<a[i][0]<<" | "<<a[i][1]<<" | "<<a[i][2];
              if (i<2) {cout<<endl<<"----------";}
              cout<<endl;
           }
     }
   bool who_win(int x, int y)
   {
   if (a[x][y]=='X'){cout<<"Первый игрок выиграл!"<<endl; return true;}
   if (a[x][y]=='O'){cout<<"Второй игрок выиграл!"<<endl; return true;}
   return false;
   }
   void igrok_1()
   {
  int l;
  cout<<"Ход первого игрока: ";
  L:cin>>l;
  cout<<endl;
  if (l==1) {if (a[0][0]==' ') {a[0][0]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==2) {if (a[0][1]==' ') {a[0][1]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==3) {if (a[0][2]==' ') {a[0][2]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==4) {if (a[1][0]==' ') {a[1][0]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==5) {if (a[1][1]==' ') {a[1][1]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==6) {if (a[1][2]==' ') {a[1][2]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==7) {if (a[2][0]==' ') {a[2][0]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==8) {if (a[2][1]==' ') {a[2][1]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
  if (l==9) {if (a[2][2]==' ') {a[2][2]='X';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto L;}}
   }
   void igrok_2()
   {
  int k;
  cout<<"Ход второго игрока: ";
      K:cin>>k;
  cout<<endl;
  if (k==1) {if (a[0][0]==' ') {a[0][0]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==2) {if (a[0][1]==' ') {a[0][1]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==3) {if (a[0][2]==' ') {a[0][2]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==4) {if (a[1][0]==' ') {a[1][0]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==5) {if (a[1][1]==' ') {a[1][1]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==6) {if (a[1][2]==' ') {a[1][2]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==7) {if (a[2][0]==' ') {a[2][0]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==8) {if (a[2][1]==' ') {a[2][1]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
  if (k==9) {if (a[2][2]==' ') {a[2][2]='O';}
  else {cout<<"Ошибка: поле занято. Поробуйте ещё раз:"; goto K;}}
   }
   bool win()
   {
   for (int x=0; x<3; x++)
          {
           if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2]){if(who_win(x, 0)==true) return true;}
           if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x]){if(who_win(0, x)==true) return true;}
          }
           if (a[0][0]!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2]){if(who_win(0, 0)==true) return true;}
           if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0]){if(who_win(0, 2)==true) return true;}
           return false;
   }
   int main()
     {
print_a();
igrok_1();
print_a();
if(win()==true) return 0;
igrok_2();
print_a();
if(win()==true) return 0;
igrok_1();
print_a();
if(win()==true) return 0;
igrok_2();
print_a();
if(win()==true) return 0;
igrok_1();
print_a();
if(win()==true) return 0;
igrok_2();
print_a();
if(win()==true) return 0;
igrok_1();
print_a();
if(win()==true) return 0;
igrok_2();
print_a();
if(win()==true) return 0;
igrok_1();
print_a();
if(win()==true) return 0;
cout<<"Ничья!"<<endl;
return 0;
}
P. S с goto до сих пор ничего не поделал(
Hp 250 G3: 8Gb RAM, Intel Celeron 2.16-2.58GHz with 2 core, Intel HD Graphics.
Ubuntu 18.04 LTS with GNOME 3.

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #28 : 14 Октября 2014, 15:10:22 »
Гриб_под_зонтом, во первых отступы. Посмотри на мой код.
Код: (cpp) [Выделить]
           for (int x=0; x<3; x++)
           {
                   if (a[x][0]!=' ' && a[x][0]==a[x][1] && a[x][1]==a[x][2])
                   {
                           kto_vyigral([x][0]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
                   if (a[0][x]!=' ' && a[0][x]==a[1][x] && a[1][x]==a[2][x])
                   {
                           kto_vyigral([0][x]);
                           return; // Ответ уже найден, дальше гонять процессор нет смысла
                   }
           } // Выносим по диагонали за тело цикла, которое повторяется ТРИ раза
           if (a[0][0])!=' ' && a[0][0]==a[1][1] && a[1][1]==a[2][2])
           {
                   kto_vyigral([0][0]);
                   return; // Ответ уже найден, дальше гонять процессор нет смысла
           }
           if (a[0][2]!=' ' && a[0][2]==a[1][1] && a[1][1]==a[2][0])
           {
                   kto_vyigral([0][2]);
                   return; // Ответ уже найден, дальше гонять процессор нет смысла
           }
Если тебе так уж мешают скобки - не трогай отступы, они повышают читаемость.
У нас есть код, который повторяется:
Код: (cpp) [Выделить]
if(win()==true) return 0;
                 igrok_2();//igrok_1();
                 print_a();
Немного его изменим, получим
Код: (cpp) [Выделить]
void main()
{
print_a();
igrok_1();
print_a();
bool first = false;
while(!(win()))
{
if(first){igrok_1();}
else{igrok_2();}
print_a();
}
}
Код стал гораздо проще. Но он не предусматривает возможности ничьей. Добавляем новую функцию
Код: (cpp) [Выделить]
bool can_you_make_a_move()
{
for(var x=0; x<3; x++)
{
    for(var y=0; y<3; y++)
    {
        if(a[x,y] == ' '){return true;}
    }
}
cout<<"Ничья\n";
return false;
}
И модифицируем цикл
Код: (cpp) [Выделить]
while(!(win()) && can_you_make_a_move())Теперь поправь функции игроков.
ЗЫ отступы делай табуляцими.
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн SergeyIT

  • Зануда.
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 5743
  • Все по палатам!
    • Просмотр профиля
Re: Крестики нолики на с++
« Ответ #29 : 14 Октября 2014, 21:32:10 »
ЗЫ отступы делай табуляцими.
Это не есть истина в последней инстанции
Извините, я все еще учусь

 

Страница сгенерирована за 0.023 секунд. Запросов: 21.