Pazar, Aralık 27, 2009

Staj Çilesi!!!

Başlık biraz sert olmuş olabilir aslında pek abartılacak bir çilesi yok stajın. Artı ve eksilerini ayrı kefelere koysak tabi ki artıları çok daha ağır basacaktır. Sonuç ta öğrenmenin en iyi yollarından biri tecrübe edinmektir. O yüzdendir ki staja karşı her hangi bir garezim yok. Bu yazıyı yazmamdaki sebep ise okul deneyimi hocamızın bu hafta bu konuyu uygun görmesi. Bu açıklamayı yapmaktaki amacım ise burada yayınladığım yazıyı sadece hocamızın değil şans eseri arama motorları sayesinde bu blogla karşılaşanların yazıyı okuma ihtimalleri olduğu için onların staj eğitimine karşı bakış açılarında olumsuz bir değişiklik yapmak istemememdir.

Mevzuya dönecek olursak stajda beni en çok zorlayan şey okulun uzak olması. Yürüyerek yaklaşık 30dk felan sürüyor. İşin garibi otobüs ile gitmek 30dk dan da fazla sürüyor. Bunu da bu hafta pazartesi gittiğimde tecrübe ettim. Adeta balıkesir turu attım otobüsle. Meğersem balıkesir baya büyükmüş.

Diyebilirsiniz ki "genç adamsın işin ne yürü" hatta "gece gündüz pc başında oturuyosun biraz yürü spor olur" tamam yazın yürüdüm de kışın ne yapacağım onu bilmiyorum. Neyse bakacağız artık bir çaresine.

Stajda ki diğer bir sorun "-ki bu sadece benim değil aynı zamanda okulunda sorunu" okulun lab'larında ki bilgisayarların çalışmaması. Her sınıfın 2 saat bilgisayar dersi var ama uygulama yapma imkanların yok. Sadece bilgi verebiliyoruz öğrencilere. Doğal olarak da gelecek haftaya kadar bir çok şeyi unutmuş oluyorlar. Aynı zamanda uygulama yapmadan anlatıla bilecek konuda pek yok. 2 saati sadece konu anlatarak doldurmakta zor oluyor. Hadi son 20 dk oyun oynayın veya bilgisayar başında bir şeyler yaparak vakit geçirin diyemiyoruz.

İkinci dönemi merakla bekliyorum. Staj okullarının değişeceği dedikodusu dönüyo ortalıkta. Bakalım ne olacak belki daha iyisi belkide daha kötüsü denk gelecek kısmet...

Salı, Aralık 22, 2009

Linux(Ubuntu) için Allegro kurulumu ve IDE ayarları

Allegronun Windows için kurulumunu anlattıktan sonra aklımdaki ilk şey Ubuntu için de kurulumunu anlatmaktı. Ama araya başka şeyler girince bir türlü bununla ilgili bir şeyler yazamadım nasip bugüneymiş deyip hemen adımlar halinde anlatmaya başlıyorum.

Kurulum

1- Synaptic Paket yöneticisini açıp arama bölümüne allegro yazıyoruz ve aşağıdaki resimde belirttiğim paketleri yüklüyoruz. Resimdeki paketler den liballegro4.2-dev ve liballegro4.2 paketler zorunlu olup diğerlerini kurmak isteğinize bağlı.


IDE Ayarları

1- Her zamanki gibi Code::Blocks üzerinden IDE ayarlarını anlatacağım. Settings menüsünde Compiler & Debugger bölümüne giriyoruz. Ordan da Linker Settings sekmesine geçiyoruz. Resimdeki şekilde lib dosyalarını bu bölüme ekliyoruz.


2- Şimdi de Search Directories sekmesine geçiyoruz ve aşağıda belirttiğim yerlere allegro dosyalarının yollarını ekliyoruz.

Compiler--> /usr/include/allegro
Linker--> /usr/lib/allegro/4.2.2
Resource Compiler --> /usr/include/allegro

Hepsi bu kadar aşağıdaki kodu yeni bir .cpp dosyası kopyalayıp doğru şekilde kurulumu gerçekleştirip gerçekleştirmediğinizi kontrol edebilirsiniz.


#include <allegro.h>


int main(){

allegro_init();
install_keyboard();
set_gfx_mode( GFX_AUTODETECT, 640, 480, 0, 0);

readkey();

return 0;

}
END_OF_MAIN();

Salı, Aralık 15, 2009

Allegro ile ses oynatma ve sprite kullanma

Daha önceki Oyunlarda Basit AI(Yapay Zeka) Uygulamaları yazımın sonunda allegro ile sprite ve ses olaylarının nasıl yapılacağından bahsedeceğimi haber vermiştim. Yoğun geçen iki haftadan sonra nihayet verdiğim sözü biraz geçte olsa tutmanın zamanı geldi.

Ses Oynatma

Öncelikle nasıl ses oynatılacağından bahsedelim. Bunu için allegronun SAMPLE yapı türünü kullanıyoruz. Bu türden yararlanarak türettiğimiz değişkenlerle ses oynata biliyoruz. Türettiğimiz ses değişkenine oynatacağımız dosyayı yüklemek için load_sample() fonksiyonunu kullanıyoruz. Yüklediğimiz sesi oynatmak için play_sample() fonksiyonunu kullanıyoruz.

SAMPLE *ses; //Değişkeni tanımladık
ses = load_sample(dosya_yolu); // ses dosyamızı yükledik
play_sample(ses,100,0,1000,0); //ses dosyasını oynattık


play_sample() fonksiyonunun parametrelerinden bahsedelim biraz.
int play_sample(const SAMPLE *spl, int vol, int pan, int freq, int loop);


*spl => SAMPLE dan türettip ses dosyasını yüklediğimiz değişken
vol => Ses yüksekliği(volume) 0-255 arasında değer alır
pan => Sesin hangi hoparlör den çıkacağını ayarlar. İki değer alır 0 sol 255 sağ hoparlör.
*freq => Sesin frekansı
loop => Sesin tekrar sayısı 0 ise bir kez oynatıp durur. 0 dan farklı ise stop_sample() fonksiyonuna kadar durmaksızın devam eder.

Sprite Basma

Sprite basmak BITMAP yapı türü kullanılır. Karakterimizin 2 farklı yön(sağ ve sol) için 3 farklı hareket hali olduğunu var sayarsak 2x3 lük bir dizi değişkeni tanımlayabiliriz. Daha öncede kullanmış olduğumuz load_bitmap() fonksiyonu yardımı ile de her bir sprite'yi diziye aktarıyoruz. Farzı misal aşağıdaki gibi.

BITMAP *resim[2][3];
resim[0][0] = load_bitmap(resmin_yolu, NULL);
resim[0][1] = load_bitmap(resmin_yolu, NULL);
resim[0][2] = load_bitmap(resmin_yolu, NULL);

resim[1][0] = load_bitmap(resmin_yolu, NULL);
resim[1][1] = load_bitmap(resmin_yolu, NULL);
resim[1][2] = load_bitmap(resmin_yolu, NULL);


Şimdi sıra geldi bu sprite'leri oyun içinde kullanarak ekrana basmaya. Bir döngü yardımı ile karakterimiz hangi yönde (sağ veya sol) hareket edecekse dizini o boyutundaki sprite'leri ekrana basıyoruz. Aşağıdaki kod benim örneğimdeki ilgili kısım.

if (yon == RIGHT)
{
//Her bir yöne için ekrana basılacak 3 farklı sprite var
//Bu yüzden döngü 3 kez dönecek
for (int i = 0 ; i<4;i++)
{
x = ulubatli->getX();
x+=2;
ulubatli->setX(x);

//0 ve 3 karakterin hareket öncesi ve sonrası halini temsil etmekte
//yani yüzü sağa dönük ayakları bitişik halini
if (i == 0 || i == 3)
resim = ulubatli->getResim(0,1);
else if (i == 1)
resim = ulubatli->getResim(0,0); // sağa doğru sağ ayak ilerde
else
resim = ulubatli->getResim(0,2); // sağa doğru sol ayak ilerde

ciz();
rest(20);
}

yon = NONE;
}



Oyunlarda Basit AI(Yapay Zeka) Uygulamaları yazımda paylaştığım örneği bu yazıda anlattıklarımla birleştirip geliştirerek paylaşıyorum. Buyurun yeni halini buradan indirebilirsiniz. Uygulama her zamanki gibi Code::Blocks IDE'si kullanarak MinGW ile derlenmiştir.

Ekran Görüntüsü


Perşembe, Aralık 10, 2009

Nihayet Linux için Google Chrome

Biraz önce maillerime bakarken bir gün öncesinde google chrome ekibi tarafından gönderilen maili okudum. Sonunda linux için ilk chrome beta sürümü çıkartılmış. Debian,Ubuntu,Fedora ve openSuse için hem 32 hemde 64 bitlik hazır paketleri mevcut.Kendilerini tebrik ediyor ve çalışmalarının devamını diliyoruz.


Gönderilen Mesaj

Hello everybody out there using Linux -

Google Chrome is go for beta on Linux! Thanks to the many Chromium and WebKit developers who helped make Google Chrome a lean, mean browsing machine. Here are a few fun facts from us on the Google Chrome for Linux team:

60,000 lines of Linux-specific code written
23 developer builds
2,713 Linux-specific bugs fixed
12 external committers and bug editors to the Google Chrome for Linux code base, 48 external code contributors

Thanks for waiting and we hope that you enjoy using Google Chrome!


Google Chrome Team





http://www.google.com/chrome/intl/en/w00t.html

--------



(c) 2009 Google
www.google.com 1600 Amphitheatre Parkway, Mountain
View CA 94043 United States of America.

Google is a trademark of Google Inc. All other company and product
names may be trademarks of the respective companies with which they
are associated.

Bir kaç ekran görüntüsü





Salı, Aralık 01, 2009

Programlama Stilinizi Bilin

Bjarne Stroustrup ile yapılan "Know Your Programming Style" adında bir söyleşi. Yazıyı ceviz.net'in c++ bölümünde gördüm. Bizimde işimizin çoğunlukla programlama ile ilgili olduğundan Ali Çehreli tarafından Türkçeye çevrilmiş halini burada paylaşmak istedim(Kendisinede teşekkür ederiz). Benim İngilizcem yeterli diyorsanız yazının orjinal haline buradan ulaşabilirsiniz.


Programlama Stilinizi Bilin
C++'nın babası programcılığın hâlâ önemli olduğunu söylüyor

Yazar: Margo McCall

C++'nın yaratıcısı Bjarne Stroustrup, program yazmanın en verimli noktasının şu üç yöntemin ortalarında bir yerde olduğunu söylüyor: türden bağımsız programlama, nesneye yönelik programlama, ve eşzamanlı programlama. Ancak, eşzamanlı programlama iyice açıklığa kavuşana kadar programcılar diğer ikisinin arasında kalmak zorundalar.

Stroustrup, SD West 2008'e katılanlara "Bu arayışın nerede sonlanacağını bilmiyorum" dedi "olayı karmaşıklaştıran, o üçüncü eksenin henüz bilinmiyor olması..."

Stroustrup, iki farklı stil üzerine düşüncelerini aktardı. Kendisine göre, algoritmalara yönelenler doğal olarak türden bağımsız programlamaya kayacaklar; daha çok nesnelerin ilişkileri ile ilgilenenler ise nesneye yönelik programlamaya...

Ancak bunlardan birisini seçmek her zaman doğru çözüm olmayabilir. "İkisini birden seçmeyi gerektiren başka kıstaslar da mevcut" diyen Stroustrup, "bu konuda profesyonel olarak kabul edilebilmek için tek bir dil bilmek yetmez" diye ekledi.

Texas A&M'de bilgisayar bilimleri profesörü olan Stroustrup, programlam stillerinin soyut olarak karşılaştırılamayacağını söyledi. Dillerin belirli bir amaç doğrultusunda nasıl işlediklerine bakmanın daha doğru olduğunu belirtti. Yazılım sektöründe önemli olanların doğruluk, üretkenlik, hız, daha büyük ölçeklere geçebilmek, genellik, ve öğretme ve öğrenme kolaylığı olduğunu belirtti.

Promcıların ihtiyaçları çoktur. Programlama dilinin; koda yeni eklemeleri, mevcut kodları değiştirmeden yaptıran, az yer tutan, hızlı çalışan, otomatik olarak doğruluk denetimi ve eşzamanlı çalışma sağlayan, küçük ama okunaklı, ve program oluşturması zaman almayan bir dil olmasını isterler.

Stroustrup, hepsinin birden edinilemeyeceğini söyledi. "Olanaksızdır. Programcılık bir mühendislik dalı olduğu için belirli koşullar ve kısıtlar arasında seçim yapmayı gerektirir. Size bir dili mükemmel olarak tanıtanlar, size bir şey satmaya çalışıyorlardır."

Diller mükemmel değildir. Stroustrup, dillerin ne yapıp yapamayacaklarını bilmek gerektiğini söyledi. Kendisi, değiştirmesi kolay ve başka kodlardan bağımsız olan [nonintrusive] yöntemleri yeğliyor. "Eğer başkasının koduna dokunmak zorunda kalmazsam, o kodu bozmamış da olurum. Eğer içini açmazsanız güvendesinizdir." dedi.

Söylentilerin tersine, Stroustrup'a göre programcılık hâlâ önemli. "Bence istediklerimizi sağlayan geleneksel programlama becerileri, yazılım sektörünün şimdiden görebildiğimiz gelecek dönemlerinde her zaman için önemli olacaklar." (Mart 2008).