Jeśli cały projekt jest napisany tak obiektowo to moze być trochę do poprawiania.
Jeśli chcesz to robić "na chama" (czyli bezpośrednio zmieniać każdy kawałek na odpowiednią konstrukcję:
- zamienić
class gra
na struct gra
2) zamienić
```cpp
void kolor(int K)
na void kolor(gra *this, int K)
i tak z wszystkimi metodami
3) w implementacji metod zamienić odniesienia do pól klasy na
```c
this->nazwa_pola
(gdzie this to wskaźnik z pierwszego parametru
4) jawnie wywoływać konstruktor wszędzie (konstruktor też przepisać na metodę przyjmującą gra *this).
5) najciekawiej będzie z wirtualnymi metodami. W skrócie musisz sam zaimplementować VTable. Albo dla uproszczenia, trochę bardziej prymitywną wersję, czyli pole ze wskaźnikiem na metodę dla każdej metody.
Ostatecznie z tego kodu wyjdzie coś w rodzaju:
typedef void (*voidfx)();
struct gra {
voidfx poczatek;
voidfx koniec;
int *wynik;
}
void gra_ctor(gra *this) {
...
this->poczatek = gra_poczatek; // o ile nie czysto wirtualna
this->koniec = gra_koniec; // o ile nie czysto wirtualna
}
void gra_dtor(gra *this) { ... }
void gra_kolor(gra *this, int K); //zmienia kolor tekstu
void gra_gotoxy(gra *this, int x, int y); //przenosi kursor do danych wspolrzednych
A użycie gry zmieni się z:
void func() {
gra g;
g.kolor(2);
}
Na:
void func() {
gra g;
gra_ctor(&g);
gra_kolor(&g, 2);
gra_dtor(&g);
}
Możesz zawsze spróbować przepisać kod trochę bardziej inteligentnie, tzn. zmieniając trochę więcej, ale na to nie ma już jednego dobrego sposobu.
PS. Jeśli są używane dużo szablony, może być jeszcze gorzej.