Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
1

Написать алгоритм ничьей в крестики-нолики

14.05.2017, 00:59. Просмотров 429. Ответов 10
Метки нет (Все метки)

Всем привет возникла проблема,программа исправно работает но когда открывается консоль для игры вот у меня пронумерована игровая сетка следующего типа: 1 2 3
4 5 6
7 8 9
Когда нажимаешь 3 крестик или нолик ставится на цифре 7 когда нажимаешь 3 вообще выдаёт ошибку что нет такого числа,помогите пожалуйста всю голову сломал.
Программа
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
#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
 
using namespace std;
 
char name1[30];
char name2[30];
char table[3][3];
bool step;
 
void instruction()
{
    cout << "\t\t * Крестики-Нолики *\n\n";
    cout << "Правила:\n";
    cout << "Играет 2 игрока на поле 3х3\n";
    cout << "Побеждает игрок, составивший выигрышную комбинацию\n";
    cout << "Вид поля:\n\n";
    int l = 0;
 
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            cout << "| " << l+1 << ' ';
            table[i][j] = char(49+l);
            l++;
        }
        cout << '|';
        cout << endl;
    }
 
    cout << "\nДля хода нажмите цифру ячейки поля\n";
    cout << "Для начала игры нажмите клавишу:";
    _getch();
 
}
bool input()
{
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            cout << "/ " << table[i][j] << ' ';
        }
        cout << '|';
        cout << endl;
    }
 
    cout << endl;
    if(step)
        cout << "Ходит " << name1  << " : ";
    else cout << "Ходит " << name2 << " : ";
 
    int n;
    cin >> n;
    if(n < 1 || n > 9)
        return false;
    int i,j;
 
    if(n%3 == 0)
    {
        i = n/3-1;
        j = 2;
    }
    else
    {
        i = n%3-1;
        j = n/3;
    }
 
    if(table[i][j] == 'O' || table[i][j] == 'X')
        return false;
 
    if(step)
    {
        table[i][j] = 'X';
        step = false;
    }
    else {table[i][j] = 'O'; step = true;}
    return true;
}
bool win()
{
    for(int i(0); i < 3; i++)
        if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
            return true;
 
        else
            if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
                return true;
 
            else if((table[0][0] == table[1][1]) && (table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0] == table[1][1] && table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0]))
return true;
    return false;
}
int main()
{
     setlocale(LC_ALL , "Russian");
     instruction();
     system("cls");
 
     cout << "Введите имя 1 игрока: ";
     cin.getline(name1,30);
     cout << "Введите имя 2 игрока: ";
     cin.getline(name2,30);
 
     srand(time(NULL));
     if(rand() & 1)
         step = true;
     else step = false;
 
     while(!win())
     {
         system("cls");
         if( !input() )
         {
             cout << " Вы ввели неверные данные, повторите!";
             _getch();
         }
     }
     system ("cls");
     if (step)
          cout << "Победил " << name2 << endl;
     else cout <<" Победил " << name1 << endl;
     
    _getch();
    return(0);
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.05.2017, 00:59
Ответы с готовыми решениями:

Написать AI для игры крестики-нолики (алгоритм самообучающегося бота)
Хочу написать подобным алгоритм, но даже не знаю с чего начать. В интернете перерыл все, ничего...

Алгоритм умной стратегии компьютера, крестики - нолики
Ребят, подкиньте идей реализации

Крестики-нолики - алгоритм для игры против ПК
Смотрю, уже только ленивый не сделал. Собственно это я. Вчера сел, написал свои 200 строк...

Написать игру «Крестики-нолики»
4. Написать игру «Крестики-нолики».

Написать регистрацию игроков к игре крестики-нолики
Здраствуйте!!! У меня возникла проблема при написании игры &quot;Хрестики нулики&quot; как мне в коде...

10
dailydose
661 / 207 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
Завершенные тесты: 1
14.05.2017, 06:37 2
https://github.com/croessmah/console_xo
1
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
21.05.2017, 18:48  [ТС] 3
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
#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
#include <Windows.h>
 
using namespace std;
 
char name1[30];
char name2[30];
char table[3][3];
bool step;
 
 
void instruction()
{
    printf("Выполнил курсовой проект студент группы 16ВВ2 Анастасин Вадим\n");
    printf("\t\t\tКрестики-Нолики\n\n");
    printf("Правила:\n");
    printf("Играет 2 игрока на поле 3х3\n");
    printf("Побеждает игрок, составивший выигрышную комбинацию\n");
    printf("Вид поля:\n\n");
                               printf("\t\t1 |2 |3\n");                           
                               printf("\t\t4 |5 |6\n");                          
                               printf("\t\t7 |8 |9\n");
 
    int l = 0;
 
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            
            table[i][j] = char(49+l);
            l++;
        }
    
    }
 
    printf("\nДля хода нажмите цифру ячейки поля\n");
    printf("Для начала игры нажмите клавишу:");
    _getch();
 
}
bool input()
{
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
 
            cout << "|" << table[i][j] << ' ';
        }
        printf("|");
        printf("\n");
    }
    printf("\n");
    if(step)
         printf("Ходит 1 игрок\n");
    else printf("Ходит 2 игрок\n");
 
    int n;
    cin >> n;
    if(n < 1 || n > 9)
        return false;
    int i,j;
 
    if(n%3 == 0)
    {
        i = n/3-1;
        j = 2;
    }
    else
    {
        j = n%3-1;
        i = n/3;
    }
 
    if(table[i][j] == 'O' || table[i][j] == 'X')
        return false;
 
    if(step)
    {
        table[i][j] = 'X';
        step = false;
    }
    else {table[i][j] = 'O'; step = true;}
    return true;
}
bool win()
{
    for(int i(0); i < 3; i++)
        if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
            return true;
 
        else
            if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
                return true;
 
            else if((table[0][0] == table[1][1]) && (table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0] == table[1][1] && table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0]))
return true;
    return false;
}
int main()
{
     setlocale(LC_ALL , "Russian");
     instruction();
     system("cls");
 
     printf("Введите имя 1 игрока: \n");
     cin.getline(name1,30);
     printf("Введите имя 2 игрока: \n");
     cin.getline(name2,30);
 
     srand(time(NULL));
     if(rand() & 1)
         step = true;
     else step = false;
 
     while(!win())
     {
         system("cls");
         if( !input() )
         {
            printf(" Вы ввели неверные данные,пожалуйста повторите!\n");
             _getch();
         }
     }
     system ("cls");
     if (step)
          printf("Победил 2 игрок\n");
     else printf("Победил 1 игрок\n");
     
    _getch();
    return(0);
}

0
MisterR
67 / 66 / 52
Регистрация: 28.10.2015
Сообщений: 388
Завершенные тесты: 3
21.05.2017, 19:15 4
Вадим0008, если нет победителя значит ничья
0
21.05.2017, 19:15
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
22.05.2017, 11:35  [ТС] 5
ну а как это написать) очень нужно
0
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
22.05.2017, 11:40  [ТС] 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
127
128
129
130
131
132
133
134
135
136
#include <iostream>
#include <conio.h>
#include <random>
#include <time.h>
#include <Windows.h>
 
using namespace std;
 
char name1[30];
char name2[30];
char table[3][3];
bool step;
 
 
void instruction()
{
    printf("Выполнил курсовой проект студент группы 16ВВ2 Анастасин Вадим\n");
    printf("\t\t\tКрестики-Нолики\n\n");
    printf("Правила:\n");
    printf("Играет 2 игрока на поле 3х3\n");
    printf("Побеждает игрок, составивший выигрышную комбинацию\n");
    printf("Вид поля:\n\n");
                               printf("\t\t1 |2 |3\n");                           
                               printf("\t\t4 |5 |6\n");                          
                               printf("\t\t7 |8 |9\n");
 
    int l = 0;
 
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
            
            table[i][j] = char(49+l);
            l++;
        }
    
    }
 
    printf("\nДля хода нажмите цифру ячейки поля\n");
    printf("Для начала игры нажмите клавишу:");
    _getch();
 
}
bool input()
{
    for(int i(0); i < 3; i++)
    {
        for(int j(0); j < 3; j++)
        {
 
            cout << "|" << table[i][j] << ' ';
        }
        printf("|");
        printf("\n");
    }
    printf("\n");
    if(step)
         printf("Ходит 1 игрок\n");
    else printf("Ходит 2 игрок\n");
 
    int n;
    cin >> n;
    if(n < 1 || n > 9)
        return false;
    int i,j;
 
    if(n%3 == 0)
    {
        i = n/3-1;
        j = 2;
    }
    else
    {
        j = n%3-1;
        i = n/3;
    }
 
    if(table[i][j] == 'O' || table[i][j] == 'X')
        return false;
 
    if(step)
    {
        table[i][j] = 'X';
        step = false;
    }
    else {table[i][j] = 'O'; step = true;}
    return true;
}
bool win()
{
    for(int i(0); i < 3; i++)
        if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
            return true;
 
        else
            if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
                return true;
 
            else if((table[0][0] == table[1][1]) && (table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0] == table[1][1] && table[0][0] == table[2][2]) || (table[0][2] == table[1][1] && table[0][2] == table[2][0]))
return true;
    return false;
}
int main()
{
     setlocale(LC_ALL , "Russian");
     instruction();
     system("cls");
 
     printf("Введите имя 1 игрока: \n");
     cin.getline(name1,30);
     printf("Введите имя 2 игрока: \n");
     cin.getline(name2,30);
 
     srand(time(NULL));
     if(rand() & 1)
         step = true;
     else step = false;
 
     while(!win())
     {
         system("cls");
         if( !input() )
         {
            printf(" Вы ввели неверные данные,пожалуйста повторите!\n");
             _getch();
         }
     }
     system ("cls");
     if (step)
          printf("Победил 2 игрок\n");
     else printf("Победил 1 игрок\n");
     
    _getch();
    return(0);
}
0
sk007
Life Builder
455 / 442 / 353
Регистрация: 12.01.2011
Сообщений: 1,594
Завершенные тесты: 6
22.05.2017, 11:56 7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char win()
{
    for(int i(0); i < 3; i++)
    {
        if((table[i][0] == table[i][1]) && (table[i][0] == table[i][2]))
            return table[i][0];
        
        if((table[0][i] == table[1][i]) && (table[0][i] == table[2][i]))
            return table[0][i];
    }
 
    if((table[0][0] == table[1][1]) && (table[0][0] == table[2][2]))
        return table[0][0];
 
    if(table[0][2] == table[1][1]&&table[1][1] == table[2][0])
        return table[0][2];
    
    return '\0';//Ничья
}
Ну или использовать тип bool?
0
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
22.05.2017, 12:00  [ТС] 8
использовать тип bool
0
Вадим0008
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 12
22.05.2017, 12:23  [ТС] 9
Переписал ваш код в проггу с типом bool всё равно как бы сказать игра должна завершиться уже нет свободных клеток для хода
0
Миниатюры
Написать алгоритм ничьей в крестики-нолики  
MrGluck
23.05.2017, 15:28
  #10
 Комментарий модератора 
Вадим0008,
Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
chizz
984 / 505 / 102
Регистрация: 19.03.2013
Сообщений: 3,108
Записей в блоге: 19
Завершенные тесты: 1
23.05.2017, 16:00 11
C++
1
throw std::runtime_error("приплыли...");
0
23.05.2017, 16:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.05.2017, 16:00

Ищу программиста который сможет написать простую игру крестики нолики
Ищу программиста который сможет написать простую игру крестики нолики немного измененую скажу...

Алгоритм хода компьютера в игре "Крестики-Нолики" на неограниченном поле
Крестики нолики на неограниченном поле

Крестики-нолики: как написать код для того, чтобы программа могла объявить победителя?
И да, поле 5 на 5. Сам код: #include &lt;iostream&gt; #include &lt;locale.h&gt; #include &lt;Windows.h&gt; using...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru