Форум программистов, компьютерный форум CyberForum.ru

Игра "Крестики нолики", почему не работает проверка окончания? - C++

Восстановить пароль Регистрация
 
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
27.07.2014, 19:02     Игра "Крестики нолики", почему не работает проверка окончания? #1
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
#include <iostream>
using namespace std;
int main ()
{
    int a,k=0;
    char mas[7][7];
    while(k<10)
    {
 
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<7;j++)
        {
            if(j==0||j==2||j==4||j==6)
                mas[i][j]='=';
            if(i==0||i==2||i==4||i==6)
                mas[i][j]='=';
                if(mas[i][j]!='='&&mas[i][j]!='x'&&mas[i][j]!='o')
                mas[i][j]=' ';
            cout<<mas[i][j];
        }
        cout<<endl;
    }
    
    if(mas[1][1]==mas[1][3]==mas[1][5])
    {
        cout<<"Victory"<<endl;
            break;
    }
    else if(mas[3][1]==mas[3][3]==mas[3][5])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]==mas[5][3]==mas[5][5])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]==mas[3][3]==mas[5][5])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]==mas[3][3]==mas[1][5])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]==mas[3][1]==mas[5][1])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][3]==mas[3][3]==mas[5][3])
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][5]==mas[3][5]==mas[5][5])
       {
        cout<<"Victory"<<endl;
            break;
       }
    cin>>a; 
    switch(a)
    {
        case 1:
            cin>>mas[1][1];
            break;
        case 2:
            cin>>mas[1][3];
            break;
        case 3:
            cin>>mas[1][5];
            break;
        case 4:
            cin>>mas[3][1];
            break;
        case 5:
            cin>>mas[3][3];
            break;
        case 6:
            cin>>mas[3][5];
            break;
        case 7:
            cin>>mas[5][1];
            break;
        case 8:
            cin>>mas[5][3];
            break;
        case 9:
            cin>>mas[5][5];
            break;
        default :
                cout<<"za polem!!!!";
    }
    system("cls");
    k++;
    
    }
    
    system("pause");
}
почему не работает условие победы(если 3 одинаковых элемента массива)????

Добавлено через 18 минут
все уже нашел ошибку)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2014, 19:02     Игра "Крестики нолики", почему не работает проверка окончания?
Посмотрите здесь:

C++ Cетевая игра "крестики-нолики"
C++ Игра крестики-нолики
C++ Исходник "Крестики нолики"
Игра "Крестики-нолики" C++
C++ Не рабочий ИИ в программе "Крестики-Нолики"
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
druidich
 Аватар для druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 428
27.07.2014, 19:56     Игра "Крестики нолики", почему не работает проверка окончания? #2
shukaka, строку 25 поменяй на
C++
1
        if (((mas[1][1] == mas[1][3]) && (mas[1][1] == mas[1][5])) && mas[1][1] != ' ')
Добавлено через 9 минут
shukaka,
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
#include <iostream>
using namespace std;
int main()
{
    int a, k = 0;
    char mas[7][7];
    while (k < 10)
    {
        //рисуем поле
        for (int i = 0; i < 7; i++)
        {
            for (int j = 0; j < 7; j++)
            {
                if (j == 0 || j == 2 || j == 4 || j == 6)
                    mas[i][j] = '=';
                if (i == 0 || i == 2 || i == 4 || i == 6)
                    mas[i][j] = '=';
                if (mas[i][j] != '='&&mas[i][j] != 'x'&&mas[i][j] != 'o')
                    mas[i][j] = ' ';
                cout << mas[i][j];
            }
            cout << endl;
        }
        //////////
 
        if ((mas[1][1] == mas[1][3]) && (mas[1][1] == mas[1][5]) && (mas[1][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[3][1] == mas[3][3]) && (mas[3][1] == mas[3][5]) && (mas[3][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[5][1] == mas[5][3]) && (mas[5][1] == mas[5][5]) && (mas[5][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[1][1] == mas[3][3]) && (mas[1][1] == mas[5][5]) && (mas[1][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[5][1] == mas[3][3]) && (mas[5][1] == mas[1][5]) && (mas[5][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[1][1] == mas[3][1]) && (mas[1][1] == mas[5][1]) && (mas[1][1] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[1][3] == mas[3][3]) && (mas[1][3] == mas[5][3]) && (mas[1][3] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        else if ((mas[1][5] == mas[3][5]) && (mas[1][5] == mas[5][5]) && (mas[1][5] != ' '))
        {
            cout << "Victory" << endl;
            break;
        }
        cin >> a;
        switch (a)
        {
        case 1:
            cin >> mas[1][1];
            break;
        case 2:
            cin >> mas[1][3];
            break;
        case 3:
            cin >> mas[1][5];
            break;
        case 4:
            cin >> mas[3][1];
            break;
        case 5:
            cin >> mas[3][3];
            break;
        case 6:
            cin >> mas[3][5];
            break;
        case 7:
            cin >> mas[5][1];
            break;
        case 8:
            cin >> mas[5][3];
            break;
        case 9:
            cin >> mas[5][5];
            break;
        default:
            cout << "za polem!!!!";
        }
        system("cls");
        k++;
 
    }
 
    system("pause");
}
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
27.07.2014, 20:11  [ТС]     Игра "Крестики нолики", почему не работает проверка окончания? #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
#include <iostream>
using namespace std;
int main ()
{
    int a,k=0;
    char mas[7][7];
    while(k<10)
    {
 
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<7;j++)
        {
            if(j==0||j==2||j==4||j==6)
                mas[i][j]='=';
            if(i==0||i==2||i==4||i==6)
                mas[i][j]='=';
                if(mas[i][j]!='='&&mas[i][j]!='x'&&mas[i][j]!='o')
                mas[i][j]=' ';
            cout<<mas[i][j];
        }
        cout<<endl;
    }
    
    if(mas[1][1]!=' '&&mas[1][3]!=' '&&mas[1][5]!=' ')
    {
        cout<<"Victory"<<endl;
            break;
    }
    else if(mas[3][1]!=' '&&mas[3][3]!=' '&&mas[3][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]!=' '&&mas[5][3]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]!=' '&&mas[3][3]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]!=' '&&mas[3][3]!=' '&&mas[1][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]!=' '&&mas[3][1]!=' '&&mas[5][1]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][3]!=' '&&mas[3][3]!=' '&&mas[5][3]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][5]!=' '&&mas[3][5]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    cin>>a; 
    switch(a)
    {
        case 1:
            cin>>mas[1][1];
            break;
        case 2:
            cin>>mas[1][3];
            break;
        case 3:
            cin>>mas[1][5];
            break;
        case 4:
            cin>>mas[3][1];
            break;
        case 5:
            cin>>mas[3][3];
            break;
        case 6:
            cin>>mas[3][5];
            break;
        case 7:
            cin>>mas[5][1];
            break;
        case 8:
            cin>>mas[5][3];
            break;
        case 9:
            cin>>mas[5][5];
            break;
        default :
                cout<<"za polem!!!!";
    }
    
    
    if(mas[1][1]=='x')
    {
        mas[1][1]!='o';
    }
    system("cls");
    k++;
    
    }
    
    system("pause");
}
почему программа игнорит это условие???
C++
1
2
3
4
if(mas[1][1]='x')
    {
        mas[1][1]!='o';
    }
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
27.07.2014, 20:13     Игра "Крестики нолики", почему не работает проверка окончания? #4
Цитата Сообщение от shukaka Посмотреть сообщение
C++
1
mas[1][1]='x'
Тут присваивание, а не сравнение, если что.
druidich
 Аватар для druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 428
27.07.2014, 20:15     Игра "Крестики нолики", почему не работает проверка окончания? #5
shukaka, а так ?
C++
1
2
3
4
if(mas[1][1]=='x')
    {
        mas[1][1]='o';
    }
Ярослав Никитин
 Аватар для Ярослав Никитин
0 / 0 / 2
Регистрация: 13.04.2014
Сообщений: 70
28.07.2014, 09:28     Игра "Крестики нолики", почему не работает проверка окончания? #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
137
138
139
140
#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()
{
    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
    {
        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]))
                return true;
    
        
    return false;
}
 
int main()
{
    setlocale(LC_ALL , "Russian");
 
 
    instruction();
    system("cls");
    int i = 0;
 
    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())
    {
        if(i == 9)
        {
            cout << "Ничья!!";
            _getch();
            return -1;
        }
        system("cls");
        if( !input() )
        {
            cout << "Вы ввели неверные данные повторите!";
            _getch();
        }
        i++;
    }
 
    system("cls");
    if(step)
        cout << "Победил " << name2 << endl;
    else cout << "Победил " << name1 << endl;
 
 
    _getch();
    return 0;
}
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
28.07.2014, 17:44     Игра "Крестики нолики", почему не работает проверка окончания? #7
Ярослав Никитин, это вообще какой-то левый код! У автора этого нет!
shukaka, mas[1][1]==mas[1][3]==mas[1][5] так сравнивать нельзя! Я поражаюсь! Я бы даже, если бы нетвёрдо знал операторы в С++, не додумался бы так написать. В своё время возможность писать a=b=c меня шокировала!
А тут, мало того, что тройное использзование оператора, так ещё и совершенно неуместное! Операторы в яззыке Си выполняются последовательно, в порядке приоритета, а не как в математике!
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
28.07.2014, 18:37  [ТС]     Игра "Крестики нолики", почему не работает проверка окончания? #8
так я как бы исправил эту глупость

Добавлено через 1 минуту
написано ведь нашел ошибку)

Добавлено через 59 секунд
так побывал тоже....игнорит просто условие
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
28.07.2014, 21:17  [ТС]     Игра "Крестики нолики", почему не работает проверка окончания? #9
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
#include <iostream>
using namespace std;
int main ()
{
    int a,k=0,c;
    char mas[7][7];
    while(k<10)
    {
        
 
    for(int i=0;i<7;i++)
    {
        for(int j=0;j<7;j++)
        {
            if(j==0||j==2||j==4||j==6)
                mas[i][j]='=';
            if(i==0||i==2||i==4||i==6)
                mas[i][j]='=';
                if(mas[i][j]!='='&&mas[i][j]!='x'&&mas[i][j]!='o')
                mas[i][j]=' ';
            cout<<mas[i][j];
        }
        cout<<endl;
    }
    
    if(mas[1][1]!=' '&&mas[1][3]!=' '&&mas[1][5]!=' ')
    {
        cout<<"Victory"<<endl;
            break;
    }
    else if(mas[3][1]!=' '&&mas[3][3]!=' '&&mas[3][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]!=' '&&mas[5][3]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]!=' '&&mas[3][3]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[5][1]!=' '&&mas[3][3]!=' '&&mas[1][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][1]!=' '&&mas[3][1]!=' '&&mas[5][1]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][3]!=' '&&mas[3][3]!=' '&&mas[5][3]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    else if(mas[1][5]!=' '&&mas[3][5]!=' '&&mas[5][5]!=' ')
       {
        cout<<"Victory"<<endl;
            break;
       }
    
    cin>>a; 
    switch(a)
    {
        case 1:
        
            cin>>mas[1][1];
            break;
        case 2:
            cin>>mas[1][3];
            break;
        case 3:
            cin>>mas[1][5];
            break;
        case 4:
            cin>>mas[3][1];
            break;
        case 5:
            cin>>mas[3][3];
            break;
        case 6:
            cin>>mas[3][5];
            break;
        case 7:
            cin>>mas[5][1];
            break;
        case 8:
            cin>>mas[5][3];
            break;
        case 9:
            cin>>mas[5][5];
            break;
        default :
                cout<<"za polem!!!!";
    }
    system("cls");
    k++;
    
    }
    
    system("pause");
}
как сделать так что если я ставлю крестик то на его место нолик уже нельзя поставить???
druidich
 Аватар для druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 428
28.07.2014, 21:45     Игра "Крестики нолики", почему не работает проверка окончания? #10
shukaka, в switch добавь для каждой ячейки массива
C++
1
2
3
4
case 1:
            if (mas[1][1] != 'x' || mas[1][1] != '0')
            cin >> mas[1][1];
            break;
Добавлено через 7 минут
shukaka,

Не по теме:

ошибся

shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
28.07.2014, 21:46  [ТС]     Игра "Крестики нолики", почему не работает проверка окончания? #11
неа не пашит(
druidich
 Аватар для druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 428
28.07.2014, 21:49     Игра "Крестики нолики", почему не работает проверка окончания? #12
shukaka,
C++
1
2
3
4
5
6
case 1:
            if (mas[1][1]==' '){
 
                cin >> mas[1][1];
            }
            break;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 21:53     Игра "Крестики нолики", почему не работает проверка окончания?
Еще ссылки по теме:

C++ Объяснить программу, "Крестики-нолики"
Сделать статистику игроков в игре "Крестики-нолики" C++
Консольные "крестики-нолики" C++

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

Или воспользуйтесь поиском по форуму:
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 184
28.07.2014, 21:53  [ТС]     Игра "Крестики нолики", почему не работает проверка окончания? #13
все я смог решить эту проблему
)
Yandex
Объявления
28.07.2014, 21:53     Игра "Крестики нолики", почему не работает проверка окончания?
Ответ Создать тему
Опции темы

Текущее время: 23:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru