August 18, 2012

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. ]

August 18, 2012

Evet güzel! :) Şimdi sonraki aşama tuğla kırma oyunu gibi kullanıcının topa vurabilmesi. Sonra tuğlalar vs..

Dikkat ettim de ivme eklemişsin. Aslında ben de bu örneğin bir benzerini yapmıştım ama silinmiş olabilir. Orada da 'vector2d' sınıfı çok yararlı oluyordu. Benim yaptığım örnekte duvara her çarpışında farklı bir ivme ve yön kazanıyordu.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 18, 2012

Biraz daha düşününce, gerçekten çok olay var!

Mouse ile tutup çekmek, tuş kombinasyonları ile farklı hareketler (örneğin Street Fighter), üzerine (oyuncuya) aynı anda gelen farklı cisimler (silahlar, engeller ve düşmanlar) ve daha sayamayacağım nice ayrıntı...:)

Oyun yazmak apayrı bir dünya ama ucundan acık da olsa bu dünyaya girmek büyük tecrübe kazandırabilir...

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 24, 2012

Allegro uygulamaları (https://github.com/erdemoncel/allegro) artık Windows altında da çalışıyor. Windows XP altında denedim.

Tek yapmanız gereken MinGW kurulum programını buradan (http://sourceforge.net/projects/mingw/files/latest/download?source=files) indirmek. Kurulum programında 'C Compiler' ve 'MSYS Basic System' seçenekleriyle MinGW'yi kurun. Bilgisayarım'a sağ tıklayarak Özellikler Gelişmiş Ortam Değişkenleri seçerek 'Path' değişkenini seçin Düzenle'yi tıklayın ve alttaki kutucuğa MinGW'nin çalıştırılabilir dosyalarının olduğu dizini örneğin ';C:\MinGW\bin' şeklinde ekleyin.

Oturumu kapatıp açın. Allegro uygulamalarını indirdikten (https://github.com/erdemoncel/allegro/zipball/master) sonra sıkıştırılmış dosyayı açın. Derlemek için ana dizinde 'mingw32-make' demeniz yeterli. Eğer her şey yolunda gittiyse programın çalıştırılabilir dosyaları uygulama dizininde oluşacak.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2
Next ›   Last »