Крестики нолики на c++
Пытаюсь сделать крестики нолики на c++. Отрисовываю поле ставлю на поле крестик, пытаюсь поставить второй крестик но не получается, потому что первый крестик передвигается по новым "координатам". Помогите понять, что не так?
#include <iostream>
#include <string>
using namespace std;
void DrawPlace(char icon,int x, int y){
char map[3][3];
int length = sizeof(map[0]) / sizeof(map[0][0]);
for(int i = 0; i < length; i++)
{
for(int j = 0; j < length; j++)
{
map[i][j] = '#';
}
}
system("cls");
for(int i = 0; i < length; i++)
{
for(int j = 0; j < length; j++)
{
map[x][y] = icon;
cout << map[i][j];
}
cout << endl;
}
}
int main(int argc, char *argv[])
{
int x,y;
while(true){
cout << "Введите X: ";
cin >> x;
cout << "Введите Y: ";
cin >> y;
DrawPlace('x',x,y);
}
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
У вас поле каждый раз перерисовывается, вместо того, чтобы хранить все занесенные символы. Потому что оно локально хранится в функции void DrawPlace(). В итоге у вас не старый крестик прыгает по новым координатам, а рисуется новое пустое поле с 1 крестиком.
void DrawPlace(char icon,int x, int y){
char map[3][3]; // локальный массив, который уничтожается при выходе из функции
}
Ну и по мелочам:
- Заполнение поля игры символами
#нужно сделать один раз - в началеmain(также, как и создать поле игры), а не каждый раз при рисовании символа. - Зачем вы вычисляете
length, если у вас известен размер поля?
char map[3][3];
int length = sizeof(map[0]) / sizeof(map[0][0]);
// лучше так
const int length = 3;
char map[length][length];
- В цикле рисования не нужно на каждом шаге делать присвоение по фиксированным координатам
map[x][y] = icon;- это нужно сделать 1 раз перед циклами.
void DrawPlace(char icon,int x, int y)
{
....
map[x][y] = icon;
for(int i = 0; i < length; i++)
{
for(int j = 0; j < length; j++)
cout << map[i][j];
cout << endl;
}
}
И в конце несколько вопросов автору:
- цикл
while(true)вы как заканчивать собираетесь? - А проверять на то, что ячейка уже заполнена?
- А выход за пределы игрового поля?