[ English | 中文 | Deutsch | Español | Français | Italiano | 日本語 | 한국어 | Português | Русский | Türkçe | Українська ]
Pyxel Python için bir retro oyun motorudur.
Retro oyun konsollarından esinlenerek basitleştirilmiş özelliklere sahip olması sayesinde, aynı anda yalnızca 16 renk görüntülenebildiği ve yalnızca 4 ses çalınabildiği için, pixel art tarzı oyunlar yapmanın keyfini doyasıya çıkarabilirsiniz.
Pyxel'in geliştirilmesinin motivasyonu kullanıcıların geri bildirimleridir. Lütfen Pyxel'e GitHub'da bir yıldız verin!
Pyxel, PICO-8 ve TIC-80 gibi retro oyun motorlarından esinlenerek tasarlanmıştır.
Pyxel tamamen ücretsiz ve açık kaynaklıdır. Haydi, Pyxel ile birlikte retro bir oyun yapalım!
- Windows, Mac, Linux ve Web üzerinde çalışır
- Python ile programlandı
- 16 renk paleti
- 256x256 boyutlarında 3 resim seti
- 256x256 boyutlarında 8 tileset
- 64 adet tanımlanabilir ses ile 4 kanal
- Dilediğiniz sesleri birleştirebilen 8 müzik
- Klavye, fare ve gamepad girişi
- Resim ve ses düzenleyici
Python3 (sürüm 3.8 veya daha üstü) kurduktan sonra, aşağıdaki komutu çalıştırın:
pip install -U pyxelPython'u resmi yükleyici ile kurarsanız, pyxel komutunu etkinleştirmek için Add Python 3.x to PATH seçeneğini işaretleyin.
Homebrew kurduktan sonra, aşağıdaki komutları çalıştırın:
brew install pipx
pipx ensurepath
pipx install pyxelPyxel'i kurduktan sonra sürümü güncellemek için pipx upgrade pyxel komutunu çalıştırın.
SDL2 paketini (libsdl2-dev Ubuntu için), Python3 (sürüm 3.8 veya daha üstü) ve python3-pip kurduktan sonra, aşağıdaki komutu çalıştırın:
sudo pip3 install -U pyxelYukarıdaki komut çalışmazsa, Makefile talimatlarına göre kendiniz derlemeyi deneyin.
Pyxel'in web versiyonu Python veya Pyxel kurulumu gerektirmez ve desteklenen web tarayıcıları ile hem PC'lerde hem de akıllı telefon ve tabletlerde çalışır.
Özel talimatlar için lütfen bu sayfaya. başvurun.
Pyxel'i kurduktan sonra, aşağıdaki komutla Pyxel örnekleri mevcut dizine kopyalanacaktır:
pyxel copy_examplesKopyalanacak örnekler aşağıdaki gibidir:
| 01_hello_pyxel.py | En basit uygulama | Demo | Code |
| 02_jump_game.py | Pyxel kaynak dosyası ile zıplama oyunu | Demo | Code |
| 03_draw_api.py | Çizim API'lerinin gösterimi | Demo | Code |
| 04_sound_api.py | Ses API'lerinin gösterimi | Demo | Code |
| 05_color_palette.py | Renk paleti listesi | Demo | Code |
| 06_click_game.py | Fare tıklama oyunu | Demo | Code |
| 07_snake.py | BGM ile yılan oyunu | Demo | Code |
| 08_triangle_api.py | Üçgen çizim API'lerinin gösterimi | Demo | Code |
| 09_shooter.py | Ekran geçişli bir shoot'em up oyunu | Demo | Code |
| 10_platformer.py | Harita ile yan kaydırmalı platform oyunu | Demo | Code |
| 11_offscreen.py | Image sınıfı ile ekran dışı renderlama | Demo | Code |
| 12_perlin_noise.py | Perlin gürültü animasyonu | Demo | Code |
| 13_bitmap_font.py | Bitmap font çizimi | Demo | Code |
| 14_synthesizer.py | Ses genişletme özelliklerini kullanan synthesizer | Demo | Code |
| 15_tiled_map_file.py | Tile Map Dosyası (.tmx) yükleme ve çizme | Demo | Code |
| 16_transform.py | Görüntü döndürme ve ölçekleme | Demo | Code |
| 99_flip_animation.py | Flip fonksiyonu ile animasyon (sadece web dışı platformlar) | Demo | Code |
| 30SecondsOfDaylight.pyxapp | 1. Pyxel Jam kazanan oyunu Adam | Demo | Code |
| megaball.pyxapp | Arcade top fiziği oyunu Adam | Demo | Code |
| 8bit-bgm-gen.pyxapp | Arka plan müzik jeneratörü frenchbread | Demo | Code |
Bir örnek aşağıdaki komutlarla çalıştırılabilir:
cd pyxel_examples
pyxel run 01_hello_pyxel.py
pyxel play 30SecondsOfDaylight.pyxappPython betiğinizde Pyxel modülünü içe aktardıktan sonra, ilk olarak init fonksiyonu ile pencere boyutunu belirtin ve ardından run fonksiyonu ile Pyxel uygulamasını başlatın.
import pyxel
pyxel.init(160, 120)
def update():
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
def draw():
pyxel.cls(0)
pyxel.rect(10, 10, 20, 20, 11)
pyxel.run(update, draw)run fonksiyonunun argümanları, her kareyi güncellemek için update fonksiyonu ve gerektiğinde ekranı çizmek için draw fonksiyonudur.
Gerçek bir uygulamada, pyxel kodlarını aşağıdaki gibi bir sınıfa sarmanız önerilir:
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120)
self.x = 0
pyxel.run(self.update, self.draw)
def update(self):
self.x = (self.x + 1) % pyxel.width
def draw(self):
pyxel.cls(0)
pyxel.rect(self.x, 0, 8, 8, 9)
App()Basit grafikler oluştururken, animasyon olmadan kodu daha kısa yapmak için show fonksiyonu kullanılabilir.
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()Oluşturulan bir Python betiği python komutu kullanılarak çalıştırılabilir:
python PYTHON_SCRIPT_FILEAyrıca pyxel run komutu ile de çalıştırılabilir:
pyxel run PYTHON_SCRIPT_FILEEk olarak, pyxel watch komutu, belirtilen bir dizindeki değişikliklerin izlenmesini sağlar ve değişiklikler tespit edildiğinde programı otomatik olarak yeniden çalıştırır:
pyxel watch WATCH_DIR PYTHON_SCRIPT_FILEDizin izleme Ctrl(Command)+C tuşlarına basılarak durdurulabilir.
Pyxel uygulaması çalışırken aşağıdaki özel komutlar kullanılabilir:
Esc
Uygulamadan çıkış yaparAlt(Option)+1
Ekran görüntüsünü masaüstüne kaydederAlt(Option)+2
Ekran videosu kaydının başlangıç zamanını sıfırlarAlt(Option)+3
Ekran videosunu masaüstüne kaydeder (en fazla 10 saniye)Alt(Option)+9
Ekran modları arasında geçiş yapar (Crisp/Smooth/Retro)Alt(Option)+0
Performans monitörünü açıp kapatır (fps, güncelleme süresi ve çizim süresi)Alt(Option)+Enter
Tam ekran modunu açıp kapatırShift+Alt(Option)+1/2/3
İlgili görüntü setini masaüstüne kaydederShift+Alt(Option)+0
Mevcut renk paletini masaüstüne kaydeder
Pyxel Editör, Pyxel uygulamasında kullanılan görüntü ve sesleri oluşturabilir.
Editörü başlatmak için şu komut kullanılır:
pyxel edit PYXEL_RESOURCE_FILEBelirtilen Pyxel kaynak dosyası (.pyxres) mevcutsa, dosya yüklenir; mevcut değilse belirtilen isimle yeni bir dosya oluşturulur (my_resource.pyxres adıyla).
Editör başlatıldıktan sonra, başka bir kaynak dosyasını sürükleyip bırakarak dosya değiştirilebilir.
Oluşturulan kaynak dosyası load fonksiyonu ile yüklenebilir.
Pyxel Editör'ün aşağıdaki düzenleme modları bulunmaktadır.
Image Editor
Görüntü setlerini düzenleme modu.
Görüntüyü mevcut olarak seçilmiş görüntü setine yüklemek için Görüntü Düzenleyici'ye bir görüntü dosyasını (PNG/GIF/JPEG) sürükleyip bırakın.
Tilemap Editor
Görüntü setlerindeki görüntülerin bir tile deseninde düzenlendiği tilemap'leri düzenleme modu.
Bir TMX dosyasını (Tiled Map Dosyası) Tilemap Editöre sürükleyip bırakın. Bu, seçili döşeme harita numarasına karşılık gelen çizim sırasındaki katmanını yükler.
Sound Editor
Sesleri düzenleme modu.
Music Editor
Seslerin çalma sırasına göre düzenlendiği müzikleri düzenleme modu.
Pyxel görüntüleri ve tilemap'leri aşağıdaki yöntemlerle de oluşturulabilir:
Image.setveyaTilemap.setfonksiyonu ile bir dizi string'den bir görüntü oluşturulabilirImage.loadfonksiyonu ile bir görüntü dosyası (PNG/GIF/JPEG) Pyxel paletine yüklenebilir
Pyxel sesleri aşağıdaki yöntemle de oluşturulabilir:
Sound.setveyaMusic.setfonksiyonu ile string'lerden bir ses oluşturulabilir
Bu fonksiyonların kullanımı için API referansına başvurun.
Pyxel, platformlar arası çalışan özel bir uygulama dağıtım dosya formatını (Pyxel uygulama dosyası) destekler.
Pyxel uygulama dosyasını (.pyxapp) pyxel package komutu ile oluşturun:
pyxel package APP_DIR STARTUP_SCRIPT_FILEUygulamanın kaynak veya ek modülleri içermesi gerekiyorsa, bunları uygulama dizinine yerleştirin.
Oluşturulan uygulama dosyası pyxel play komutu ile çalıştırılabilir:
pyxel play PYXEL_APP_FILEPyxel uygulama dosyası ayrıca pyxel app2exe veya pyxel app2html komutları ile bir yürütülebilir dosyaya veya HTML dosyasına dönüştürülebilir.
-
width,height
Ekranın genişliği ve yüksekliği -
frame_count
Geçen kare sayısı -
init(width, height, [title], [fps], [quit_key], [display_scale], [capture_scale], [capture_sec])
Pyxel uygulamasını ekran boyutu (width,height) ile başlatır. İsteğe bağlı olarak aşağıdaki seçenekler belirtilebilir: pencere başlığıtitle, kare hızıfps, uygulamadan çıkış için kullanılacak tuşquit_key, ekran görüntüsü ölçeğidisplay_scale, yakalama ölçeğicapture_scale, ve ekran videosu maksimum kayıt süresicapture_sec.
Örnek:pyxel.init(160, 120, title="My Pyxel App", fps=60, quit_key=pyxel.KEY_NONE, capture_scale=3, capture_sec=0) -
run(update, draw)
Pyxel uygulamasını başlatır ve her kare içinupdatefonksiyonunu, ekrana çizim içindrawfonksiyonunu çağırır. -
show()
Ekranı gösterir veEsctuşuna basılana kadar bekler. -
flip()
Ekranı bir kare yeniler. Uygulama,Esctuşuna basıldığında çıkar. Bu fonksiyon web sürümünde çalışmaz. -
quit()
Pyxel uygulamasını kapatır.
load(filename, [excl_images], [excl_tilemaps], [excl_sounds], [excl_musics])
Kaynak dosyasını (.pyxres) yükle. Bir seçenekTrueise, kaynak yüklenmeyecek. Aynı konumda kaynak dosyası ile aynı ada sahip bir palet dosyası (.pyxpal) varsa, palet ekran renkleri değiştirilecek. Palet dosyası, görüntü renklerinin onaltılık girişleridir (örneğin,1100FF), yeni satırlarla ayrılmıştır. Palet dosyası ayrıca, Pyxel Editor'de görüntülenen renkleri değiştirmek için kullanılabilir.
-
mouse_x,mouse_y
Fare imlecinin mevcut konumu -
mouse_wheel
Fare tekerleğinin mevcut değeri -
btn(key)
keytuşu basılıysaTruedöndürür, aksi takdirdeFalse. (Tuş tanımı listesi) -
btnp(key, [hold], [repeat])
keytuşu o karede basılıysaTruedöndürür.holdverepeatbelirtilmişse,keytuşuholdkare süresinden uzun süre basılı tutulduğundarepeatkare aralığındaTruedöner. -
btnr(key)
keytuşu o karede bırakıldıysaTruedöndürür. -
mouse(visible)
EğervisibleTrueise fare imleci gösterilir.Falseise gizlenir. Fare imleci gösterilmiyor olsa bile konumu güncellenir.
-
colors
Palet gösterim renklerinin listesi. Gösterim rengi 24-bit sayısal bir değerle belirtilir. Python listelerini doğrudan atamak ve almak içincolors.from_listvecolors.to_listkullanın.
Örneğin:old_colors = pyxel.colors.to_list(); pyxel.colors.from_list([0x111111, 0x222222, 0x333333]); pyxel.colors[15] = 0x112233 -
images
Görüntü setlerinin (0-2) listesi. (Resim sınıfına bakınız)
Örneğin:pyxel.images[0].load(0, 0, "title.png") -
tilemaps
Tile haritalarının (0-7) listesi. (Tilemap sınıfına bakınız) -
clip(x, y, w, h)
Ekranın çizim alanını (x,y) konumundanwgenişlik vehyükseklik olarak ayarlar.clip()ile çizim alanını tam ekran olarak sıfırlar. -
camera(x, y)
Ekranın sol üst köşe koordinatlarını (x,y) değiştirir.camera()ile sol üst köşe koordinatlarını (0,0) olarak sıfırlar. -
pal(col1, col2)
Çizim sırasındacol1renginicol2ile değiştirir. Başlangıç paletine dönmek içinpal()kullanılır. -
dither(alpha)
Çizim sırasında saydamlık uygular. 0,0 ile 1,0 arasındaalphadeğeri ayarlanır, 0,0 saydam ve 1,0 opak anlamına gelir. -
cls(col)
Ekranıcolrenk ile temizler. -
pget(x, y)
(x,y) konumundaki pikselin rengini alır. -
pset(x, y, col)
(x,y) konumunacolrenginde bir piksel çizer. -
line(x1, y1, x2, y2, col)
(x1,y1) noktasından (x2,y2) noktasınacolrenkli bir çizgi çizer. -
rect(x, y, w, h, col)
(x,y) noktasından başlayarakwgenişlik vehyüksekliktecolrenkli bir dikdörtgen çizer. -
rectb(x, y, w, h, col)
(x,y) noktasından başlayarakwgenişlik vehyüksekliktecolrenkli dikdörtgenin sınırlarını çizer. -
circ(x, y, r, col)
(x,y) merkezinden başlayarak yarıçapırvecolrenkli bir daire çizer. -
circb(x, y, r, col)
(x,y) merkezinden başlayarak yarıçapırvecolrenkli dairenin sınırlarını çizer. -
elli(x, y, w, h, col)
(x,y) noktasından başlayarakwgenişlik vehyüksekliktecolrenkli bir elips çizer. -
ellib(x, y, w, h, col)
(x,y) noktasından başlayarakwgenişlik vehyüksekliktecolrenkli elipsin sınırlarını çizer. -
tri(x1, y1, x2, y2, x3, y3, col)
(x1,y1), (x2,y2), (x3,y3) noktalarından geçencolrenkli bir üçgen çizer. -
trib(x1, y1, x2, y2, x3, y3, col)
(x1,y1), (x2,y2), (x3,y3) noktalarından geçencolrenkli üçgenin sınırlarını çizer. -
fill(x, y, col)
(x,y) noktasından başlayarak aynı renk ile bağlantılı alanıcolrenkle doldurur. -
blt(x, y, img, u, v, w, h, [colkey], [rotate], [scale])
img(0-2) resim setinden (u,v) konumundan başlayarak boyutu (w,h) olan bölümü (x,y) konumuna kopyalar.wve/veyahiçin negatif bir değer ayarlanırsa, yatay ve/veya dikey olarak ters çevrilir.colkeybelirtilmişse, saydam renk olarak işlenir. Eğerrotate(derece cinsinden),scale(1.0=%100) veya her ikisi de belirtilirse, ilgili dönüşüm uygulanacaktır.
bltm(x, y, tm, u, v, w, h, [colkey], [rotate], [scale])
tm(0-7) tile haritasından (u,v) konumundan başlayarak boyutu (w,h) olan bölümü (x,y) konumuna kopyalar.wve/veyahiçin negatif bir değer ayarlanırsa, yatay ve/veya dikey olarak ters çevrilir.colkeybelirtilmişse, saydam renk olarak işlenir. Eğerrotate(derece cinsinden),scale(1.0=%100) veya her ikisi de belirtilirse, ilgili dönüşüm uygulanacaktır. Bir tile'ın boyutu 8x8 pikseldir ve tile haritasında(tile_x, tile_y)olarak saklanır.
-
text(x, y, s, col)
(x,y) noktasından başlayaraksmetninicolrenk ile çizer. -
sounds
Seslerin (0-63) listesi. (Sound sınıfına bakınız)
Örneğin:pyxel.sounds[0].speed = 60 -
musics
Müziklerin (0-7) listesi. (Music sınıfına bakınız) -
play(ch, snd, [tick], [loop], [resume])
snd(0-63) sesinich(0-3) kanalında çalar. Eğersndbir liste ise, sırayla çalınır. Çalma başlangıç pozisyonutickile belirtilebilir (1 tick = 1/120 saniye). EğerloopiçinTruebelirtilmişse, müzik döngü şeklinde çalar. Çalma bitiminde önceki sesi devam ettirmek içinresumeiçinTruebelirtin. -
playm(msc, [tick], [loop])
msc(0-7) müziğini çalar. Çalma başlangıç pozisyonutickile belirtilebilir (1 tick = 1/120 saniye). EğerloopiçinTruebelirtilmişse, müzik döngü şeklinde çalar. -
stop([ch])
Belirtilen kanaldach(0-3) müziğin çalmasını durdurur. Tüm kanalları durdurmak içinstop()kullanılır. -
play_pos(ch)
ch(0-3) kanalının ses çalma pozisyonunu(ses no, nota no)olarak alır. Çalma durduğundaNonedöner.
-
ceil(x)
xdeğerinden büyük veya eşit olan en küçük tamsayıyı döndürür. -
floor(x)
xdeğerinden küçük veya eşit olan en büyük tamsayıyı döndürür. -
sgn(x)
xpozitif ise 1, sıfır ise 0, negatif ise -1 döndürür. -
sqrt(x)
x'in karekökünü döndürür. -
sin(deg)
degderecesinin sinüsünü döndürür. -
cos(deg)
degderecesinin kosinüsünü döndürür. -
atan2(y, x)
y/xiçin arktanjantı derece cinsinden döndürür. -
rseed(seed)
Rastgele sayı üretecinin tohumunu ayarlar. -
rndi(a, b)
avebaralığında rastgele bir tamsayı döndürür (a ve b dahil). -
rndf(a, b)
avebaralığında rastgele bir ondalıklı sayı döndürür (a ve b dahil). -
nseed(seed)
Perlin gürültüsünün tohumunu ayarlar. -
noise(x, [y], [z])
Belirtilen koordinatlar için Perlin gürültüsü değerini döndürür.
-
width,height
Resmin genişliği ve yüksekliği -
set(x, y, data)
(x,y) konumundaki resmi bir dizi string ile ayarlar. Örneğin:pyxel.images[0].set(10, 10, ["0123", "4567", "89ab", "cdef"]) -
load(x, y, filename)
Resim dosyasını (PNG/GIF/JPEG) (x,y) konumuna yükler. -
pget(x, y)
(x,y) konumundaki piksel rengini alır. -
pset(x, y, col)
(x,y) konumunacolrenkli bir piksel çizer.
-
width,height
Tilemap'in genişliği ve yüksekliği -
imgsrc
Tilemap tarafından referans alınan resim seti (0-2) -
set(x, y, data)
(x,y) konumundaki tilemap'i bir dizi string ile ayarlar. Örneğin:pyxel.tilemap(0).set(0, 0, ["0000 0100 a0b0", "0001 0101 a1b1"]) -
load(x, y, filename, layer)
layer(0-) sırasında çizim sırasındaki katmanı belirterek (x,y) konumundaki TMX dosyasından (Tiled Harita Dosyası) katmanı yükler. -
pget(x, y)
(x,y) konumundaki tile'ı alır. Bir tile,(tile_x, tile_y)tuple'ıdır. -
pset(x, y, tile)
(x,y) konumuna birtileçizer. Bir tile,(tile_x, tile_y)tuple'ıdır.
-
notes
Notaların listesi (0-127). Numara ne kadar yüksekse, sesin tonu o kadar yüksek olur ve 33'te 'A2' (440Hz) olur. Geri kalanı -1'dir. -
tones
Tonların listesi (0:Dreieck / 1:Quadrat / 2:Puls / 3:Rauschen) -
volumes
Ses düzeylerinin listesi (0-7) -
effects
Efektlerin listesi (0:Yok / 1:Kaydırma / 2:Titreme / 3:Sönme / 4:Yarı Sönme / 5:Dörtte Bir Sönme) -
speed
Çalma hızı. 1 en hızlısıdır, sayı ne kadar büyükse çalma hızı o kadar yavaş olur. 120'de bir nota uzunluğu 1 saniyeye eşittir. -
set(notes, tones, volumes, effects, speed)
Notaları, tonları, ses düzeylerini ve efektleri bir dize ile ayarlar. Eğer tonlar, ses düzeyleri ve efektler notalardan daha kısa ise, baştan tekrarlanır. -
set_notes(notes)
'CDEFGAB'+'#-'+'01234' veya 'R' karakterlerinden oluşan bir dize ile notaları ayarlar. Büyük-küçük harf duyarsızdır ve boşluklar yok sayılır. Örneğin:pyxel.sounds[0].set_notes("G2B-2D3R RF3F3F3") -
set_tones(tones)
'TSPN' karakterlerinden oluşan bir dize ile tonları ayarlar. Büyük-küçük harf duyarsızdır ve boşluklar yok sayılır. Örneğin:pyxel.sounds[0].set_tones("TTSS PPPN") -
set_volumes(volumes)
'01234567' karakterlerinden oluşan bir dize ile ses düzeylerini ayarlar. Büyük-küçük harf duyarsızdır ve boşluklar yok sayılır. Örneğin:pyxel.sounds[0].set_volumes("7777 7531") -
set_effects(effects)
'NSVFHQ' karakterlerinden oluşan bir dize ile efektleri ayarlar. Büyük-küçük harf duyarsızdır ve boşluklar yok sayılır. Örneğin:pyxel.sounds[0].set_effects("NFNF NVVS")
-
seqs
Kanal sayısıyla birlikte seslerin (0-63) iki boyutlu listesi -
set(seq0, seq1, seq2, ...)
Kanalların ses listelerini ayarlar. Eğer boş bir liste belirtilirse, o kanal çalma için kullanılmaz.
Örneğin:pyxel.musics[0].set([0, 1], [], [3])
Pyxel, kullanıcıları karıştırabilecek veya kullanmak için özelleşmiş bilgi gerektirebilecek "ileri düzey API'ları" içerir. Bu API'lar bu referansta belirtilmemiştir.
Eğer becerilerinize güveniyorsanız, bu bağlantıya bakarak muhteşem çalışmalar oluşturabilirsiniz!
Hata raporları ve özellik/geliştirme isteklerini göndermek için Sorun İzleyici kullanın. Yeni bir sorun bildirmeden önce, benzer bir açık sorun olmadığından emin olun.
Kodları manuel olarak test eden ve Sorun İzleyici üzerinden hataları raporlayan veya geliştirme önerileri sunan herkes çok memnuniyetle karşılanır!
Yama/düzeltmeler, pull request (PR) olarak kabul edilir. Pull request'inizle ilgili sorunun Sorun İzleyici'de açık olduğundan emin olun.
Gönderilen pull request, MIT Lisansı altında yayımlamayı kabul etmiş sayılır.
Pyxel, MIT Lisansı altındadır. Tüm kopyalarında veya önemli bölümlerinde, MIT Lisansı'nın şartlarının bir kopyası ve ayrıca bir telif hakkı bildirimi bulunması koşuluyla, bu yazılım özel yazılımlar içinde yeniden kullanılabilir.
Pyxel, GitHub Sponsorlarında sponsor arıyor. Pyxel'in sürekli bakımı ve özellik eklemeleri için sponsorluk düşünün. Sponsorlar, Pyxel hakkında danışmanlık hizmeti gibi avantajlardan yararlanabilirler. Detaylar için buraya bakınız.





