Ali hocam öncelikle iyi ki varsın...
Tabi bir de küçük bir sitem, böyle güzel bir ortamda herkes olsaydı madem...:)
Belli ki bayram arefesi telaşı; malum Kurban Bayramı. Bu vesileyle herkesin bayramlarını da tebrik ederim. Çünkü hemen akabinde 29 Ekim Cumhuriyet Bayramı da var. Büyüklerin ellerinden, küçüklerin gözlerinden...:D
Böyle bir renkli girişten sonra konuya tekrar dönelim. Çünkü anlayamayınca bir süre ara verdim; bir de bilgisayar değiştirdim. Tavsiye de ederim çünkü önceki yaptıklarımın tümünü bir kenara ittim. Her şeye sıfırdan başladım ve yeni bir temel oturttum. O temelin ekran görüntüleri ve kodu hemen aşağıda:
Alıntı:
> 'salih@NB:~/d.ders$ ./kutular salih@NB:~/d.ders$ ./kutular
#0 [ 50, 30 ] [ 250, 120 ] blue #0 [ 150, 0 ] [ 150, 10 ] blue
#1 [ 190, 0 ] [ 110, 100 ] cyan #1 [ 170, 0 ] [ 130, 60 ] cyan
#2 [ 150, 0 ] [ 150, 30 ] green #2 [ 10, 40 ] [ 90, 100 ] green
#3 [ 0, 30 ] [ 140, 120 ] yellow #3 [ 180, 0 ] [ 120, 120 ] yellow
#4 [ 100, 0 ] [ 200, 110 ] red #4 [ 190, 10 ] [ 110, 10 ] red
#5 [ 50, 40 ] [ 210, 60 ] white #5 [ 30, 20 ] [ 270, 130 ] white
TEST 1 TEST2'
http://imageshack.us/a/img255/1390/1kutular.png http://imageshack.us/a/img707/4006/2kutular.png
import std.string, std.random, std.range;
import std.stdio, sdlmini;
immutable genişlik = 30; /* Hesabın kolay olması için */
immutable yükseklik = 15; /* gerçeğin onda biridir! */
class Kutu {
size_t id; /* 1, 2, 3 ... n+1 */
SDL_Rect rect; /* x, y, w, h */
clr renk; /* uint enums */
private:
static size_t _id;
static size_t nextId() { /* sıralı sayı üreteçi */
immutable id = _id++;
return id;
}
public:
this(clr color, short[] noktalar ...) {
renk = color;
rect.x = noktalar[0];
rect.y = noktalar[1];
rect.w = cast(ushort)(noktalar[2]);
rect.h = cast(ushort)(noktalar[3]);
this.id = nextId();
}
void exec(SDL_Surface * screen) @property { /* kutu çizer */
SDL_FillRect(screen, &rect, renk);
}
override
string toString() const { /* kutunun özelliklerini döndürür */
auto r = appender!string();
std.format.formattedWrite(r, "%s", renk);
return format("#%d [ %d, %d ]\t[ %d, %d ]\t( %s )",
id, rect.x, rect.y, rect.w, rect.h, r.data);
}
}
void main() {
clr[6] renkler; with(clr) {
renkler = [ blue, cyan, green, yellow, red, white ];
}
Kutu[renkler.length] kutular; /* renk adeti kadar nesne oluşturur */
with( new scene(genişlik*10, yükseklik*10, "Kutular...", clr.black) ) {
assert(scr != null); // Sahne kuruldu mu?
foreach(i, c; renkler) {
auto solüst = [ uniform(0, genişlik-10),
uniform(0, yükseklik-10)];
auto sağalt = [ uniform(solüst[0], genişlik),
uniform(solüst[1], yükseklik) ];
short[] noktalar;
noktalar ~= cast(short)(solüst[0] * 10);
noktalar ~= cast(short)(solüst[1] * 10);
noktalar ~= cast(short)(sağalt[0] * 10);
noktalar ~= cast(short)(sağalt[1] * 10);
kutular[i] = new Kutu(c, noktalar);
}
/* Yukarıda, rasgele sayılarda (sahne ölçülerinin onda biri)
* kutu başlangıç (solüst) ve büyüklük (sağalt) değerleriyle
* nesneler oluşturulurken;
* Aşağıda bunlar, sırasıyla sahneye alınmaktadır...
*/
do {
foreach(kutu; kutular) {
kutu.exec(scr);
kutu.writeln;
kutu.clear;
}
} while(escEvent(0)); // ESC için bekle ve çık...
}
}
Bu kodun bir özelliği olabildiğince sade oluşu. Öyle ki SDL kütüphanesinin tüm özelliklerine başvurulmuş (SDL_Rect ve SDL_FillRect) ve temsilcilerden uzak durulmuştur. Şimdi Ali hocamın emeklerini buna uyarlamaya çalışacağım...
Teşekkürler...
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]