Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 187
#1

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

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

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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.07.2014, 19:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Игра "Крестики нолики", почему не работает проверка окончания? (C++):

Игра "Крестики-нолики": правильно выстроить поле - C++
Я очень сильно начинающий программист. Поэтому попрошу сразу не кидатся что я делаю не так и как так можно.. Делаю игру Крестики нолики....

Игра "Крестики-нолики" формат 5х5 - C++
Есть данный код игры (позаимствован у юзера Fixer 84), но с массивом 3х3. Нужно сделать 5х5, суть я примерно понял, но не могу это...

Cетевая игра "крестики-нолики" - C++
Помогите, на курсовой задали, сделать сетевую игру крестики-нолики в консоли, нужно сделать сервер и клиенты. Там необходимо создать...

Игра "Крестики-нолики" - C++
Помогите дописать программу, чтобы выводило, кто победил и может исправить некоторые недочеты, которые присутствуют в программе. Также...

Игра "Крестики-нолики" - C++
Доброго времени суток. Нуждаюсь в помощи! Я написал код игры &quot;Крестики-нолики&quot; по книге и при выборе чем я буду играть (Х или О)...

Игра "Крестики - нолики" - C++
Всем добрый вечер,вот пишу игру крестики нолики,и столкнулся с проблемой,можете подсказать ,вот исходный код: #include &lt;iostream&gt;...

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

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

Добавлено через 59 секунд
так побывал тоже....игнорит просто условие
0
shukaka
4 / 4 / 2
Регистрация: 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
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
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
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 187
28.07.2014, 21:46  [ТС] #11
неа не пашит(
0
druidich
30 / 30 / 4
Регистрация: 21.05.2012
Сообщений: 440
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
shukaka
4 / 4 / 2
Регистрация: 09.03.2014
Сообщений: 187
28.07.2014, 21:53  [ТС] #13
все я смог решить эту проблему
)
0
28.07.2014, 21:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.07.2014, 21:53
Привет! Вот еще темы с ответами:

Сделать статистику игроков в игре "Крестики-нолики" - C++
Доброго времени суток! Вот, решил для курсовой работы написать игру Крестики-нолики. Подскажите, как сделать статистику игроков? Т.е.,...

Создать графический интерфейс (GUI) для игры "Крестики-нолики" - C++
#include &lt;stdio.h&gt; #include &lt;string.h&gt; char board={}; void clearscreen(void){ for(int i = 0; i&lt;3; i++) ...

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

Исправить код игры "Крестики-нолики" - C++
игру 'крестики нолики' с++ с помащу функций пример(не работаєт) #include &lt;iostream&gt; using namespace std; bool Revizor(char board) ...


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

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

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