Duyurular
Anket Başlığı: Sizce oyun programlamak için fazla matematik gerekli midir?
Evet
Hayır
[Anket Sonuçlarını Göster]
 
 
Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Matematik oyun programlama için gerekli midir?
#1
Lightbulb 
Matematik ve oyun programlama aslında yanlış anlaşılan bir ilişkiye sahiptir. Bir çok kişi iyi matematik problemlerini çözen veya iyi matematik yetenekleri olan kişinin iyi bir şekilde yazılımcı ya da programcı olduğunu düşünür fakat bu öyle değildir. En iyi üniversitelerden mezun olan toplumun genelde "zeki" olarak tanımladığı insanlar programcılıkta tam anlamıyla bir andaval olabiliyor. Bir kişinin oyun yazılımı yapması için matematik gerçekten ne kadar gereklidir? 

İşte bu sorunun cevabı, gerçekten fazla matematik bilmenize gerek yok. Peki neden? Öncelikle neleri bilmemiz gerekiyor ona bir bakalım. 

Toplama, çıkarma, bölme ve çarpma: Bildiğiniz gibi çok kolay değil mi? Bir canavar oyuncuya saldırdığında, oyuncunun can puanını -20 düşür. DPS(Bir saniyedeki hasar) TOPLAM HASAR/60 = DPS gibisinden.  Pekala! bunun gibi şeyleri türetebiliriz varsayıyoruz. 

Mod Alma: Bir sayının bir sayıya bölümünden kalan demektir. Örneğin 10 sayısını 8'e böldük kalan 2, o zaman 8 sayısı mod10'da 2'ye eşittir demektir. Bir sayının tek veya çift olduğunu öğrenmek için o sayıyı 2'ye böleriz, eğer sayı tam bölünüyorsa(yani kalanı == 0) çift, eğer sayı tam bölünmüyorsa(yani kalanı==1) ise o sayı tektir. 

Oyuncu bir zar attı ve çift gelirse +20 sağlık puanı kazanıyor. Tek gelirse Burada iki ihtimalimiz var. Zarların üstündeki sayılar 1'den 6 ya kadar 3 tane çift 3 tane tek sayımız var. Ya çift gelecek ya da tek. Peki şöyle düşünelim

örneğin;
zar = 1 ile 6 arasındaki rastgele bir sayıyı random fonksiyonuyla aldık. 
zar sayısının mod 2 de kalanı eğer 0 ise bu sayı çifttir ve +20 sağlık puanı ekle
eğer değilse -20 sağlık puanı ekle. 

Çok basit değil mi? Sadece

Yüzde Alma: Yüzde almak sadece bir verinin daha derli toplu olduğunu göstermesi anlamından başka bir şey değildir. aslında 3 dediğimiz sayı 3/1 fakat yüzde üç dediğimiz sayı 3/100 yani yüzde üç, yüz tane elmadan sadece üçü demek. Diyelim bir sayının %54'ünü alacağız, sayımız 350 olsun 350*0.54 sayısı bize o sayının %54'ünü verir.

Diyelim ki bir canvarın kalan canının yüzde kaç olduğunu bulmak istiyorsunuz. Bunu basit bir oran orantı ile de yapabilirsiniz. Canavarın toplam canı 300 olsun. Canavar saldırdık ve canavarın sağlık puanı 200 oldu. Diyoruz ki, 300 de 100 ise 200'de kaç? işte bunun cevabı bize verir 

Değişken şeklinde düşünelim
KALAN_CAN = TOPLAM_CAN - VERİLEN_HASAR;
KALAN_CAN*100/TOPLAM_CAN gibisinden formüller üretebilirsiniz.


Negatif Sayıları Bilmek: Evet, -1 sayısı, -2 sayısı. -1 * -1 = +1 olur. -5 * 3 = -15 olur. vs..

Kartezyen Koordinat Sistemi: Bilgisayar sisteminde (0,0) orjini belirtir( Ekranın sol ve üst köşesindeki yer) X ekseni ilk bileşeni, Y ekseni ise ikinci bileşeni ifade eder. Yukarıdan aşağıya doğru çektiğimiz zaman Y değişkeni değişir. Soldan sağa doğru fareyi çektiğimizde X değişkeni değişir.

Pisagor Teoremi: Basitçe a^2 + b^2 = c^2.  (x1, y1) ve (x2, y2)  yani iki tane 2 boyutlu nokta üzerindeki uzaklığı bulmak için kullanıyoruz.

Basit Cebir: x + 5 = 7 ise x=2'dir. Hepsi bu evet. 

Onlu, ikili ve onaltılı sayı sistemlerini bilmek: Ondalık sayılar, on basamaklı olduğumuz sayılardır.(Ellerimizde 10 tane parmak var ondan insanlar 10 demiş.)  16'lık sistem programlamada kullanılır çünkü ikilik(0 ve 1 den oluşan sayılar) sistemin kısaltmasıdır. Bu konu daha detaylı olduğu için burada açıklamayacağım. https://tr.wikipedia.org/wiki/On_alt%C4%...B1_sistemi buradan daha detaylı şekilde bakabilirsiniz.

Gelişmiş Seviye Oyun Programcılığı: Trigonometri Doğrusal Cebir ve Matrisler: Belki de matematik bilmeyenler için en zor kısıma geldik. 3B şeyler genellikle trigonometri ve doğrusal cebir (matrislerle uğraşılan) kısmı için temel düzeyde bilinmesi gereken şeylerdir.  Vektörlerde toplama, çıkarma, çarpma, toplama gibi temel oluşumları bilmeniz gerekli. Trigonometrideki cos,sin gibi temel şeyleri bilmeniz ve matrisler sayesinde oyundaki bir kübün yönünü, dönüşümünü ve çevrilmesini sağlayabilirsiniz. Eğer Unreal Engiene, CryEngine veya Unity 3D gibi oyun motorlarını kullanıyorsanız gerçekten işiniz çok kolay demektir. Basit bir lineer cebir eğitimi ile yapı-taşlarını anlayacaksınız. 

Görüldüğü gibi matematik oyun programlamada abartılı bir şekilde kullanılmaz hatta hiç matematik bilmeden oyun programcısı olan bir çok kişi vardır. Fakat eğer bir depremin daha önceden hesaplanmasını bulmak istiyorsanız o zaman deli gibi bir matematik bilgisine ihtiyacınız vardır. Ya da bilgisayar bilimleri ile ilgili en büyük fibonacci sayısını bulacaksanız o zaman geniş çaplı bir matematik uzmanı olmanız gerekli.

Peki oyun programlayıcısı olmak için ne gerekli?
Öncelikle oyun programlayıcısı oyun geliştiriciliğinin bir kolu olduğu için oyun programlayıcılığının da belirli kolları vardır. Oynanış programlama, Ağ Programlama, AI(Yapay Zeka) Programlama, Grafik Programlama gibi... Öncelikle eşsiz bir şekilde algoritmaları kafanızda kurmanız lazım. 

En basitinden diyelim ki bir oynanış programcısısınız ve envanter sistemi yapacaksınız. Ve itemleri envanterinizden ekleyip çıkarmak istiyorsunuz. Aşağıdaki kodu sadece anlamak amacıyla yazdım komik gelebilir Smile

tamsayı can = 3;
oyuncu sağlığı = 100;
do
{
   a 8 elemanlı bir dizi olsun
   a.ekle("kumaş pantolon");
   a.ekle("altın kılıç");
   a.cikar("altın kılıç");
   düşman vurursa
   eğer oyuncunun canı 0 ve 0'dan azsa canı bir azalt
   
   for(i=0;i<=8;i++){
       a nın i. elemanını yazdır
  }
}
while(can!=0);

gördüğünüz gibi matematik sadece toplama ve çıkartma...

vereceğim bir diğer örnek ise pacman oyununun algoritması (temel bazlı alınmıştır)

7 saniye boyunca dağılın, ardından 20 saniye boyunca kovalayın.
7 saniye boyunca dağılın, ardından 20 saniye boyunca kovalayın.
5 saniye boyunca dağılın, sonra 20 saniye boyunca kovalayın.
5 saniye boyunca dağılın, sonra da Kalıcı olarak Chase moduna geçin.

bad-decision.png

Pathfinding(yol bulma) sistemi temel bazlı şöyle işliyor. kırmızı noktada karakterimiz olsun, kırmızı hayalet en kısa yol için 4, en uzun yol için 9 hamlesi var diyelim. Diğer hayaletlerin sayısı ile harekete geçiyor(Muhtemelen bir döngü içerisinde) eğer en kısa yol 4 ise diğer hayaletler en uzun yolu seçiyor. Kısacası anlatmak istediğim yine matematik yok. Sadece çizgi üzerinden aralarında kaç tane kare fark var bunu bulup ona göre karar vermek.
3D oyunlarda da NPC lerin sizi takip etmesi sadece vektörlerin ve objelerin basit oluşuyor. Sadece lineer koordinatlar değişiyor.


3B veya 2B grafiklerin oluşması için matematiği bilmenize gerek yok çünkü openGL, webGL, Vulkan ve Direct3D gibi grafik kütüphaneleri bunu çok kolay şekilde sağlıyor. Sadece nasıl kullanabileceğinizi öğrenmeniz lazım. Fizik konusuna gelirsek o da aynı şekilde. Eğer NVDIA'da çalışacaksanız tabii ki müthiş bir fizik bilgisine sahip olmanız gerekli ama bir Blizzard veya EA'da oyun programcısı olarak çalışacaksanız

Bunun dışında pygame(Python için), Allegro, SFML, SDL(C++) gibi oyunları yapmak için içinde klavye giriş çıkışı, ses yönetimi, ağ yönetimi ve grafik kütüphaneleri barındıran kütüphaneler mevcut. Bunların nasıl kullanıldığını öğrenirseniz, matematiğe gerek kalmayacaktır. Kendi oyun motorunuzu yapmak istiyorsanız(ki bu gerçekten çok çok çok zor bir iştir bu sefer gerçekten matematiğe ihtiyaç duyacaksınız.)oyun motoru derken sadece bir oyunun motorundan bahsetmiyorum geniş çaplı bir oyun motorundan bahsediyorum.)



Bu yazı yabancı bir blog adresinden alınıp kendi tecrübelerimden örneklendirerek aktarılmıştır. Bu konu tartışmaya açıktır.
"Türk, övün, çalış, güven." (Mustafa Kemal Atatürk) - http://khubur.com
Cevapla
#2
Oyun programlama için değil de normal programlama için algoritma vs. gibi yerlerde gerekli.
Wanna come?
Ara
Cevapla
#3
Yazıda belirttiğim gibi kesinlikle gerekli ama öyle çok şey bilmenize gerek yok. Genellikle basit şeyler  Rolleyes
"Türk, övün, çalış, güven." (Mustafa Kemal Atatürk) - http://khubur.com
Cevapla
#4
Düz mantıkda oyun programlama için bir sürü şey gerekli. Fakat tutupda matematik profesörü, programcı deha olmanız gerekmiyor. Ana mantıkda bilmeniz işinize yarayacak kadar geliştirmeniz gerekiyor bana göre. Ama ne kadar iyi bilirseniz okadar rahatlatır sizi ve faydalı olur. Ama ana mantık kesinlikle hepsi için şart. Buna 3D den animasyona, Video editten müziğe, kodlamadan matematiğe kadar bir çok şeyi katabiliriz. Çok iyi bir grafiker olmayıpda çok iyi bir coder ım diyorsan basit grafiğe sahip oyunlar yapabilirsin ve güzelde olabilir. Yada tam tersiysen harika grafikler ama basit mantıkda şeyler yapabilirsin. Bunlar sadece örnek. Gerisi neyi nekadar geliştirdiğinize göre değişir. Gereksiz diyip salmamak lazım bana göre. Öyle yada böyle faydalı olacaktır. ^^
Copyright © 2010 by RecLast All rights reserved.

Ben bir oyuncuyum…
Bir hayatım olmadığından değil…
Yaşayabilecek bir çok hayatı seçtiğimden…
Cevapla
 


Hızlı Menü:


Unreal Engine Türkiye

Bu web site sadece fan ve destek için açılmıştır. Epic Games ile bir ilgisi bulunmamaktadır. This forum is only for fans and support. It has nothing to do with Epic Games.
You can contact with us using admin@unrealengineturkiye.com mail address.