oyunlar nasıl çalışır?

Başlatan lener49fi, 30 Ekim 2011 - 16:59:32

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

lener49fi

arkadaşlar merhaba. yeri ve uygun başlık olmadığının farkındayım ama sanırım en doğru yer burası...

ben bir şeyi merak ediyorum, oyunlar temel olarak nasıl çalışır? bu konuda bilgi alabileceğim türkçe veya ingilizce kaynak var mı?

teşekkür ederim.

ekremsenturk

#1
Oyunlar birer program'dır. Sanırım soru'nu biraz daha detaylı sormalısın.

Oyunların nasıl geliştirildiğini merak ediyorsan: http://scratch.mit.edu/    Buraya bir bak.
2 Milyondan fazla proje arasında en fazla hedeflenenler, oyunlar. Çoğu projenin en büyük sorunu ise, kullanıcı ile iletişim oluşturabilmek. Dolayısı ile çoğu proje, kendi kendine oynayan oyunlardan oluşuyor. Bu tür projeler için kısaca öykü diye yeni bir kategori yaratılmış.

Sen de bu tür projeler ile kendini bir sınamak istersen, önce download seçeneğinden gereken programı indirmelisin. Programın ayarları Türkçe olacaktır. Ancak yardım bölümleri İngilizce. Yine yardım bölümünden İnternete bağlı iken Language resourges seçtiğinde, yardım bölümünde bulunan, kısa yardım ve uzun yardım bölümlerinin ve bir kaç ilave belgenin Türkçe çevirilerini hariçten indirebilirsin. Türkçe belgeleri, Rusca ve İsveçce arasında TR olarak işaretlenmiş olarak bulabilirsin.

Programı indirmeden önce karşına çıkacak kayıt bölümü, Kurumlar içindir. O bölümü geç. Programı kurduktan sonra projelerini yayınlayabilmek için yönlendirilen kayıt formu ise, ücretsiz yayın hakkı kazandırır ve de diğer projeleri indirip inceleyebilme imkânı tanır. Üye olmayanlar ise İnternet üzerinden Firefox ile seçtikleri projeleri çalıştırabilirler, deneyebilirler.

lener49fi

Bilgi için teşekkür ederim. Peki daha büyük oyunlar nasıl çalışır: örneğin bir Counter Strike, bir Fifa, Red Alert 2 nasıl çalışır? Similasyonlar nasıl çalışır? Bunların çekirdekleri mi var? Grafikler nasıl oluşuyor? Temelinde hepsi 1-0 ama bunlar nasıl değerlendiriliyor ve biz bunları algılayabiliyor?

ekremsenturk

#3
Donanım ne kadarını destekliyorsa, yazılımda o kadarını çalıştırabilir.

Bazı örnekler:
İlk Bilgisayar'lar sadece siyah üzerinde beyaz yazılar ve rakamlar verebiliyordu. Çoğu ilk Bilgisayarlar, daha ucuz olduğundan dolayı, Monitör görüntüsü yerine, delikli şerit çıktısı veriyorlardı.
İlk kişisel (veya zamanının tanımıyla boyutlarından dolayı Micro) Bilgisayarlar. DOS veya CP/L işletim sistemleri kullanıyorlardı. Renk destekleyen monitörler çıkmaya başladığında, DOS üzerinde açılabilen grafik pencereler icat edildiler ve bu pecerelerde oyunlar oynanmaya başlandı.

Teknoloji ilerledikçe, yazılımlarda ilerledi ve günün birinde önce DOS üzerinden, kullanıcı seçtiğinde, işletim sistem'ide grafik ortamda kullanılabilir oldu, ve daha sonraları sistem doğrudan grafik pencereden başlar, ve de sadece DOS kullanmasını bildiklerinden dolayı, grafik arayüz ile fazla bir şey beceremeyenler (var olduğu sanıldığından) için, bir DOS (Taklidi) konsulunuda, (Komutsatırı) grafik pencereden açılabilen sistemler geliştirildi. Yeni sistem'in adıda pencere (Windows) kaldı.

Windows'tan önce Apple ve IBM grafik arayüzlü sistemleri kullanmaya başladılar. İlk grafik pencere X Window olmuştu.
Monitör'lerin çözünürlükleri arttıkça, oyunların kalitesi ve boyutlarıda arttı. İlk gerçek ve popüler kişisel Bilgisayarın adı Atari. Süper Mario gibi oyunlar oynanabiliyordu.

Bir oyunun diğer program'lardan tek farkı, daha fazla donanım gereksiniminin olması. Her şey 0 ve 1 lerin kombinasyonundan ibaret ve işlemcinin bu kombinasyonlarla neleri yaratabileceğiyle sınırlanmış.

Oyun geliştirmek için en çok tercih edilen Programlama dili, Basic olmuştur (Geleneksel Basic). İnternet'te eski (DOS zamanından kalma) Basic oyunlarının kaynak kodlarını bulabilirsin. Günümüzde bu kodları çalıştırabilmek için yeniden düzenlemek gerekiyor.

İngilizce anlıyorsan. İnternet'te "Blast of with Basic" adlı bir kitab'ın Html formatına dönüştürülmüş dosyasını (Yasal olarak) indirebilirsin. Ticari değerini yitirmiştir. Micrsoft'un GwBasic derleyicisini ise DOSBOX isimli bir emulatöt ile Linıx'ta çalıştırabilirsin. Windows XP ile doğrudan çalışıyor. Diğer Win sürümlerinde denemedim. Muhtemelen yine DOSBoX gerekecektir sanırım. Çünkü yeni sistemler farklı bir EXE formatı kullanıyorlar.

Blast of with Basic kitab'ında, oyunlar biraz daha temelden anlatılıyorlar ve Basic ile ancak o şekilde kod'lanarak geliştirilebiliyorlar. GwBasic ise yine İnternet'te zip dosyası olarak, farklı sürümleri ile bulunabiliyor ve artık hiç bir Ticari değeri olmadığından , yine yasal olarak indirebilirsin.

Scratch kadar kolay olmayacağını şimdiden söyleyebilirim, ama çok şeyler öğrenebilirsin, ve çok sayıda örnekler ve farklı dillerde dokümanlar bulabilirsin. Yine günümüzdede Geleneksel Basic'i örnek alan çok sayıda derleyici bulabilirsin. Her derleyicinin kendi özelliklerinden kaynaklanan nedenlerden dolayı, kod'ları işlemesi veya kuralları farklı olabiliyor.

Geleneksel Basic ile ise günümüzün 3 boyutlu oyunlarını (Basic sürümünün desteklediği teknolojiye göre) geliştirmek mümkün değil. Ama daha eğitici. Scratch geliştirilirken örnek alınan ve açık kaynaklı olmayan StarLogo TNG ile ise bu mümkün. Tıpkı Scratch gibi bir arayüzü var ve aynen Scratch gibi kod'lanıyor. Üyelik kayıdı yaptırılmadan indirilemiyor ve ücretli olabilir.


ekremsenturk

Oyunlar hakkında biraz araştırdım ve gelişmiş oyunlarda "Game Engine" olarak tanımlanan Oyun Motor'ları kullanıldığını öğrendim. İlave olarak bazı optimizasyon araçlarıda (Midle ware olarak tanımlanıyorlar ) kullanılabiliyor. Ubuntu yazılım Merkezi'inde Ren'Py (veya renpy) var Oyun Motor'u kategorisinde. Ren'Py ile geliştirilmiş, yüzlerce oyun, İnternet üzerinden, Linux, Windows, Mac ( veya yakında İOS ) için, ücretli, ücretsiz indirilebiliyor.
Ren'Py'nin kendi kodları var, ancak bunların yetersiz kaldığı durumlarda Python içe aktarılılarak, Python ile geliştirilmiş ilave işlevleri oyunlarınıza ekleyebilirsiniz (Dokumanlarda tarifini bulabilirsiniz). Ren'Py kendisi Python ile geliştirilmiş bir Oyun Motoru.
Bu gün merak edip bir göz attım. İlk bakıştaki değerlendirmem ise, Scratch yeni başlayanlar için daha kolay, ve oyununlar haricindeki uygulamalarıda destekliyor. Henüz Ren'Py ile geliştirilmiş bir oyun denemedim, örnek Oyun ve Demo dışında. İngilizce anlayan ve birazda Python bilenlere önerebilirim. Tüm Ren'Py paketlerini indirdiğinizde, bir Demo tanıtım video'su ve /usr/share/doc/renpy klasörünün içinden, indeks.html üzerinden ulaşabileceğiniz bir de tatmin edici bir anlatım bulabilirsiniz. Ve tabii bir örnek Oyun.

travego0403

Bu başlığı zamanında kaçırmışım daha yeni görüyorum.Görmüşken de içimi biraz dökeyim.  :)

Oyunlarda temel olarak bildiğimiz programlardır. Bizim oyun dediğimiz programlar eğlenmek için yazılmış programlardır. Şöyle ki bir program düşünelim. Program bize bir matematiksel eşitlik veriyor cevabını istiyor. Bizde en kısa sürede cevabı bulup cevaba tıklıyoruz. Çok sıkıcı değil mi? :) Ama buda bir oyun. Kimisine görede o devasa büyüklükteki programlar oyunlardır. Bir başka örnekte son zamanların modası Angry Birds. Söz gelimi bir kişi fiziksel hesapları yapmak için atışlar konusundaki formülleri koda döker bilimsel hesap yapan bir program yazar. Bir başkasıda eğlence için bunları koda döker.  Yani anlatmak istediğim oyunlarda bildiğimiz bilgisayar programlarıdır.

Oyunlar bir çok disiplini içinde barındırır. Bunlar modelleme, fizik kanunları, müzik, yapay zeka... Bütün bunları göz önüne aldığınızda ne kadar zorlu bir iş olduğunu anlayabilirsiniz.Bu yüzden oyun yazmak genelde bir ekip işidir. Oyunları bitirdiğiniz zaman sonunda Credits(Türkçesi nedir bilmiyorum) bölümü ekrandan akar. Burada yüzlerce insanın ismi geçer. Bütün bunları toplarsak şöyle bir şey diyebiliriz. "Oyun yazmak, yapmak programlamanın Nirvanası sayılabilir."

Son iletilerde Oyun motorlarından bahsedilmiş. Bu konuda da şunu söyleyeyim. Yukarıda yazdığım gibi oyun yazmak çok zorlu bir işti. Bir oyun yazıldığı zaman o oyun için yazılan kodlar bir başka oyun yazarken çöpe atılıyor ve yeniden kod yazmaya başlanıyordu. Bu da tahmin edebileceğiniz gibi hoş bir şey değil. unun önüne geçmek için bu yöntem geliştirilmiştir. Oyun motoru ne demektir? Bu bildiğimiz manada bir motor değil. Bir  oyun yazdık ve bu oyun için grafik işlemlerini yapan bir kütüphane geliştirdiğimizi düşünelim. Ekrana şu modeli çiz diyoruz ve ekrana bu modeli çiziyor. Şu model sağa kaydır diyoruz modeli sağa kaydırıyor ve tekrar çiziyor.  Bu oyunu yazdık bitirdik diyelim. Bir başka oyun yazmak istedik bu sefer ekrana yine modelleri çizdirmek için yeniden çizim fonksiyonlarımızı yazmamız gerekir mi? İşte burada bir önceki oyundan kodlarımızı alıyoruz ve yeni oyunumuzda kullanıyoruz. İşte sana bir grafik motoru örneği. Aynı durum oyun içindeki fizik hesapları içinde geçerli. Bu sefer motorumuzun adı fizik motoru adını alıyor. Grafik motorlarına örnek olarak IW engine (Call of Duty), Cry Engine (Crysis), verilebilir. Linux üzerinde de Ogre 3D var. Son 1-2 haftadır bu motoru inceliyorum ve öğrenmeye çalışıyorum. Windows üzerinde de bu oyun motorlarının bazılarına arayüzlerde hazırlanmıştır. Objeyi harita üzerine sürüklüyorsunuz ve bırakıyorsunuz. Bunlar ilk başta çok ilgi çekici gelebilir. Fakat herhangi bir programlama dili bilmeden yapabilecekleriniz çok çok sınırlıdır ve sizi rehavete sokar. Forumlarda da bir çok kişi(yaş ortalaması da oldukça düşük olan) bu şekilde ortaya çıkıyor ve kısa süre içerisinde kayboluyor.

Oyunlar yazılırken en çok kullanılan yazılım dili C++dır. Çünkü en iyi performansın bu dil ile alındığı söyleniyor. Profesyonel oyun programcısı olmadığım için tam olarak bilmiyorum. Ama bir çok oyun motorunun yazıldığı ve desteklediği dilde C++dır. Temel C++ bilgiside yeterli değildir. Çok iyi algoritma bilgisi de gerektirir. En basitinden üzerinde engeller olan bir haritada karakterimiz engellere çarpmadan bir noktadan başka bir noktaya nasıl gider? Ayrıca oyun sektörüde bu dili benimsemiştir. Grafik APIsi olarak ta OpenGL ve Directx kullanılıyor. OpenGL platform bağımsızdır.Directx ise malum Microsoftun olduğu için sadece Windows üzerinde tam kapasite çalışıyor. Linuxun oyun sıkıntısıda bundan kaynaklanıyor. Çünkü oyun geliştiricileri öyle ya da böyle bu APIyi kullanıyor.

Bundan 2-3 ay öncesi Sudo dergisinde bir yazı dizisi hazırlıyorduk oyun programlama için. Burada SDL ve C++ kullanarak 2 boyutlu oyunlar için bir alt yapı hazırlamak gibi bir düşüncem vardı. Kişisel işlerimden dolayı bu yazı diziside aksadı. Orayıda inceleyebilirsiniz.

Biraz fazla konuştuk umarım fazla kafa ütülememişizdir. :) Benim kabaca anlatacaklarım bunlar. Eğer bu yazdıklarım hakkında daha fazla bilgisi olanlar yukarıda yazdıklarımda herhangi  yanlışlık varsa bildirilerse sevinirim. Çünkü bende kendimce oyun programlamaya ilgi duyuyorum ve daha fazla bilgi sahibi olmaya çalışıyorum ve araştırıyorum. İnsana kendi yazdığı oyunu oynaması o devasa oyunları oynamaktan daha eğlenceli geliyor onu da söyleyeyim. ;)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

burk

@ekremsenturk ve @travego0403 bu değerli bilgilerinizi paylaştığınız için çok teşekkür ederim, hiç ummadığım yerden bir çok şey öğrendim. :)