Nie rozumiem, co chcesz realizować. Konsola czy okno - to nie jest ważne. Reguły programowania się nie zmieniają.
Napisz sobie klasę pola, metody do obsługi pola, może jakąś klasę planszy i tyle. Mogłoby to wyglądać tak:
enum class FieldType
{
some,
other
// ...
};
class Field
{
public:
Field(int x, int y, FieldType type);
void draw();
void update();
void change( /* jakieś argumenty do jakichś operacji na polu */);
private:
int x, y;
FieldType type;
// (...)
};
class Board
{
public:
Board(int how_many_fields)
{
int x = 1, y = 1;
for(int i = 0; i < how_many_fields; ++i)
{
fields.push_back(Field(x, y, FieldType::some));
x += 10; // jakaś zmiana właściwości każdego pola
}
}
~Board()
{
fields.clear();
}
void draw()
{
for(const auto &field : fields)
field.draw();
}
void update()
{
// (...) jakieś operacje na polach...
for(const auto &field : fields)
field.update();
}
private:
std::vector <Field> fields;
};
int main()
{
Board board(10);
while(true)
{
// (...)
board.update();
board.draw();
}
}
Zastanawiam się tylko, po co Ci dynamiczna alokacja. Jeśli nie będziesz zmieniać rozmiaru planszy, to tworzysz tablicę statyczną. Jeśli nie znasz rozmiaru z góry - użyj któregoś z kontenerów biblioteki standardowej. Chyba że w grę wchodzi dziedziczenie, wtedy dynamiczna alokacja jest w porządku.