Спойлер:#include
using namespace std;
void vivod()
{
system("cls");
int m[9] = { '-', '-', '-', '-', '-', '-', '-', '-', '-' };
cout << "--- = free kletka" << endl;
cout << "Pole : " << endl;
cout<< "-" << 1 << "-" << "|" << "-" << 2 << "-" << "|" << "-" << 3 << "-" << endl;
cout << "-" << 4 << "-" << "|" << "-" << 5 << "-" << "|" << "-" << 6 << "-" << endl;
cout << "-" << 7 << "-" << "|" << "-" << 8 << "-" << "|" << "-" << 9 << "-" << endl;
cout << "\n";
cout << "sityacia v igre:" << endl;
cout << "-" << m[0] << "-" << "|" << "-" << m[1] << "-" << "|" << "-" << m[2] << "-" << endl;
cout << "-" << m[3] << "-" << "|" << "-" << m[4] << "-" << "|" << "-" << m[5] << "-" << endl;
cout << "-" << m[6] << "-" << "|" << "-" << m[7] << "-" << "|" << "-" << m[8] << "-" << endl;
cout << "\n";
}
void shag(int hod)
{
int nomer;
if (hod == 1) cout << "igrok 1 hodit" << endl;
else cout << "igrok 2 hodit" << endl;
cout << "vvedite yacheiku " ;
cin >> nomer;
cout << endl;
while (nomer > 9 || nomer < 1 || m[nomer-1] == 'X' || m[nomer - 1] == '0') {
cout << "vvedite CORRECT number" << endl;
cin >> nomer;
cout << endl;
}
if (nomer == 1) m[nomer - 1] = 'X';
else m[nomer - 1] = '0';
}
int main()
{
char p1, p2;
cout << "Vvedite imya pervogo igroka" << endl;
cin >> p1;
cout << "vvedite imeya vtorogo igroka" << endl;
cin >> p2;
vivod();
for (int move = 1; move <= 9; move++)
{
if (move % 2) shag(1);
else shag(2);
vivod();
}
}
в функции SHAG у меня почему-то не читается массив
Он у меня обозначен в маине, но не определяется в функции, как быть ?
Jazz529 сказал(а):↑вот не понял сейчас
объясни, пожалуйста, хочу понят ьв чем дело
и как фиксНажмите, чтобы раскрыть...
Почитай чем отличаются глобальные переменные от локальных.
Массив объявленный внутри одной функции не будет доступен другой, потому что у каждой функции свой участок памяти виден.
Глобальные переменные не рекомендуются для больших проектов, да и в небольших программах тоже могут баги вылезать.
Всё зависит от логики в программе.
Если ты этот массив планируешь заполнять черточками только 1 раз за всю программу, то просто поставь его после using namespace std;
Belonard сказал(а):↑Почитай чем отличаются глобальные переменные от локальных.
Массив объявленный внутри одной функции не будет доступен другой, потому что у каждой функции свой участок памяти виден.
Глобальные переменные не рекомендуются для больших проектов, да и в небольших программах тоже могут баги вылезать.
Всё зависит от логики в программе.
Если ты этот массив планируешь заполнять черточками только 1 раз за всю программу, то просто поставь его после using namespace std;Нажмите, чтобы раскрыть...
намеспейс стоит
черточки у меня выводятся , все ок
только я не пойму, что мне надо сделать, что бы работало там
У меня не читается в том моменте, где у идет проверка на валидность клетки, стоит ли там Х или 0
Если я объявляю массив в ИНТ, то тоже ничего
ungerfall сказал(а):↑Массив m объявлен внутри локальный области видимости (функция vivod). Для того, чтобы сделать его глобальным, можно объявить за пределами функций (int m[9]).Нажмите, чтобы раскрыть...
я не понимаю, как
Belonard сказал(а):↑лучше напиши идею, что должна делать программа, чтобы я дописал кусок кодаНажмите, чтобы раскрыть...
это только зародыш, но я хочу проверять части кода, что бы было без ошибок
игра крестики нолики
та функция отвечает за шаг игрока
то есть, в этой функции, ты вводишь номер клеточки, куда ты хочешь поставить, потом я Вайлом проверяю валидность ее, если все ок - то заменяю массив Х или 0
Jazz529 сказал(а):↑я не понимаю, какНажмите, чтобы раскрыть...
Jazz529 сказал(а):↑извини, я только учусь азам. я не мастерНажмите, чтобы раскрыть...
Ну так сначала прочитай что такое "переменная", "область видимости", "время жизни", "декларация", определение". Ты сейчас напоминаешь дотера который хочет играть ранкеды не зная что такое клавиатура и мышь, что с ними делать и куда тыкать. При чем вместо вопроса "Как включать комп, можно ли жмякать на кнопки, и что за эта байдень такая с проводом и двумя кнопками на коврике?" ты спрашиваешь "Что собирать гирокоптеру, чтобы не сильно проседать в лейте против ПЛ-а?"
Твоя функция shag не видит массив(т.к он объявлен у тебя внутри локальной функции vivod ), у тебя есть 2 выхода из данной ситуации: 1) Сделать массив глобальным и ввести его, например после using namespace std; 2)Передавать в твою функцию shag массив : void shag(int hod,int m[9]) и поменять обращении к функции if (move % 2) shag(1,m);Jazz529 сказал(а):↑в функции SHAG у меня почему-то не читается массив
Он у меня обозначен в маине, но не определяется в функции, как быть ?Нажмите, чтобы раскрыть...
else shag(2,m);
Archiballt сказал(а):↑Твоя функция shag не видит массив(т.к он объявлен у тебя внутри локальной функции vivod ), у тебя есть 2 выхода из данной ситуации: 1) Сделать массив глобальным и ввести его, например после using namespace std; 2)Передавать в твою функцию shag массив : void shag(int hod,int m[9]) и поменять обращении к функции if (move % 2) shag(1,m);
else shag(2,m);Нажмите, чтобы раскрыть...
аааааааааа, все
я забыл, записывали это, а я только что пересматривал и не увидел, спасибо большое
Jazz529 сказал(а):↑это только зародыш, но я хочу проверять части кода, что бы было без ошибок
игра крестики нолики
та функция отвечает за шаг игрока
то есть, в этой функции, ты вводишь номер клеточки, куда ты хочешь поставить, потом я Вайлом проверяю валидность ее, если все ок - то заменяю массив Х или 0Нажмите, чтобы раскрыть...
Что-то такую ересь даже на первом курсе не писал. Не совсем понимаю чего ты хочешь, но ты в массив int записываешь переменные типа char, потом ты считываешь переменные типа char и сравниваешь и с типом int.
Hairo сказал(а):↑Что-то такую ересь даже на первом курсе не писал. Не совсем понимаю чего ты хочешь, но ты в массив int записываешь переменные типа char, потом ты считываешь переменные типа char и сравниваешь и с типом int.Нажмите, чтобы раскрыть...
Спойлер:
#include
using namespace std;
char m[9] = { 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F' };
int win;
void vivod()
{
system("cls");
cout << "-F- = free kletka" << endl;
cout << "Pole : " << endl;
cout<< "-" << 1 << "-" << "|" << "-" << 2 << "-" << "|" << "-" << 3 << "-" << endl;
cout << "-" << 4 << "-" << "|" << "-" << 5 << "-" << "|" << "-" << 6 << "-" << endl;
cout << "-" << 7 << "-" << "|" << "-" << 8 << "-" << "|" << "-" << 9 << "-" << endl;
cout << "\n";
cout << "sityacia v igre:" << endl;
cout << "-" << m[0] << "-" << "|" << "-" << m[1] << "-" << "|" << "-" << m[2] << "-" << endl;
cout << "-" << m[3] << "-" << "|" << "-" << m[4] << "-" << "|" << "-" << m[5] << "-" << endl;
cout << "-" << m[6] << "-" << "|" << "-" << m[7] << "-" << "|" << "-" << m[8] << "-" << endl;
cout << "\n";
}
void shag(int hod)
{
int nomer;
if (hod == 1) cout << "igrok 1 hodit" << endl;
else cout << "igrok 2 hodit" << endl;
cout << "vvedite yacheiku " ;
cin >> nomer;
cout << endl;
while (nomer > 9 || nomer < 1 || m[nomer-1] == 'X' || m[nomer - 1] == '0') {
cout << "vvedite CORRECT number" << endl;
cin >> nomer;
cout << endl;
}
if (nomer == 1) m[nomer - 1] = 'X';
else m[nomer - 1] = '0';
}
char check()
{
for (int i = 0; i < 3; i++) {
if (m == m && m == m)
return m;
else if (m == m && m == m)
return m;
else if ((m[2] == m[4] && m[4] == m[6]) || (m[0] == m[4] && m[4] == m[8]))
return m;
return '-';
}
}
void result()
{
if (win == 'X') cout << "player 1 win!" << endl;
else if (win == '0') cout << "player 2 win!" << endl;
else cout << "nichya" << endl;
}
int main()
{
char win = '-';
char p1, p2;
cout << "Vvedite imya pervogo igroka" << endl;
cin >> p1;
cout << "vvedite imeya vtorogo igroka" << endl;
cin >> p2;
vivod();
for (int move = 1; move <= 9; move++)
{
if (move % 2) shag(1);
else shag(2);
vivod();
if (move >= 5) {
win = check();
if (win != '-')
break;
}
}
result();
}
практически работает, только у меня первый раз Х ставится, а остальнные нули.
и да, я затупил с инт и чар
Jazz529 сказал(а):↑это только зародыш, но я хочу проверять части кода, что бы было без ошибок
игра крестики нолики
та функция отвечает за шаг игрока
то есть, в этой функции, ты вводишь номер клеточки, куда ты хочешь поставить, потом я Вайлом проверяю валидность ее, если все ок - то заменяю массив Х или 0Нажмите, чтобы раскрыть...
Спойлер:
#include
using namespace std;
int m[9] = { 9, 9, 9, 9, 9, 9, 9, 9, 9 };
void vivod()
{
system("cls");
cout << "--- = free kletka" << endl;
cout << "Pole : " << endl;
cout<< "-" << 1 << "-" << "|" << "-" << 2 << "-" << "|" << "-" << 3 << "-" << endl;
cout << "-" << 4 << "-" << "|" << "-" << 5 << "-" << "|" << "-" << 6 << "-" << endl;
cout << "-" << 7 << "-" << "|" << "-" << 8 << "-" << "|" << "-" << 9 << "-" << endl;
cout << "\n";
cout << "sityacia v igre:" << endl;
cout << "-" << m[0] << "-" << "|" << "-" << m[1] << "-" << "|" << "-" << m[2] << "-" << endl;
cout << "-" << m[3] << "-" << "|" << "-" << m[4] << "-" << "|" << "-" << m[5] << "-" << endl;
cout << "-" << m[6] << "-" << "|" << "-" << m[7] << "-" << "|" << "-" << m[8] << "-" << endl;
cout << "\n";
}
void shag(int hod)
{
int nomer;
if (hod == 1) cout << "igrok 1 hodit" << endl;
else cout << "igrok 2 hodit" << endl;
cout << "vvedite yacheiku " << endl;
cin >> nomer;
while (nomer > 8 || nomer < 0 || m[nomer-1] == 'X' || m[nomer - 1] == 'O') {
cout << "vvedite CORRECT number" << endl;
cin >> nomer;
}
if (nomer == 1) m[nomer - 1] = 1;
else m[nomer - 1] = 0;
}
int main()
{
char p1, p2;
cout << "Vvedite imya pervogo igroka" << endl;
cin >> p1;
cout << "vvedite imeya vtorogo igroka" << endl;
cin >> p2;
vivod();
for (int move = 1; move <= 9; move++)
{
if (move % 2) shag(1);
else shag(2);
vivod();
}
system("pause");
return 0;
}
Ну вот смотри, у тебя имена игроков, считываются как char(т.е. длинной всего 1 символ), по
Если создаешь массив int, то и клади int в ячейки, иначе символ '0' будет туда записываться как число в кодировке системы(48)
В том, что я выше в спойлер положил пустые ячейки забил девятками, если ходит первый, то кладём 1 (X), иначе 0 (O)
еще исправление
if (nomer== 1) m[nomer - 1] = 1;
->
if (hod== 1) m[nomer - 1] = 1;
nomer это номер ячейки, а проверять нужно номер игрока, т.е. hod
Belonard сказал(а):↑Спойлер:
#include
using namespace std;
int m[9] = { 9, 9, 9, 9, 9, 9, 9, 9, 9 };
void vivod()
{
system("cls");
cout << "--- = free kletka" << endl;
cout << "Pole : " << endl;
cout<< "-" << 1 << "-" << "|" << "-" << 2 << "-" << "|" << "-" << 3 << "-" << endl;
cout << "-" << 4 << "-" << "|" << "-" << 5 << "-" << "|" << "-" << 6 << "-" << endl;
cout << "-" << 7 << "-" << "|" << "-" << 8 << "-" << "|" << "-" << 9 << "-" << endl;
cout << "\n";
cout << "sityacia v igre:" << endl;
cout << "-" << m[0] << "-" << "|" << "-" << m[1] << "-" << "|" << "-" << m[2] << "-" << endl;
cout << "-" << m[3] << "-" << "|" << "-" << m[4] << "-" << "|" << "-" << m[5] << "-" << endl;
cout << "-" << m[6] << "-" << "|" << "-" << m[7] << "-" << "|" << "-" << m[8] << "-" << endl;
cout << "\n";
}
void shag(int hod)
{
int nomer;
if (hod == 1) cout << "igrok 1 hodit" << endl;
else cout << "igrok 2 hodit" << endl;
cout << "vvedite yacheiku " << endl;
cin >> nomer;
while (nomer > 8 || nomer < 0 || m[nomer-1] == 'X' || m[nomer - 1] == 'O') {
cout << "vvedite CORRECT number" << endl;
cin >> nomer;
}
if (nomer == 1) m[nomer - 1] = 1;
else m[nomer - 1] = 0;
}
int main()
{
char p1, p2;
cout << "Vvedite imya pervogo igroka" << endl;
cin >> p1;
cout << "vvedite imeya vtorogo igroka" << endl;
cin >> p2;
vivod();
for (int move = 1; move <= 9; move++)
{
if (move % 2) shag(1);
else shag(2);
vivod();
}
system("pause");
return 0;
}
Ну вот смотри, у тебя имена игроков, считываются как char(т.е. длинной всего 1 символ)
Если создаешь массив int, то и клади int в ячейки, иначе символ '0' будет туда записываться как число в кодировке системы(48)
В том, что я выше в спойлер положил пустые ячейки забил девятками, если ходит первый, то кладём 1 (X), иначе 0 (O)
еще исправление
if (nomer== 1) m[nomer - 1] = 1;
->
if (nomer== 1) m[nomer - 1] = 1;
nomer это номер ячейки, а проверять нужно номер игрока, т.е. hodНажмите, чтобы раскрыть...
дада ) эт я нашел
Я фикшу проблемы
теперь все ок, только с проверкой что-то мутно
выводит ничь, когда должно победу, ищу ошибки
спасибо тебе, братишка
Тема закрыта
-
ЗаголовокОтветов ПросмотровПоследнее сообщение
-
Сообщений:3
Просмотров:5
-
Сообщений:8
Просмотров:12
-
Tartem 20 Dec 2024 в 12:46Сообщений: 4 20 Dec 2024 в 12:46
Сообщений:4
Просмотров:7
-
Сообщений:6
Просмотров:15
-
Сообщений:25
Просмотров:39