Bilgisayar Oyunları ve Matematiksel Fonsiyonlar Dora TÜTÜNCÜ Danışman: Bilgen EGE ÖZALKAN
İÇİNDEKİLER Önsöz 3 Final Fantasy 4 Hasar Fonksiyonları 5 Büyü Fonksiyonları 8 Sonuçlar ve Tartışma, Oyun Fikiri 10 Ek 13 Kaynakça 14 2
Giriş ve Projenin Amacı Bizlerin yaşamında vazgeçilmez bir kavram olan oyunun önemi herkesçe bilinmektedir. Bu denli önemli bir kavramı matematik ile ilişkilendirmek de mümkündür. Matematik ve oyun; bu iki kavram düşünülenin aksine birbirinden hiç de uzak değildir. Örneğin bir Angry Bird ün havada uçmasından, bir oyun karakterinin zıplayıp tekar yere inmesine kadar birçok aksiyonda matematikten yararlanılır. Üç boyutlu modelleme (3D), bir oyundaki karakterin silahının ateş edip hedefe doğru gitmesi, bir yarış oyunundaki arabanın 80mph ye kadar ulaşması matematiğin sayesinde yapılabilmektedir. Başka bir deyişle, oyun bir pastaysa, matematik de onun unudur. Matematik olmadığı sürece oyunlar da olamaz. Bildiğimiz gibi bilgisiyar oyunları şu an çok popüler ve birçok kişi tarafından oynanıyor. Ben de bu oyunları oynayan insanlardan biriyim. Matematiğin uçsuz bucaksız dünyasına ilgi duyduğum kadar oyunları da seviyorum. Eğitim yılımın 9. senesinde matematikte yeni bir konu olan fonksiyonlar benim ilgimi çok çekiyor. İnsan düşündüğünde, fonksyonların hayatımızda ne kadar büyük bir rol aldığını fark ediyor. Radyo istasyonlarından barkod numaralarına kadar ve tabii içinde oyunlar da olmak üzere her şeyde matematik yer alıyor. Çeşitli amaçlarla matematikle video oyunlarının arasındaki ilişkiyi işleyen birçok insan gibi 1, ben de bu yarışma için Bilgisayar Oyunları ve Matematiksel Fonsiyonlar adında bir proje hazırladım. Bu amaçla Final Fantasy adında bir oyun oynadım ve bir karakterin karşıdaki düşmana nasıl hasar verdiğini, nasıl kendisini geliştirdiğini inceledim. İlk duyuşta insanın kulağına çok basit gelebiliyor, aslında bu hareketler bir sürü karmaşık formüllerden oluşuyor. Bu formüller de doğal olarak fonksiyonlara bağlı. Ben de proje kapsamında bu fonksiyonları elde ettim. Bu doğrultuda da ortaya yeni bir oyun fikiri attım. Bu proje, oyunların biz gençlerce bilinmeyen taraflarına ışık tutacak, fonksiyonların nasıl daha çok kullanıldığını matematiksel verilerle kanıtlayak bu konu hakkında araştırma yapmak isteyen pek çok kişiye ışık tutacaktır. 1 http://gamestudies.org/1402/articles/murphy http://www.thirteen.org/get-the-math/the-challenges/math-in-videogames/introduction/16/ http://www.sciencedaily.com/releases/2015/01/150108144736.htm... 3
Final Fantasy Öncelikle, oynadığım oyunu anlatmanın, projeye ışık tutması açısından, faydalı olacağını düşünüyorum. Final Fantasy (ya da Final Fantasy 1), ilk olarak NES oyun konsolu için çıkarılmış bir rol üstlenme oyunu. Oyun, ilk olarak 4 tane karakterin seçimiyle başlıyor ve çeşitli canavarlar, insanlar ve yerlerle karşılaşıyorsunuz. Oyun karakter seçimi ve savaş sırasında belirli taktikler gerektiriyor. Her bir düşman farklı ve her biri ile değişik biçimde savaşılıyor. Oyunda savaştıkça EXP 2 (experience points, yani deneyim puanı) kazanıyor ve bunun sonucunda seviyenizi yükseltiyor ve güçleniyorsunuz. HP (health points, yani yaşam puanı) nizin 0 a inmemesine, MP (magic points, yani büyü puanı) nizi de doğru büyüleri seçerek verimli bir şekilde kullanmaya çalışıyorsunuz. Ben, oyun için gerekli olan 4 karakterimi Warrior (savaşçı), Thief (hırsız), White Mage (beyaz büyücü) ve Black Mage (kara büyücü) olarak seçtim. Warrior rolü ekibime HP ve gücü fazla ve birçok silahı kullanabilen bir elemanı katıyor. Thief, hızlı ve isabetli haraketler yapıyor ve bir kaçışı kolaylaştırıyor. White Mage ekibime avantaj sağlayıp HP lerini yükseltirken, Black Mage düşmanlara büyülerle hasar verme ve onları bazı özelliklerinden arındırmak için kullanılıyor. Karakterlerimin adları sırasıyla Darius, Edge, Liza ve Nero. Ve böylece oyuna başlamış bulunuyoruz. 2 Kısaltmaların devamı ekte verilmiştir. 4
Hasar Fonksiyonları Final Fantasy de hasar vermek büyük bir etken, çünkü hasar oyunun ilerleyişini etkileyen bir etmendir. Oyuna ilk başladığımda çok iyi özelliklerle başladığımız söylenemez, ama yine de net hesaplamalar yapmak mümkün. Karakterin bu bölüm için gerekli özelliklerini içeren tablo aşağıda verilmiştir; STR ATK ACR Darius 14 11 26 Edge 6 16 40 Liza 5 11 11 Nero 3 10 25 Oyundaki düşman, Garland ın özellikleri aşağıdaki tablodadır. HP Attack Intelligence 212 15 12 Defense Magic Defense 8 64 Agility Accuracy Evasion 6 27 12 Sırasıyla verilen hasarlar aşağıdaki gibidir. 1. Darius Attack 1 hit 18 2. Edge Attack 2 hit 20 3. Darius Attack 1 hit 6 4. Edge Attack 2 hit 36 (critical) 5. Darius Attack 1 hit 18 6. Edge Attack 2 hit 20 7. Edge Attack 2 hit 20 5
Bunlara göre hasar formülleri ve fonksiyonlar aşağıdaki bilgiler gibidir; Edge için; ATK: 16, STR: 6 ve ACR: 40 Eğer ACR 20 ise, 1 hit verir.buna göre hit sayısı fonksiyon grafiği şöyle oluyor; Hit sayısında rakamların 1.3 gibi değerlere kaydığı görülebiliyor. Oyunu oynarken burada anlatılan hit sayısı 1 diye gösteriliyor, ancak hasarı hesaplarken 1.3 değeri alınıyor (bu duruma aşağıda değinilecektir). DEF i 16 olan Garland a saldırıldığında 20 hasar veriliyor. Buna göre ATK si 16 ve STR si 6 olan Edge için; 16/2 + 6 = 14 ediyor. 14 ü 2 ile çarparsak 28 ediyor. 28-8 da eşittir 20. Buna göre hasar formülü; Hasar = (ATK/2 + STR)*(hits) DEF (düşman) Fonksiyon ile ifade edilecek olunursa; (ATK: a, STR: b, hits: c, DEF: d) a f : A R, (a,b,c,d) f(a,b,c,d) c. b d 2 Burada; R : Reel sayılar kümesini gösterip, A {(a,b,c,d) a,b,c,d R } dır. Sağlama yapılacak olunursa: 11 ATK si olan ve 14 Darius; (11/2 + 14)(1.3) -8 18 4 A R, 6
Peki ikinci atağımda niye 6 vurdum? Cevap: O anda düşman evasion kullandığı için (ekrandaki atak yapılınca, görsel efekt azalıyorsa, bu evasion (EVS) kullanıldı demektir) evasionunu da hasardan çıkaracağız yani 18 12 = 6 ediyor. Critical, daha fazla hasar vermemizi sağlayan bir hamledir. Tamamen olasılığa bağlıdır, bu olasılık da kullanılan silahın critical hit indeksi ile belirleniyor, yani 4 critical puanı olan bir silahı kullanıyorsanız critical hit yapma olasılığınız %4 tür. 3 Peki bu nadir olan olayı tutturduğumuzda nasıl bir formül olduğunu da buldum; Critical Damage = Damage*(1.3) Edge Crit. Damage = 28*(1.3) 36 Birkaç defa tekrar deneyerek Darius a da critical hit vurdurmayı başardım ve; Darius Crit. Damage = 18*(1.3) 23 Bu da aslında bir fonksiyondur; Tabii, düşmanlar da hasar veriyor, ama bu çok daha basit. Hasar almak da neredeyse hasar vermek gibi, sadece düşmanın ATK si hit puanıyla çarpılıp karakterin DEF sinden çıkartılıyor. Hasar = ATK (düşman) *(hits) DEF (karakter) 3 http://finalfantasy.wikia.com/wiki/critical_hit 7
Fonksiyon olarak ifadesi; (ATK: a, hits: b, DEF: c) f : A R, (a,b,c) f(a,b,c) a. b c Burada; R : Reel sayılar kümesini gösterip, A {(a,b,c) a,b,c R } dır. A 3 R tür. Örnek olarak; Cobra, Liza ya saldırıyor. Liza nın bu durumda 3 DEF si var, ve Cobra nın da 6 ATK si var Hasar = 6*1 3 = 3 Büyü Fonksiyonları Bu bölümde bir büyünün elementleri ilgilendirecektir. Elementler 3 e ayrılır: Ateş Buz Şimşek E = Efektiflik; Eğer düşman büyünün element cinsine karşı güçlü ise; 2 ile bölünür. (ya da %50 düşürülür.) Eğer düşman büyünün element cinsine karşı zayıf ise; 1.5 ile çarpılır. (ya da %50 arttırılır.) (Bu hesaplamalar olmaksızın Efektiflik oyunda büyüye bakıldığında görülebilecek bir değerdir) Hasarı hesaplama iki basamağı vardır; 1. Hasar = E 2. Eğer büyü düşman tarafından savunulmazsa ve saldırı başarılı olursa (ileride değinilecektir), hasar ikiye katlanır.* *İkiye Katlama Şansı: Bir büyü ya vurur ya da ıskalar. Bunun bulunması iki aşama ile belirlenir; 8
1. Bir büyünün vurmasının kök vurma şansı (KVŞ): KVŞ = 148 Eğer düşman büyünün elementine dayanıklı ise, KVŞ yu 0 alırız. Eğer düşman büyünün elementine zayıf ise, KVŞ ye +40 ekleriz. (Eğer düşman hem dayanıklı hem de zayıf ise KVŞ yi 0 alırız, ancak+40 da ekleriz.) Sonra, Büyü İsabetliliği = Bİ Büyü Dayanıklılığı = BD almak üzere; Vurma Şansı = KVŞ + Bİ BD Bunu fonksiyon ile ifade edecek olursak: KVŞ yu x, Bİ yi y, BD yi de z olarak alıp; f : A R, (x, y,z) f(x, y,z) x y z denilebilir.burada; R : Reel sayılar kümesini gösterip, A 3 R tür. KVŞ + SA nın en yüksek değeri 255 tir. Eğer bu değer geçilirse (ki bu çok olanaksız) KVŞ + SA yine 255 olarak alınır. Bu da bir fonksiyondur. 2. 0 ve 200 arasında rastgele bir numara seçilir. Eğer bu seçilen değer Vurma Şansı na eşit veya küçük ise, hasar 2 ile katlanır. Eğer bu değer çıkan sayıdan büyükse büyü ıskalar (Eğer büyü, hasar büyüsü ise verilen hasar yarılanır). Buna göre 0 her zaman başarılı iken 200 her zaman bir ıskanın anlamına gelir. 9
Sonuçlar ve Tartışma: Sonuçta, fonksiyonların oyunların en ufak detaylarında bile kullanıldığını ve çok değişkenli fonksiyonların da ayrı bir yere sahip olduğunu ispatladım. Yukarıdaki edindiğim fonksiyon bilgileri doğrultusunda kendim de bir oyun fikiri ortaya attım; Oyunumda, bir kelebeğin nasıl geliştiğini, nelerle karşılaştığı ve nasıl bu zorlukların üstesinden geldiğini konu olarak alacağım. Oyun Fikri Kelebeğin Etkisi Oyunda temel olarak açlık düzeyi, mutluluk düzeyi, keşif düzeyi, iletişim düzeyi, hayat süresi ve mutlu etme değerleri var. Oyunun amacı bir kelebek olarak varolduğunuz küçük kasabadaki diğer kelebeklerle iletişim kurma ve insanları mutlu etmek. Yanlız bu kolay olmayacaktır, çünkü kimi sizi saklamaya, hatta öldürmeye çalışacaktır. Öncelikle oyundaki zaman ve seviye atlama dan başlamak istiyorum. Bu oyunda, bir hafta 6 günden oluşuyor ve her gün gerçek hayattaki 20 dakikaya eşit. Oyuna ilk başladığımızda verilen yaşam değeri oyundaki 1 hafta, yani tam 2 saat. Ayrıca toplam 8 defa seviye atlanabilir.kasabada toplam 9 insan vardır. Bir kişiyi ne kadar kısa sürede mutlu ederseniz, o kişiden o kadar puan alırsınız. Oyunun asıl amacı ise, kasabadaki tüm insanları mutlu edip en çok puanı toplamak. Sonra, değerleri fonksiyon olarak işledim; 1. Yemek Değeri Yemek değeri ve yorgunluk düzeyi, 5 saniyede olan değerden 1 düşer. Eğer kelebek hızlanırsa, her saniyede 1 düşer. Yemek değeri en fazla 100 olabilir ve önemli bir etkendir çünkü; i. Eğer yemek yenilmezse (yani değer %25 in altına düşerse) hayat süresi %200 oranında düşer. ii. Yemek yenilmedikçe (yani değer %25 in altına düşerse) mutluluk ve iletişim değerleri yarılanır. Dolayısıyla bu değeri sürekli yükseltmemiz gerekir, ve bu da ancak yemek yiyerek olur. Buna göre; Açlık Düzeyi Arttırmı = Yemeğin Gıda Değeri/100 Fonksiyon olarak; f : A R, (x) f(x) x 100 10
2. Keşif Düzeyi Oyunda, etrafı keşfetmekten de puan alırsınız. Bu puan da aşağıdaki formülle belirlenir; Keşif Düzeyi = keşfedilen alan (m 2 ) /4 Eğer keşfedilen alanı x olarak alırsak f : A R, (x) f(x) x 4 Oyundaki toplam alan 1000 m 2 dir. Normal ilerleyişte kelebek 1m ile gider. Eğer hızlanırsa, ilerleyişte 5m gider. 3. Mutluluk Düzeyi Oyunda, kelebeğin mutluluğu insanların mutluluğu kadar önemlidir. Toplamda 100 dür Eğer mutluluk %25 in altına düşerse, kelebek potansiyel ilerleyişinin yarısı kadar gider. Bunun artması için, insanı mutlu etmesi gerekir. Eğer bir insan tamamen mutlu olursa, mutluluk tekrar 100 e çıkar. Mutluluğun artma formülü aşağıdaki gibidir; Mutluluk Düzeyinin Artışı = Mutluluğunun Artması / 2 Fonksiyon halinde bu formül; (x insanın mutluluğu artışını simgeler) f : A R, (x) f(x) x 2 Mutluluk da tıpkı açlık gibi 5 saniyede 1 düşer, ancak hızlanınca düşmede bir değişiklik olmaz. 11
4. İletişim Düzeyi İletişim düzeyi, bir insanı mutlu etmeye çalışırken ya da başka bir kelebeği ikna etmeye çalışırken kullanılan bir değerdir. İletişim kurarken toplam 9 seçenek vardır, ve her birinin etki düzeyi farklıdır. Seviye atlanarak bu seçeneklerden en kötüsü yok olur. Yani formülü aşağıdaki gibidir; İletişim Düzeyi = 9 Seviye Fonksiyon halinde bu formül; (x seviyeyi temsil eder) f : A R, (x) f(x) 9 x 5. Hayat Süresi Hayat süresi, oyunun uzunluğunu ve kelebeeğin yaşama süresini belirler. Herhangi bir etkileyen değer olmadığında, bu süre 2 saattir. Seviye atlayınca, yaşam süresinin düşüşü %10 azalır. Seviye, bir insanı tamamen mutlu edilinirse olabilecek bir olaydır. Oyuna başlanıldığında %100 oranında bir düşüş vardır, yani dakikada 1 düşer. Yukarıdakiler dışında, hayat süresinin tam bir formülü yoktur, ancak oyun için önemlidir ***Zaman bu oyunda çok kritik, ancak onu durdurmanın yolları da var. Zaman tohumu adını alan bu yiyecek, zamanı tam 5 dakika boyunca durduruyor. Bulunması zor, ama yine de değer. 6. Mutlu Etme: Sonuçta oyunun amacı insanları mutlu etmek. İnsanı mutlu etmek için istediği bir şeyi yapmalısınız. Bunun işin değeri 10 50 arasındadır. İnsanın mutluluğunun artması çok değişkenli aaşağıdaki çok değişkenli fonksiyon ile ifade edilebilir; (İşin değeri: a, Kelebeğin Mutluluk değeri: b, İnsanın mutlu olmaya karşı direnci: c) f : A R, (a,b,c) f(a,b,c) = a * b / 50 c Burada; R : Reel sayılar kümesini gösterip, A 3 R tür. 12
EK Kısaltmalar tablosu KISALTMA AÇILIMI TÜRKÇE ANLAMI EXP Experience points Deneyim puanı HP Health points Hayat puanı MP Magic points Büyü puanı STR Strength Güç ATK Attack Saldırı ACR Accuracy İsabetlilik EVS Evasion Kaçınma DEF Defense Savunma MDF Magic Defense Büyü Savuması AGL Agility Hız 13
Kaynakça http://astronomy.sci.ege.edu.tr/dersnotlari/ileri_matematik_ii.pdf https://www.desmos.com/ http://www.gamefaqs.com/boards/522595-final-fantasy/41701255 http://www.gamefaqs.com/nes/522595-final-fantasy/faqs/57009 http://finalfantasy.wikia.com/wiki/critical_hit http://finalfantasy.wikia.com/wiki/garland_(final_fantasy_boss) http://finalfantasy.wikia.com/wiki/magic_(command) http://finalfantasy.wikia.com/wiki/cobra_(final_fantasy) Temel ve Genel Matematik, 2. Cilt Prof. Dr. H. Hilmi HACISALİHOĞLU, Prof. Dr. Mustafa BALCI Yüksek Matematik, 2. Cilt, Çok Değişkenli fonksiyonlar Analizi - Hüseyin Halilov, Mehmet Can, Alemdar Hasanoğlu 14