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

Крестики-нолики (не могу отследить ошибку) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задача поиска множественных путей в графе http://www.cyberforum.ru/cpp-beginners/thread1494032.html
Добрый день. Возникла задача поиска множественных путей в графе. Задача объемная и по объему вычислений и по памяти. По моему разумению задача может быть хорошо распараллелена. Решил использовать многопоточность на C++ (VS 2010 х64). Написал тест с использованием API-шных функций по добавлению в vector элементов внутри каждого потока. Вроде как все работает без ошибок. Но возникло несколько...
C++ Преобразование hwnd в int Знаю что тема уже заезжена и полно подобных обсуждений, но не смог применить к своему либо не подошло. Требуется получить из edit и записать в другой модуль числа. Написал код, он работает в идеальных условиях, но если ввести что то подобное "-12е4", то на выходе получу число "12". Написал ещё проверку на ввод не числа, но она работает если ввести только не числа, при вводе чисел и букв... http://www.cyberforum.ru/cpp-beginners/thread1494031.html
Int выходит за пределы C++
Добрый день!Проблема в следующем. Работаю с числами аля 13045652312. И нахожу остаток от деления. Но int не в ходит в пределы. Если пишу допустим k=pow(x,c)%a; то пишет,что перегруженная функция. если пишу,что k=a%c; И пишу допустим тип double то выдаёт ошибку. Подскажите как сделать?
Флаг skipws C++
Как работает флаг cin.unsetf(ios::skipws), какие именно разделители он пропускает? Почему если я хочу считать строку с пробелами, то считает только до пробела?
C++ Вывести на экран таблицу символов в формате «ASCII-код – символ» http://www.cyberforum.ru/cpp-beginners/thread1493996.html
Не понимаю, как делать это задание, уже весь интернет перерыл.
C++ Решение матричного уравнения AX=B Помогите пожалуйста! Нужна программа для решения матричного уравнения AX=B подробнее

Показать сообщение отдельно
_UnReal
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 23

Крестики-нолики (не могу отследить ошибку) - C++

06.07.2015, 17:34. Просмотров 230. Ответов 7
Метки (Все метки)

Проблема заключается в том, что при ходе (не важно компьютера или моего), ход идет двойной. Ставится 2 крестика или 2 нолика сразу и я не могу понять в чём проблема

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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <conio.h>
#include <iostream>
#include <time.h>
 
using namespace::std;
 
bool Select;
int HumanMoveX, HumanMoveY, BotMoveX, BotMoveY, Field[2][2];
 
void Fill(){
    for (int i(0); i <= 2; i++){
        for (int j(0); j <= 2; j++)
            Field[i][j] = 0;
    }
}
void FieldDraw(){
    system("cls");
    for (int i(0); i <= 2; i++){
        for (int j(0); j <= 2; j++){
            if (Field[i][j] == 0)
                cout << " . ";
            else if (Field[i][j] == 1)
                cout << " X ";
            else if (Field[i][j] == 2)
                cout << " O ";
        }
        cout << endl;
    }
}
bool Selection(){
    cout << "*****Выберите O или X(0 или 1)*****" << endl;
    cin >> Select;
    return Select;
}
void HumanMove(){
    cout << "Ваш ход!" << endl;
    cin >> HumanMoveX >> HumanMoveY;
    if (Select == true)
        Field[HumanMoveX][HumanMoveY] = 1;
    if (Select == false)
        Field[HumanMoveX][HumanMoveY] = 2;
    FieldDraw();
}
void BotMove(){
    BotMoveY = rand() % 3;
    BotMoveX = rand() % 3;
    while (true){
        if (Field[BotMoveX][BotMoveY] != 0){
            BotMoveY = rand() % 3;
            BotMoveX = rand() % 3;
        }
        else break;
    }
 
    if (Select == true)
        Field[BotMoveX][BotMoveY] = 2;
    else
        Field[BotMoveX][BotMoveY] = 1;
    
FieldDraw();
}
int CheckWin(){
    int k = 0;
    //Проверка по строкам
    for (int i(0); i <= 2; i++){
        if ((Field[i][0] == 2) && (Field[i][1] == 2) && (Field[i][2] == 2))
            return 2;
        if ((Field[i][0] == 1) && (Field[i][1] == 1) && (Field[i][2] == 1))
            return 1;
    }
    //Проверка по столбцам
    for (int i(0); i <= 2; i++){
        if ((Field[0][i] == 2) && (Field[1][i] == 2) && (Field[2][i] == 2))
            return 2;
        if ((Field[0][i] == 1) && (Field[1][i] == 1) && (Field[2][i] == 1))
            return 1;
    }
    //Проверка главной диагонали
    if ((Field[0][0] == 1) && (Field[1][1] == 1) && (Field[2][2] == 1))
        return 1;
    if ((Field[0][0] == 2) && (Field[1][1] == 2) && (Field[2][2] == 2))
        return 2;
    //Проверка побочной диагонали
    if ((Field[0][2] == 1) && (Field[1][1] == 1) && (Field[2][0] == 1))
        return 1;
    if ((Field[0][2] == 2) && (Field[1][1] == 2) && (Field[2][0] == 2))
        return 2;
    //Проверка на ничью
    for (int i(0); i <= 2; i++){
        for (int j(0); j <= 2; j++)
            if (Field[i][j] != 0)
                k++;
    }
    if (k == 9)
        return 3;
    else return 0;
}
 
int main(){
    setlocale(LC_ALL, "Russian");
    srand(time(NULL));
    Fill();
 
    if (Selection()){
        while (true){
            FieldDraw();
 
            HumanMove();
            if (CheckWin() == 1){
                cout << "Победил игрок!" << endl;
                break;
            }
            else if (CheckWin() == 2){
                cout << "Победил компьютер!" << endl;
                break;
            }
            else if (CheckWin() == 3){
                cout << "Ничья!" << endl;
                break;
            }
 
            BotMove();
            if (CheckWin() == 1){
                cout << "Победил игрок!" << endl;
                break;
            }
            else if (CheckWin() == 2){
                cout << "Победил компьютер!" << endl;
                break;
            }
            else if (CheckWin() == 3){
                cout << "Ничья!" << endl;
                break;
            }
        }
    }
    else 
        while (true){
            FieldDraw();
 
            BotMove();
            if (CheckWin() == 2){
                cout << "Победил игрок!" << endl;
                break;
            }
            else if (CheckWin() == 1){
                cout << "Победил компьютер!" << endl;
                break;
            }
            else if (CheckWin() == 3){
                cout << "Ничья!" << endl;
                break;
            }
 
            HumanMove();
            if (CheckWin() == 2){
                cout << "Победил игрок!" << endl;
                break;
            }
            else if (CheckWin() == 1){
                cout << "Победил компьютер!" << endl;
                break;
            }
            else if (CheckWin() == 3){
                cout << "Ничья!" << endl;
                break;
            }
 
            
        }
    _getch();
    return 0;
}
Функция Select - выбор игры за крестики или нолики(от неё зависит вывод). Бот ходит на рандом(проверка, есть ли в клетке что-нибудь, если да, то генерирует новое значение)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru