#7 Adam
Logika je v pořádku, ale tvá hra trpí na vykreslování... A ty cykly - přijdou mi jednak nepřehledné, ale hlavně zbytečné. Navíc mícháš logiku hry s vykreslováním a sám se v tom asi ztrácíš...
for (int i = 0; i <= 450; ++i){
rect.x = i + 30;
rect.y = 370;
rect.w = 15;
rect.h = 15;
SDL_BlitSurface(wall, &rect, screen, &rect);
x = rect.x;
for (int j = 0; j <= 15; ++j){
y = rect.y + j;
if (((x == oxy.x + 10) && (y == oxy.y)) || (x == oxy.x + 10) && (y == oxy.y + 10)){
oxy.x = 470;
oxy.y = 470;
}
}
if ((rect.x == oxy.x) && (rect.y + 15 == oxy.y)){
oxy.x = 470;
oxy.y = 470;
}
if ((rect.x == oxy.x) && (rect.y == oxy.y + 10)){
oxy.x = 470;
oxy.y = 470;
}
}
Proč vykresluješ čtvreček 15×15px (když pominu fakt, že ho celkem zbytečně vyřezáváš z velké surface) několikrát přes sebe? Vykreslíš čtvreček 15×15 px a posuneš se o jeden pixel (místo 15). Navíc s tím, jak to máš vytvořené ani nepotřebuješ cyklus (tedy jakékoliv vykreslování po čtvrečcích) - můžeš na jedno volání SDL_BlitSurface vykreslit celý obdélník. Pamatuj - s voláním BlitSurface je vždy spojena nějaká režie. Tzn vykreslit stejnou oblast po pixelech tvá MNOHEM déle, než po celém obdélníku (při použití BlitSurface).
Začal bych znovu a přehodnotil celý program. Nakreslil si na papír graf. Zjednoduš to. Logika by měla být v tomto pořadí - obsloužit hráče (podle šipek jím posunout, otestovat kolizi), vykreslit pozadí, vykreslit hráče.