Haklısın, o kodu MVC deseni üzerinde geliştirmiştim. Senin circleFill() işlevine ihtiyacın olmayacağına göre, elimden geldiğince sadeleştirip başındaki esprikleri çıkarayım...
Evet, aşağıda Allegro'ya çevrilmek üzere sana emanet ediyorum...:)
import sdl, std.math;
int main(){
immutable genişliği = 640;
immutable yüksekliği = 480;
immutable çerçeveKalınlığı = 40;
immutable yuvarlakÇapı = 21;
// Sahneyi Kur
SDL_Surface* ekran = SDL_SetVideoMode(genişliği,
yüksekliği, 0, SDL_HWSURFACE)
SDL_Rect çerçeve;
çerçeve.w = cast(ushort)(genişliği - çerçeveKalınlığı);
çerçeve.h = cast(ushort)(yüksekliği - çerçeveKalınlığı);
çerçeve.x = cast(short)(ekran.w - çerçeve.w)/2;
çerçeve.y = cast(short)(ekran.h - çerçeve.h)/2;
int beyaz = SDL_MapRGB(ekran.format, 0xff, 0xff, 0xff);
SDL_FillRect(ekran, &çerçeve, beyaz);
SDL_UpdateRect(ekran, 0, 0, ekran.w, ekran.h);
// OLAYLAR BAŞLIYOR...
double HIZLAN = 0.0123456789;
double YAVAŞLA = 0.998754321;
double nXkonumu = genişliği /2;
double nYkonumu = yüksekliği/2;
double nXivmesi = 0;
double nYivmesi = 0;
bool sol, sağ, üst, alt;
SDL_Event event;
while (true) {
if(sol) nXivmesi -= HIZLAN;
if(sağ) nXivmesi += HIZLAN;
if(üst) nYivmesi -= HIZLAN;
if(alt) nYivmesi += HIZLAN;
nXivmesi *= YAVAŞLA;
nYivmesi *= YAVAŞLA;
if(nXkonumu > cast(double)(genişliği - çerçeveKalınlığı) ||
(nXkonumu < cast(double)çerçeveKalınlığı)) {
nXkonumu -= nXivmesi;
nXivmesi = -nXivmesi * YAVAŞLA;
}
if(nYkonumu > cast(double)(yüksekliği - çerçeveKalınlığı) ||
(nYkonumu < cast(double)çerçeveKalınlığı)) {
nYkonumu -= nYivmesi;
nYivmesi = -nYivmesi * YAVAŞLA;
}
nXkonumu += nXivmesi;
nYkonumu += nYivmesi;
// Çerçeve Çiz
SDL_FillRect(ekran, &çerçeve, SDL_MapRGB(ekran.format, 0xff, 0xff, 0xff));
// Yuvarlak Çiz
circleFill(ekran, cast(int)nXkonumu, cast(int)nYkonumu, yuvarlakÇapı, 0);
// Ekrana Yansıt
SDL_Flip(ekran);
while (SDL_PollEvent(&event)) {
if(event.type == SDL_KEYDOWN) {
switch(event.key.keysym.sym) {
case SDLK_LEFT : sol = true; break;
case SDLK_RIGHT : sağ = true; break;
case SDLK_UP : üst = true; break;
case SDLK_DOWN : alt = true; break;
default : break;
}
} else if(event.type == SDL_KEYUP) {
switch(event.key.keysym.sym) {
case SDLK_ESCAPE : return true; // çıkış
case SDLK_LEFT : sol = false; break;
case SDLK_RIGHT : sağ = false; break;
case SDLK_UP : üst = false; break;
case SDLK_DOWN : alt = false; break;
default : break;
}
} else if(event.type == SDL_QUIT) {
return true; // çıkış
}
} // tuş döngüsü
} // sonsuz döngü
SDL_Quit();
return true;
} // program sonu
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]