Помогите пожалуйста. где в проверке ** выигрыш ошибка. да и так где есть ошибки ? include...

0 голосов
67 просмотров

Помогите пожалуйста. где в проверке на выигрыш ошибка. да и так где есть ошибки ?
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;


Информатика (227 баллов) | 67 просмотров
0

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;}

0

А в основной программе:

0

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());

0

Но лучше всё переписать...

0

Отдельно ввод, отдельно перерисовка экрана, и делать примерно так:do{bool L = !Ввод();ПерерисовкаЭкрана();if (L) СообщениеОбОшибке;}while(!win())

0

В функцию можно передавать количество ходов, и как только их станет 9 - ничья, чтоб цикл не засорять

0

В функцию win()

0

Спасибо Огромное. завтра попробую. завтра на дачу и сдавать работу завтра. постараюсь успеть.

0

Свой вариант я выложу, с использованием "_getch()"

0

=))

Дан 1 ответ
0 голосов
Правильный ответ
Visual Studio 2015
Код Visual C++, Win32, Консоль:


#include "stdafx.h"
#include
#include
#include
#include
(6.6k баллов)
0

Большущее Спасибо!