Compo 3hW poprzedni weekend na warsztacie zostało zorganizowane trzygodzinne compo.
Jeszcze nigdy nie brałem udziału w tak krótkim pisaniu gry na czas, ale postanowiłem, że zobaczę co z tego wyjdzie. Ostatecznie zająłem 2 miejsce i jestem z tego zadowolony.
Gra (oczywiście niedokończona ;)), którą pisałem była klonem crimson landa i wypadła nienajgorzej. Całkiem ciekawe wydają mi się szczegóły techniczne, bo jadąc do domu na święta nie miałem dostępu do swojego kodu i pisałem kompletnie od zera:
Ciekawostką jest też to, że na procesorze C2D 1.8 GHz, użycie procesora według Menadżera zadań Windows nie przekracza 2%. Jak widać proste gry można spokojnie robić bez jakiejkowiek akceleracji ;)
Grę można zobaczyć tutaj.
Wynalazek zwany PIMPLPisząc biblioteki w C++ często można natrafić na problem wytworzenia wystarczająco dobrej enkapsulacji. Definicje klas, znajdujące się w plikach nagłówkowych, często pokazują za wiele: wszystkie prywatne pola i metody, które moglibyśmy chcieć ukryć. Dodatkowym problemem jest to, że praktycznie każda zmiana w implementacji wymaga zmiany definicji klasy, a to często przekłada się na konieczność ponownej kompilacji całego projektu.
Okazuje się, że istnieje bardzo proste rozwiązanie tego problemu -- PIMPL (private implementation):
// plik object.h
class ObjectImpl;
class Object
{
ObjectImpl* impl;
public:
Object();
~Object();
int SampleMethod(int x);
};
// plik object.cpp
class ObjectImpl
{
// Właściwa implementacja
};
Object::Object()
{
impl = new ObjectImpl();
}
Object::~Object()
{
delete impl;
}
int Object::SampleMethod(int x)
{
return impl->SampleMethod(x);
}
Oczywiście wypdałoby jeszcze dopisać konstruktor kopiujący i operator przypisania jeśli to konieczne.
Dodatkowo, można zmienić całkowicie implementację, a dla użytkowników klasy wszystko będzie wyglądać dokładnie tak samo. Jako lekturę uzupełniającą polecam to i stary wątek na forum gamedev.pl.