Помогите пожалуйста. где в проверке на выигрыш ошибка. да и так где есть ошибки ? include include include include include using namespace std; using namespace std; char table[3][3]; char name1[30]; char name2[30]; bool step; bool input() { for (int i(0); i<3; i++)<br> { for (int j(0); j<3; j++)<br> { cout << "|" << table[i][j] << ' ';<br> } cout << '|';<br> cout << endl;<br> } if (step) cout << "ходит " << name1 << " : ";<br> else cout << "ходит " << name2 << " : ";<br> 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++)<br> if ((table[i][0] == table[i][1]) && (table[i][0] == table[i][2])) return true; else { for (int j(0); j < 3; j++) { if ((table[i][j] == table[1][i]) && (table[i][j] == table[2][i])) return true; } } 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, "rus"); cout << "\t\t*** крестики нолики ***\n\n";<br> cout << "Правила\n";<br> cout << "играют два игрока на поле 3х3\n";<br> cout << "побеждает тот кто составит выигрышную комбинацию";<br> cout << "вид поля\n\n";<br> int l = 0; for (int i(0); i<3; i++)<br> { for (int j(0); j<3; j++)<br> { cout << "|" << l + 1 << ' ';<br> table[i][j] = char(49 + l); l++; } cout << "|";<br> cout << endl;<br> } cout << "\nДля хода нажмите на цифру ячейки поля\n";<br> cout << "Для начала игры нажмите клавишу";<br> int i = 0; cout << "ведите имя 1 игрока за X: ";<br> cin.getline(name1, 30); cout << "ведите имя 2 игрока за 0: ";<br> cin.getline(name2, 30); while (!win()) { if (i == 9 && !(win())) { cout << "ничия!! \n";<br> return -1; } system("cls"); if (!input()) { cout << "вы вели неверные данные!";<br> } else i++; } system("cls"); if (step) cout << "победил " << name2 << endl;<br> else cout << "победил " << name1 << endl;
bool input(int 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 (xod) { table[i][j] = 'X'; xod = false; } else { table[i][j] = 'O'; xod = true; } return true;}
А в основной программе:
cout << "\tВведите Имя 2-го. игрока за 0: "; cin.getline(nam2, 30); bool L = false; do { system("cls"); if (xod) cout << "\tХодит X " << nam1 << " : \n\n"; else cout << "\tХодит 0 " << nam2 << " : \n\n"; for (int i(0); i<3; i++) { cout << " "; for (int j(0); j<3; j++) { cout << "|" << table[i][j] << ' '; } cout << '|'; cout << endl; } if (L) cout << "вы вели неверные данные!"; L = !input((_getch() - '0')); if (i == 9 && !(win())) { cout << "\tНичия!! \n"; return -1; } else i++; } while (!win());
Но лучше всё переписать...
Отдельно ввод, отдельно перерисовка экрана, и делать примерно так:do{bool L = !Ввод();ПерерисовкаЭкрана();if (L) СообщениеОбОшибке;}while(!win())
В функцию можно передавать количество ходов, и как только их станет 9 - ничья, чтоб цикл не засорять
В функцию win()
Спасибо Огромное. завтра попробую. завтра на дачу и сдавать работу завтра. постараюсь успеть.
Свой вариант я выложу, с использованием "_getch()"
=))
Большущее Спасибо!