For english version http://dincaysroom.blogspot.com (Not complete yet)

16 Şubat 2010 Salı

FTDI ve ncurses ile Hazifa Oyunu

Ftdi cipi ile kontrol edebildigim 4 led ile bir hafiza oyunu yaptim. Oyun soyle
  • Oyun rastgele sirayla yanan ledlerin hangi sira ile yandigini programa girmek uzerine kurulu.
  • Oyunda tur/level mantigi var. Ledler yaniyor, sirasi giriliyor, ledler yaniyor sirasi giriliyor ... seklinde.
  • Ayni anda sadece 1 led yaniyor. Birden fazla led ayni anda yanmiyor.
  • Her turda, o turun sayisi kadar led yaniyor. 1. turda 1 led, 2. turda 2 led, 7. turda 7 led yaniyor.
  • Led sirasi soyle belirleniyor: Onceki turdaki led sirasi + rastgele bir led.
Bu kurallara gore yazacagim programda olmasini istedigim bir ozellik her sayiya basilinca enter tusuna basma zorunlulugu olmamasiydi. Bunun icin girdiyi getch() fonksiyonu ile okumak gerekiyor. Getch() Windows'ta conio.h'in icinde, fakat Linux'ta bu kutuphane yok. Getch()'in oldugu kutuphane ncurses.h. N on eki new den geliyor. Curses ogrenmeye getch() kullanmak istedigim icin basladim.

Netten arastirdigimda curses'in aslinda cok kullanilan bir kutuphane oldugunu ve en basit konsol uygulamalari icin bile kullanilmasinin buyuk kolaylik oldugunu ogrendim. Ncurses'i kurmak icin

sudo apt-get install libncurses5-dev

komutunu girmek lazim. Daha sonra c kodunun basina #include satirini eklemeli, gcc ile derlerken de -lncurses bayragini eklemek gerekiyor.

Ncurses kutuphanesinden kullandigim fonksiyonlarin aciklamalarini koda ekledim. Ncurses hakkinda daha ayrintili bilgiye http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/ adresinden ulasilabilir. Kutuphanede tanimli sabitler ve fonksiyonlarin listesi http://www.opengroup.org/onlinepubs/007908799/xcurses/curses.h.html adresinde var.

Programi yazarken en cok zorlandigim yer, getch() fonksiyonunun klavyeden bir girdi beklemeden -1 donmesiydi. Bunu halletmek icin programda nodelay modunu kapatmak gerekiyormus. Ikinci en cok zorlandigim nokta da ekranin kaydirma modunun kapali olmasindan dolayi ekrana sigmayacak satirlarin en son satira arka arkaya yazilmasi oldu. Bu sorunu cozmek icin scroll modunu acmak gerekiyormus. Aklima takilan diger noktalari ustteki iki linkten ve manuellerden hallettim.

Program maalesef sadece linux'ta calisiyor, windowsta calismiyor. Windows'ta calisan versiyonu icin linux kodunu biraz degistirmek yeterli. Yapilmasi gereken conio.h'in eklenmesi, ncurses fonksiyonlarinin cikarilmasi, usleep fonksiyonunun degistirilmesi ve printw fonksiyonlarini printf ile degistirilmesi.

Oyun duzenegi bir onceki yazimda fotografta gosterilen duzenegin aynisi. FTDI donusturucu ve ucuna baglanmis 4 tane led.

Program koduna buradan erisilebilir.

Hiç yorum yok:

Yorum Gönder