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

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

14.05.2017, 00:59. Просмотров 541. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.05.2017, 00:59
Ответы с готовыми решениями:

Автоматический перезапуск игры "Крестики - нолики" в случае победы или ничьей
Автоматический перезапуск игры в случае победы или ничьи(Крестики нолики)

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

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

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

10
665 / 211 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
14.05.2017, 06:37 2
https://github.com/croessmah/console_xo
1
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 14
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
68 / 67 / 52
Регистрация: 28.10.2015
Сообщений: 388
21.05.2017, 19:15 4
Вадим0008, если нет победителя значит ничья
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 14
22.05.2017, 11:35  [ТС] 5
ну а как это написать) очень нужно
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 14
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
Life Builder
519 / 487 / 372
Регистрация: 12.01.2011
Сообщений: 1,705
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
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 14
22.05.2017, 12:00  [ТС] 8
использовать тип bool
0
0 / 0 / 0
Регистрация: 24.01.2017
Сообщений: 14
22.05.2017, 12:23  [ТС] 9
Переписал ваш код в проггу с типом bool всё равно как бы сказать игра должна завершиться уже нет свободных клеток для хода
0
Миниатюры
Написать алгоритм ничьей в крестики-нолики  
MrGluck
23.05.2017, 15:28
  #10
 Комментарий модератора 
Вадим0008,
Запрещено размещать тему в нескольких подразделах одного раздела одновременно (кросспостинг), а также дублировать тему в одном разделе.
0
988 / 511 / 102
Регистрация: 19.03.2013
Сообщений: 3,113
Записей в блоге: 19
23.05.2017, 16:00 11
C++
1
throw std::runtime_error("приплыли...");
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.05.2017, 16:00

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

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

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

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


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

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

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