Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/15: Рейтинг темы: голосов - 15, средняя оценка - 4.73
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
1

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

27.07.2014, 19:02. Показов 2829. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
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 минут
все уже нашел ошибку)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.07.2014, 19:02
Ответы с готовыми решениями:

Нужно разобраться как работает код. Игра крестики нолики в консоли
Помогите пожалуйста разобраться как работает код. Нужно разобраться как работают сами процедуры....

Крестики нолики, не работает проверка
Всем привет, решил написать тиктакто игру или крестики нолики, не работает проверка на...

Ошибка в проверке окончания игры в крестики нолики
Сап, форумчане. Написал следующую проверку на окончание игры в крестики-нолики: function...

Крестики vs Нолики (игра)
Привет. Решил попробовать сделать Крестики нолики на паскале, но т.к. я только начал изучать...

12
30 / 30 / 12
Регистрация: 21.05.2012
Сообщений: 448
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");
}
1
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
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';
    }
0
What a waste!
1608 / 1300 / 180
Регистрация: 21.04.2012
Сообщений: 2,729
27.07.2014, 20:13 4
Цитата Сообщение от shukaka Посмотреть сообщение
C++
1
mas[1][1]='x'
Тут присваивание, а не сравнение, если что.
0
30 / 30 / 12
Регистрация: 21.05.2012
Сообщений: 448
27.07.2014, 20:15 5
shukaka, а так ?
C++
1
2
3
4
if(mas[1][1]=='x')
    {
        mas[1][1]='o';
    }
0
0 / 0 / 5
Регистрация: 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;
}
0
4064 / 3318 / 924
Регистрация: 25.03.2012
Сообщений: 12,495
Записей в блоге: 1
28.07.2014, 17:44 7
Ярослав Никитин, это вообще какой-то левый код! У автора этого нет!
shukaka, mas[1][1]==mas[1][3]==mas[1][5] так сравнивать нельзя! Я поражаюсь! Я бы даже, если бы нетвёрдо знал операторы в С++, не додумался бы так написать. В своё время возможность писать a=b=c меня шокировала!
А тут, мало того, что тройное использзование оператора, так ещё и совершенно неуместное! Операторы в яззыке Си выполняются последовательно, в порядке приоритета, а не как в математике!
0
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
28.07.2014, 18:37  [ТС] 8
так я как бы исправил эту глупость

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

Добавлено через 59 секунд
так побывал тоже....игнорит просто условие
0
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
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");
}
как сделать так что если я ставлю крестик то на его место нолик уже нельзя поставить???
0
30 / 30 / 12
Регистрация: 21.05.2012
Сообщений: 448
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,

Не по теме:

ошибся

0
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
28.07.2014, 21:46  [ТС] 11
неа не пашит(
0
30 / 30 / 12
Регистрация: 21.05.2012
Сообщений: 448
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;
1
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
28.07.2014, 21:53  [ТС] 13
все я смог решить эту проблему
)
0
28.07.2014, 21:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.07.2014, 21:53
Помогаю со студенческими работами здесь

Игра крестики-нолики
Приветствую! Есть простенькая игра крестики-нолики. В ней сейчас можно делать бесконечное...

Игра крестики-нолики
Здравствуйте, ребята! Вообщем такое задание: Создать класс типа игра крестики-нолики. Поле класса...

игра крестики нолики
пытаюсь сделать игру крестики нолики. извиняюсь сразу за корявый код) // Example program...

Игра Крестики-нолики
ПОмогите, пожалуйста написать игру в крестики- нолики.

Игра «Крестики-нолики»
как написать программу Игра «Крестики-нолики» для поля 3х3 на Python

Игра крестики-нолики
Кто может помочь с разработкой игры крестики-нолики с полем 10х10, когда играют 2 человека,...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru