27 Mart 2017 Pazartesi

VR Teknolojileri için Yazılım Geliştirin

Günümüzde pekçok farklı ürün ile kendisini sürekli olarak geliştiren VR (Virtual Realisation - Sanal Gerçeklik) teknolojileri; her bütçeye uygun birbirinden farklı araçlara sahiptir. Bu gelişen teknolojinin imkanlarını ve geliştirilen başlıca ürünlere baktığımızda temel olarak VR gözlüklerini ve VR platformlarını görmekteyiz.

VR Gözlükleri

Google Cardboard, oldukça basit bir kuruluma sahip ve ekonomik bir çözümdür Cardboard 5TL ila 20TL gibi bir fiyatla alınabilmektedir. Google Cardboard'un üzerinde bulunan barkod okutularak sanal gerçeklik deneyimine giriş yapılabilir. 6" telefonların bile takılabildiği Google Cardboard için geliştirici olarak (https://developers.google.com/vr/) uygulamalar oluşturabilir. Ürünün dezavantajları Motion sickness (baş dönmesi ve mide bulantısı) yapma riski yüksektir.


Case 4u vr box 3.0 Türkiye'de ençok satan ve Çin'den ithal edilen bir sanal gerçeklik gözlüğüdür. Yanında bulunan ufak kumanda ile temel haraketler gerçekleştirilebilir. 25TL ila 35TL gibi bir fiyata internetten temin edilebilir Ürünün dezavantajları Motion sickness (baş dönmesi ve mide bulantısı) yapma riski yüksektir.



Samsung cep telefonu kullananlar için uygun bir alternatif olan Samsung VR 119TL gibi bir fiyattan satın alınabilir. Daha önceki ürünlere göre daha profesyonel bir üründür. Ürünün dezavantajlarına baktığımızda, uygulamaların ve araçların oldukça pahalı ve içerik sayısının yetersiz olduğu görülmektedir. Motion sickness dediğimiz baş dönmesi ve mide bulantısı yapma riski diğer araçlara göre daha az olsada yinede 10 dakika ve üzeri kullanımlarda bu sorunlar oluşabilmektedir.


Microsoft Hololens oldukça gelişmiş bir VR gözlüğüdür. 3000$ gibi bir fiyattan yurt dışında satışı başlamıştır. Pek çok alanda kullanıma uygun bir yapıya sahiptir. Ürün ile ilgili uygulamalar geliştirmek için detaylı bilgi https://www.microsoft.com/microsoft-hololens/  sitesinde bulunmaktadır.





VR Platformları


HTC vive tarafından üretilen bir teknolojidir. Sistemin kullanımı için güçlü bir oyun bilgisayarına ve boş bir odaya ihtiyaç duyulmaktadır. 3000$ gibi bir fiyata satın alınan bir ürünün internet adresi https://www.vive.com/eu/




Virtuix Omni gerçek bir VR platformudur. Omni sanal gerçeklik için geliştirdiği pek çok ürünle rakiplerinden farklı bir yerde konumlanmaktadır. Türkiye'de 10.000$ gibi bir fiyatla satılan platform için uygulamalar geliştirilebilir (http://www.virtuix.com/resource-center/)




Bulanık Mantık

Tarihsel Geçmişi:
Bulanık küme teorisi türetilen
1965 yılında University of California, Berkeley Prof Lotfi Zadeh tarafından geliştirilmiştir.
Bulanık küme teorisi geleneksel ("net") küme teorisininden farklıdır.
Geleneksel küme teorisi: Bir nesne ya bir dizi ya da aittir.
Bulanık küme teorisi: bir nesne bir dizi "kısmen ait" olabilir
Örnek: Uzun ve Kısa: iki takım insanları sınıflandırmak için
Orta uzunlukta olan biri kısmen o gruba ait olarak sayilır.


Bulanık Küme Üyeleri

Geleneksel Küme Teorisi: Bir nesne dizi üyesidir.
Bulanık Küme Teorisi: Bir nesne kısmen bir dizi üyesidir.


Üyelik Fonksiyonu

Örneğin, Kısa, Orta ve Uzun üç grup için üyelik fonksiyonları tanımlayabilir. Kişinin boyuna göre hangi grupta olacağı belirlenir.
Kimi oyunlarda anlık yapılan yer tespiti gibi.



Mantıksal Operatörler

Programlar içerisinde sürekli olarak kullanılan mantıksal operatörlerin doğru ve yerinde kullanılması. Ara değer ve eşittlik değerlerine bakılarak sistemin test edilmesi önemlidir.

 Bulanık Mantık Operatörleri

Gelen veriye göre program içerisinde kullanılan mantıksal operatörlerin kullanımları farklı olabilir.
NOT:
AND:
OR:


Kurallar

Örnek olarak mavi olarak tanımlanan bir grupta bulunan bir nesne diğer mavi nesnelerine saldırmaması gerekmektedir.
Diğer nesnelerden biri kırmızıya döndüğünde saldırı yapılacak şekilde kuralın tekrardan tanımlanması gerekmektedir.
Anlık olarak durum kendi ile tutarsız olarak görünsede kendi içinde belli bir bulanık mantık sorusu olarak karşımıza çıkmaktadır.
Burada anlık duruma göre karar değişecektir. Bunun kolay bir şekilde yapılması için bir karar tablosu içeriinde bu kuralların yazıldığı bir tablo oluşturmak yararlı olacaktır.


Bulanık Mantığın Bir Oyuna Uygulanması
Kullanılan Bulanık Mantık Yöntemi ile oyuncunun yapacağı hareketleri belirleyip ona karşı bir karşı duruşun tanımlanması gerkmektedir.
Yanda Hareket İle İlgili Tablo örneği verilmiştir.
Eğer ilk hareket yumruk,İkinci Hareket yumruksa üçüncü hareketin aşağıdan gelen bir tekme  olma ihtimali daha çoktur.

Kullanıcıların Hareketlerinin Tahmini


Nasıl Karar Tablosu Oluşuturulacak
İlk ve ikinci Tablo sutununa olası bütün sonuçlar yazılır.
Kullanıcı oyun sırasında yaptığı hareketler kaydedilir.
Örnek olarak kullanıcı yumruk, yüksek tekme hareketlerini yaptıktan sonra yumruk atma ihtimali ve yüksek tekme ihtimali daha fazladır.
Daha önce yaptığı hareketlere bakılarak.

Kullanıcının Hareketini Tahmin Et!

3. Hamlede hangi hareketi yapacaktır?



Olasılık

Eğer gelecek hareketi bilsek okuncu kanaza bilirmi?
Peki olasılı nasıl belirleyeceğiz!
Örnek: 100 hareketten 30 hareket yumruksa yumruk yani punch yüzdesi P(punch) = 0.3
Matematik Nerelerde ?

P(AuB) = P(A) + P(B) – P(AnB)
Son 100 günün; 70 günü hava kapalı ve 35 günü yağmurlu oldu başka hava koşulun da bir günde olmadı!
Kaç gün hem kapalı hemde yağmurlu oldu?



AI nedir?

Oyun programlamadaki yapay zeka; oyun içierisindeki kullanıcı dışındaki bütün objelerin insana özgü bazı davranışları oluşturmasını sağlamaktır.
Örnek Olaraak
Araba oyunundaki diğer arabalar.
Ateş ettiğiniz canavarlar
RTS oyunlarındaki rakip nişancı

AI Kullanımı

Yapay Zeka Kullanıcının Herbir yeni hareketine göre tekrar kendini çalıştırarak yeni bir konum belirlemelidir.
Her Yerde Kullanılmalımıdır?


Yapay Zekanın Amacı
Amaç Temelli Ne Yapacağı sıkı kurallarla verilmiş. Bu hareketi yap şu hareketi yapma.
Hemen değişen durumlara yanıt verme.
Knowledge intensive - the AI knows a lot about the world and how it behaves, and embodies knowledge in its own behavior
Karakteristik olarak sadece bazı olaylara yanıt verme.
Ayrıca AI sayesinde
AI hızlı ve kolay geliştirmeye yardımcı olur.
CPU ve RAM kullanımını azaltır.


Yapay Zekaların Video Oyunlarında Kullanımı

5-10% CPU Gerçek Zamanlı
25-50% CPU for Durum Temelli

Takip /Kaçış davranışları
Grup davranışları
Sonlu durum makineleri
Adaptasyon / Öğrenme


Takip Kaçma

En kısa yol algoritması bu durumlar için kullanınıla bilir. Canavarın oyuncuyu en kısa yoldan yakalaması. Araba yarışında diğer arabanın oyuncuyu en kısa yolu bularak geçmesi.


Örnek Kod

Oyunu oynayan ile Oyundaki canavarın konumlarının alınıp
en kısa yoldan canavarın kullannıcı üzerine saldırması

Predator is at coordinates (predatorX,predatorY).

Prey is at coordinates (preyX,preyY).

if (predatorX > preyX) {
   predatorX--;
} else if (predatorX == preyX) {
   // do nothing
} else {
   predatorX++;
}

if (predatorY > preyY) {
   predatorY--;
} else if (predatorY == preyY) {
   // do nothing
} else {
   predatorY++;
}

Algoritmayı Geliştirmek

En Kısa Yolun Bulunması

Algoritmayı Geliştirmek

Bresenham’s algoritması ile En Kısa yolun farklı bir şekilde bulunması


Ekran ile Bu işin bulunması

Ekrandaki Pixel ilede bu işler gerçekleştirilebilir.

 Örnek Bir Kaçma Algoritması


Terimleri Tanımlama:

Closing velocity, Vc = Vprey – Vpredator

Range to close, Sc = Pprey – Ppredator

Time to close, Tc = | Sc | / | Vc |


Intercept position hesaplaması

Intercept position = Pprey + Vprey x Tc


Yol Bulma


Problem Oyuncu verilen yollar içerisinden en kıza olan yolu bulması gerekmektedir.
Yol Bulma Algoritması
En etkin şekilde en az maliyetle en güzel yolu bulma
Etkinlik
Yolun Durumuna Bak
Çevrenin Durumuna Bak
Noktaları Kullan.




Pseudocode


Add starting node to open_list

while (not_empty(open_list)) {
    current_node := node from open_list with lowest cost
    if (current_node==goal_node) {
        path complete
    } else {
        move current_node to closed_list
        for each node adjacent to current_node {
            if ((node is not in open_list) && (node is not in closed_list)) {
                move node to open_list
                assign cost to node
            }
        }
   }
}




Yolu Nasıl Kat Edeceğiz


Add starting node to open_list

while (not_empty(open_list)) {
    current_node := node from open_list with lowest cost
    if (current_node==goal_node) {
        path complete
    } else {
        move current_node to closed_list
        for each node adjacent to current_node {
            if ((node is not in open_list) && (node is not in closed_list)) {
                move node to open_list
                assign cost to node
            }
        }
   }
}

Yolun Tamamlanması yada yolda bir yer katedildiğinde hangi kodların çalışacağı liste içerisinde nasıl kullanılacağı verilmiştir.


Maliyeti Nasıl Belirleyeceğiz?


Maliiyet = Başlangıç Maliyeti + Sezgisel

Başlangıç Maliyeti= Başlangıç Noktasında olan maliyet

Sezgisel = Hedef Düz bir çizgi gibi ulaşılabiliyormu?


Örnek-1

Örnek Devam

Örnek  2


 Graph Yol Bulma


Maze tarzı Bir oyunda Yolbulma.




 Bir Graf oluştur.
Düyümler Sistem İçerisinde Tanımanmış Olmalı

 Her Birinin Belli Bir Maliyet Hesabı Olmalı.



Graph En Kısa Yol (En Kısa Yolu Bulma Algoritması)

Kordinat Sistemi


3-D grafikler için kordinat sisteminin iyi algılanması gerekmektedir. Her bir  noktonın 3-D sistemde x, y ve z kordinatlarına sahiptir.
O noktasının kordinatının gösterimi (0,0,0)
Çizgi

Bir çizgi uzayda 2 nokta arasındaki düz bir şerit ile ifade edilir.
İki temel noktası vardır.
Sonuç noktasına vertex adı verilir.
Her bir vertex noktasınında 3-D  bir kordinatı vardır. 3 Boyutlu sistemlerde kullanılan.


Poligonlar

Poligonlar ise 2D şekillerdir vektörlerden oluşuturlar.
Bir dizi vektörün farklı açılarla birleşmesi ile poligonlar ortaya çıkar.




Küp


3D bir obje oluşturmak için 2D olan objeleri bir araya getirmek gerekmektedir.
Örnek olarak bir (3D) Küp oluşturmak için. 6 tane kare (2D) kullanmak gerekmektedir.



Renkler

Bilgisayarda bulunan renkler RGB kırmızı, yeşil  ve mavinin birleşimi ile RGB kodları kullanılarak oluşturulur.
RGB formatı Red, Green and Blue şeklindedi.
Aşağıda bazı temel renk örnekleri gösterilmiştir.
(0,1,0) is green
(1,1,1) is white
(0,0,0) is black
(1,1,0) is yellow




Kamera


Bir resim olması için bazı temel yapıların sistem içerisinde olması gerekmektedir.
Sonrasında kameranın hangi noktada olacağı ve nereye odaklanacağı belirlenmelidir.
Sonrasında ise kullanılan yapılar ile objeler sistem içerisinde oluşturulması gerekmektedir.


Oyun Motorları

Bazı Ücretsiz Oyun Motorları Aşağıdaki Listede verilmiştir.
irrLicht: http://irrlicht.sourceforge.net/
Bu oyun motoru ücretsiz olup. Microsoft Visual C++ ile geliştirilmiştir.
Cube: http://www.cubeengine.com/cube.php4
Ogre: http://www.ogre3d.org/


Oyun Nedir?

Oyun: Bir faliyete ilişkin düşünce ve duyguları ortaya çıkartan eylence odaklı aktivitedir.
Oyunun Temeli
Kurallar bütünü içinde tanımlanmış bir obje olmalıdır.
Gerçek : İnsanlar oyunları oynamayı sever
Nedenmi?Bununla ilgili pek çok teori ortaya atılmıştır fakat hiç biri tam olarak bu olayı açıklayamamıştır. 
Kısa cevap: İnsanlar oyun oynamayı sever çünkü bu eylencelidir.


Oyun Oynamanın Amacı
 
Oyun oynamak duygusal bir tepki uyandırır ve insanlar bu duygusal tepkileri severler bundan dolayı oyun oynarlar
Örneğin: gerginlik, sürpriz, korku, merak, macera, meydan, fantezi
Güvenli bir ortam
Oyuncuların sonuçları gerçek  değildir. Buda bize güvenli bir ortam sağlar (neredeyse)
Oyun içindeki bir karakter 100m den atlaya bilir  ama siz? Buda bize güvenli bir ortamın oluşmasını sağlar.

Oyun geliştiricisin hedefi: insanlar oynarken o oyundan zevk aldıklarında ortaya çıkan mutluluk ve maddi kazanç olacaktır.

Ama Nasıl?

İşte sizin için amaca giden bazı temel ipuçları.

İnsanlar  genellikle hoşlandığı oyunlara bakarar nasıl olduğunu biraz anlayabiliriz
İç deneyimi: Oyunun tarafından sağlanan fantezi, görsel ve deneyimler.
Sabit eğlenceli: Strateji ve zorlu problem çözme keyfi
Kolay eğlenceli: Bazı kolay keşif ve macera keyfi
Sosyal deneyim: Bu ??takım çalışması, rekabet, tanıma, manipülasyon gibi sosyal deneyimler.


Kurallar

 
Çoğu oyunun kendi içerisinde kuralları vardır.
Kurallar kimi durumlarda belli yada belirsiz olabilir.
Açık kurallar net ve tartışmaya açık olmayan herkes tarafından anlaşılır biçimdedir
Belirsiz kurallar ise çoğu durumda oyuncunun oyuna olan ilgili kaybetmesine neden olur. (Neden Angry Bird Çok tuttu? Kural Belli)
Örnek: Eğer uçurumdan düşerse oyun sona erer.
Belirsiz Kurallar Bağlayıcı Değildir. Bundan dolayı bu kurallar formalde değildirler.
Bazı durumlarda ise gizli kurallar oyuncular arasında rekabetin artmasına yol açaar bu sayede oyunun oynanma isteyini arttırada bilir.
Bazı durumlarda örtülü kurallar oyunun temelini oluşturabilir.
Bu gizli yada örtülü kural oyun içeriğine bağlı olarak oluşturulmalıdır.

Öncül Model
 
Her oyunun bir dayanak noktası vardır.
Oyun kendi içerisinde bir hayal dünyasına sahiptir.
Bir araba yarışının temel dayanak noktası arabayı kullanıp bitişe ilk sırada varmaktır.
Yada bir spor oyununda oyuncuları kontrol edip amaca ulaşmak.
Yada diğer oyunlarda verilen görevi başarmak.
Her oyunun bir modeli vardır ve bir oyun bir model oluşturur.
Model ile konu arasında bazı farklılıklar olsada aralarında derin bağlantılar vardır.
Örneğin bir tuş ile bir oyuncu kontrol edilirken bir oyunda diğer bir oyunun modelinde aynı tuş ile çöp atılabilir.
Normalde bir insan çöp atmayı sevmezken Sims oyununda bu iş ona zevkli gelebilir.


Belirsizlik ve Rasgelelik
 
Belirsizliklerin olmaması için, her zaman aynı giriş ve çıkış durumu göz önüne alındığında, aynı şekilde yanıt veren bir sistem olmamalıdır.
Bir oyun belirleyici(deterministik) olmalı mı?
Belirsizlik çok olursa oyun sıkıcı olurmu?
Cevap: Belirleyicilik bazı durumlarda avantajdır. Genelliklede istenilen bir durumdur.


Oyun Platformları

Oyun Pilatformları:
Kişisel Bilgisayar
Konsol (PlayStation, Nintendo, Xbox)
El Konsolları (Game Boy, PSP, PSPVita)
Mobile Cihazlar (Cell phone)
PC ile Diğer Konsolları Karşılaştırması
PC oyunları konsollarla aynı platformda geliştirilebilmektedir.
Diğer platformlarda oyun geliştirmek için ise özel geliştirme kitleri gerektirebilir.
Konsolların bazı özellikleri pclere kıyasla daha avantajlı olsada konsollar için oyun geliştirmek daha maliyetlidir.

Oyunun Kaydetmek
 
Tüm platformlarda  oyunu kaydetmek önemlidir. Ama bazı konsollarda (Oyun salonları Gibi yeni jeton atmak için) yeni aşamaya geçilmesini zorlaştırmak için oyun kaydetme özelliği yoktur.
Oyun Kaydetmek İçin Farklı Yollar
Otomatik Olarak oyunun belli bir yerindeyken oyunu kaydetmek.
Dezavantajı: Oyuncun sahip olduğu özelliği azaltır.
Heryerde Kayıt: Oyunu oynayan kişiye oyuunun herbir noktasında kayıt özelliği verir.
Dezavantajı: Sistem ihtiyaçları ve global değişkenlerin kaydı zordur. Aynı zamanda oyunun kullanıcı için çok kolaylaştırır.
Oyunun bazı noktolarınında kayıt.
Dezavantajı: Oyunu zorlaştır.
Bir kayıt yöntemi tasarlarken, bunu uygulamak için kaynağa sahip olup olmadığının da oyun için neyin uygun olduğunu belirlemek gerekir.


Oyuncuların Özellikleri

Hedef Kitleniz Nedir?
Yaş,cinsiyet, gelir durumu
Hedef Kitlenizin Bilgi Durumu Nedir?
Hedef Kitlenizin Talepleri Nelerdir?
Oyun Sektöründe İki çeşit oyuncu grupu vardır.
Oyun  Bağımlıları
Uzun Süre ile oyun oynayanlar
Sürekli olarak Oyunlar Hakkında bağsediyorlar
Oyunlar hakkında çok bilgileri var.
Son oyunlara sahipler
Oyunlardaki her bir öğeye dikkat eden.
Bazı oyunların Bağımlıları
Sadece bazı oyunları oynayan ve o oyunlardaki gelişmeleri takip edenler.
Klasik oyuncular:
Boş zamanlarda az sıklıkla oyun oynayanlar. Oyun oynamasada her hangi bir oyun oynama isteği istemeyenler.

Game Oyun Geliştirme Süreci


Iterating: Doğru ve istenilen sonuca ulaşmadan önce yapılması gereken adımları kapsar. Tekrar ve tekrar kodun ve yapının düzenlenmesi.
Prototyping: Ürünün erken aşamada oluşan o anki durumunu kapsayan hali. Bu aşamada performans önemli değildir.
Software testing: Hataların mümkün olan en az seviyeye indirilmeye çalışıldığı testleri kapsamaktadır.
Play-testing: Oyuncuların oyun piyasaya çıkmadan yapılan testtin olduğu kısımdır.



Pisikoloji İle İlgili Durumlar

Oyun tasarımı sırasında akılda tutulması gereken bazı insan ile ilgili psikolojik sorunları kapsamaktadır.
Working memory: İnsanlar genellikle akıllarında 7+ / -2 tane olayı akılllarında tutmaktadırlar bir an içinde.
Artı ve Eksi durumlar: İnsanlara oyun içerisinde verilen bazı ödüllerle kişinin pisikolojik olarak bağlı olmasını sağlar. Eksi durumda ise bu bağ tam olarak sağlanamaz ve sonuç olarak kişinin oyuna bağlılığı azalır.



Mimarinin Birleşenleri

Bazı iyi modüllerin yada işleyen pratiklerin yanında, oyunun mimariside oyunun oluşması önemlidir. Ayrıca mimarinin oluşması için seçilen oyun motoruda sistem için çok önemlidir.
Oyun Motor Kodu:
Birçok oyun tarafından kullanılacak
Grafik işleme, çarpışma algılama kodu, yol bulma vb
Bazen daha fazla grafik motoru, AI motoru, fizik motoru vb bir oyun motoru olabilir
Oyunla ilgili detaylı kodlar:
Sadece bu oyunda kullanacak kodları baarındıran yapılardır.

Oyun Programlama

Temel Bilgiler
 
Francois Dominic Laramee’in Oyun İşletme Sırları
Oyun Geliştirme Pastası Dünyadaki Durumu (Yıllık 20 Milyar Dolar Harcanmaktadır.)
Çok az oyun büyük kazançlar elde etmiştir. Oyunların Kazançlarının %95’i oyunun isminden gelmiştir. (NFS, Fifa, Halo, WoW, Call of Dutf, AgeOfEmpires, TotalWar,vb.)
Sektör büyük oyuncular tarafından domine edilmektedir. Örnek Olarak Electronic Arts gelirlerin 20%  kısmını almaktadır.
Piyasada korsanlık yaygındır. Oyunların çoğu kaçar olarak kullanılmaktadır. Çin ve Kore'de hemen hemen tüm oyun yazılımı korsandır. Bu nedenle online oyun piyasası oluşmuştur. (Diablo3 gibi)
Bir oyun için tipik üretim ücreti: $ 10 milyon dolardır. (CNN rapor, Sep 24, 2005)

Oyun Türleri

3D Oyun Programlama Kenneth Finney tarafın hazırlanan All-in-One isimli yazıda oyun türleri ve örnekleri kısmında...
Action: Half Life 2, Rainbow Six
Adventure: King’s Quest
Role-Playing Games (RPG): Dungeons and Dragons
Puzzle/Maze: Pac-Man, Tetris
Simulator: Falcon 4, Grand Prix Legends
Sports
Strategy


En Önemli Konular


EĞLENCE!
Eğlenceli nedir?
Survival, tehlike: Ceza, polis, asker
Spor
Kaçış Oyunları (Pac-Man)
Öykü ve sosyal
Iyi bir oyun Esasları:
Kısa vadeli ve uzun vadeli hedefler her zaman farkında Oyuncu
Anlamlı ve ilginç
Açık ve zorlayıcı hedefler
Eğer hayali bir dünyada oyun oluşturma işi varsa: O dünyanın etkileyici olamsı gerekmektedir.


Eğlence ve Anlamlı Çıktılar
Ne olursa olsun aynı şeyi yapmak ve aynı sonuçlara ulaşmak eylenceli değildir. Oyun içindeki çeşitliliği arttırmak gerekir. (Aynı hedef ve aynı silah yerine farklı hedef ve farklı silah kullanımı gibi.)
Bazı oyunlarda belirgin seçenek vardır, ama sonunda aynı sonuca yol açar bu kimi zaman istenmeyen bir durum olabilir. Buda eylence olgusunun azalmasına yol açar
Sınırlı bütçe: Biz kullanıcılar her şeyi keşfetmek ve her şeyi kullanmak istiyoruruz buna izin veren şablonlar program içinde tanımlanmalı.
Her zamanki stratejisi, yol boyunca bazı yakınsamalar oluşturarak oyuncuyu manipüle edilmesi eylenceyi arttırır.

Zorluk Seviyeleri

Yardımcı Kaynaklar

AI Game Engine Programming by Brian Schwab
AI for Game Developers by David M Bourg and Gleen Seemann
Physics for Game Developers by David M Bourg
3D Game Programming All-in-One by Kenneth Finney
Teach Yourself Game Programming in 24 Hours by Michael Morrison


Bir Oyun Nasıl Yapılır?
 
Temel Fikir
Hikaye ve Hikaye Süreci
Garafikler
Sesler ve Kontroller
 
 

20 Mart 2017 Pazartesi

Ionic Framework ile Kolayca Mobil Uygulamalar Geliştirin

Ionic Framework; AngularJs bilenlerin kolayca mobil uygulamalar hazırlaması için geliştirilmiş oldukça yararlı bir frameworktür. Tabi bu uygulamaları geliştirmek için AngularJs'in yanında Html, Css ve Js bilgisinede ihtiyaç vardır. Microsoft'un Studio kullanılarak kurulum yapılabilir. Sublime kullanılarakta kodlar yazılabilir. Framework hakkında daha detaylı dilgiyi edinmek ve ücretsiz olarak framework'ü indirmek için aşağıdaki linki kullanabilirsiniz. https://ionicframework.com/products/

  


 Ionic Eğitim Videoları 21 Adet (ingilizce)
 

Code.io ile Projesyonel Tasarımlı Web Siteleri

Birbirinden farklı, kaliteli ve oldukça değişik özelliklere sahip onlarca Css, Html-5 ve JS projesini içerisinde barındıran Code.io sitesi; web tasarımı yada web programlama ile ilgilenenlerin ziyaret etmesi gereken güzel ve kullanışlı bir web sitesidir. Site içerisinde oluşturulmuş yüzlerce projeyi inceleyebilir, kodlarını kendi bilgisayarınıza keydedebilirsiniz. Kendi yaptığınız projeleride site üzerinden yayınlama imkanıda veren Code.io sitesinin web adresi http://codepen.io

Site üzerinde Html-5 ve Js kullanılarak geliştirilmiş oldukça fazla sayıda oyunda bulunmaktadır.
Örnek : http://codepen.io/coderontheroad/details/Fbfjh 
Örneğin kodları http://codepen.io/anon/pen/vEZOOb






Google & Biz

Google'ın hakkımızda ne kadar çok şey bildiğinin bir göstergesi olan MyActivity sitesi; sizin Google üzerinden hangi günde hangi veriyi arattığınızın datalarını loglamaktadır. Siteye giriş yapmak için tek ihtiyacınız olan şey kendi Google hesabınıza girip aşağıdaki linki tıklamak.  

19 Mart 2017 Pazar

HTML Editörleri

Geliştirilmiş çok sayıda HTML editörü bulunmaktadır. Bunlar arasında sıklıkla kullanılanları aşağıda listelenmiştir. Bu editörler sadece HTML betik dili için değil diğer pek çok web tabanlı dil içinde kullanılabilir. Örnek (JS,PHP,CSS,vb)

Ücretsiz HTML editörleri
Notepad++ (https://www.notepad-plus-plus.org)
Atom (https://atom.io/)
Sublime (https://sublime-text.en.softonic.com/download)

Ücretli HTML editörü
CofeCup Html Editör (www.coffeecup.com/html-editor)

17 Mart 2017 Cuma

Sinyalin yorumlanması

Bireyin görmesi fiziksel ve algısal sınırlara sahip olan yüksek düzeyde karmaşık bir etkinliktir ve ortalama bir insan için temel bilgi kaynağıdır. Görme kabaca 2 aşamaya ayrılabilir:
Dış dünyadan gelen uyarıcıların fiziksel karşılanması, görsel algılanması Bu uyarıcıların işlenmesi ve yorumlanmasıdır. Görme ışıkla başlar. Göz ışığı alan ve elektrik enerjisine dönüştüren bir mekanizmadır. Dünyadaki ışık nesnelerden yansır ve görüntüsü gözün arka tarafında retina üzerinde baş aşağı şekilde odaklanır. Gözdeki algılayıcılar bu görüntüyü beyine iletecek olan elektrik sinyallerine dönüştürür.

Gözün boyut, derinlik ve göreli uzaklıkları nasıl algıladığını anlamak için retina üzerinde görüntünün nasıl oluştuğunu bilmemiz gerekir.

Nesneden yansıyan ışık retina üzerinde baş aşağı bir görüntü oluşturur. Bu görüntünün boyutu görüş açısı olarak belirlenir. Eğer gözün önündeki bir noktadan nesnenin üstündeki bir noktaya bir doğru, aynı noktadan nesnenin altındaki bir noktaya bir doğru çizersek, bu iki doğru arasındaki açı bize görüş açısını verir.

Görüş açısı hem nesnenin büyüklüğünden hem de göze olan uzaklığından etkilenir. Eğer iki nesne aynı uzaklıkta ise büyük olan daha büyük görüş açısına sahiptir. Benzer şekilde aynı büyüklükte fakat farklı uzaklıktaki nesnelerden ilerideki daha küçük görüş açısına sahiptir.

Bir nesnenin görüş açısı büyüklüğünü algılamamızı etkiler. Eğer görüş açısı çok küçükse bütünü algılamamız zorlaşır.

Parlaklığı Algılama
Işık düzeylerine gösterilen öznel tepkidir.
Nesnenin yüzeyine düşen ışık miktarı ve yansımadan yani parlaklığından etkilenir.
Göze çarpan farklılıklar ölçülebilir.
Görüş keskinliği titreşerek değişen parlaklıkla artar. Göz bunu sabit olarak bir ışığın hızlıca açılıp kapanması olarak algılayacaktır.
Rengi Algılama
Renk yoğunluk ve doyumdan oluşur.
Renk ışık tayfının dalga boyu tarafından belirlenir(mavi kısa, yeşil orta, kırmızı uzun)
150 farklı rengi ayırt edebiliriz.
Yoğunluk rengin parlaklığı, doyum ise renkteki  beyazlığın miktarıdır. Yoğunluk ve doyumun çeşitlenmesiyle 7 milyon farklı rengi algılayabiliriz.
Kadınların %1’i erkeklerin%8’i renk körüdür ve en çok kırmızı ile yeşili ayırt edememektedirler.

 



İnsan Bilgisayar Etkileşimi Nedir?

İnsanların bilgisayarla etkileşimini inceler. Disiplinler arası bir alandır. İnsanın ve bilgisayarın etkileşimi arayüzler aracılığı ile sağlanır. Kavram tarihsel adlandırma sıralaması ile insan makine etkileşimi, bilgisayar insan etkileşimi ve son olarak da insan bilgisayar etkileşimi ile adlandırılmaktadır. Bilgisayar bilimlerinin yanında pek çok alanla ilgilidir. (Tasarım,antropoloji, psikoloji,felsefe,yapay zeka gibi) Bu arayüzler yazılımın bir aracı olabileceği gibi çeşitli donanım bileşenleri de olabilir.

İnsanlar bilgiyi işlemede kapasiteleri ile sınırlıdırlar ve tasarım için bu önemli bir unsurdur. İnsan etkileşimli sistemler ile ilgili bütün tartışmaların merkez karakterinin insan olduğunu söyleyebiliriz.
Burada geçen insan kavramını sadece tek bir kişi olarak  düşünmemeliyiz. Herhangi bir kurumda çalışan ve aynı işle uğraşan insanlar, çalışma grupları gibi bir dizi insan da bu kavramı belirtebilir.

Bilişsel psikolojinin alt basamağında yer alan insan psikolojisi her ne kadar etkileşimli tasarım konuları ile ilgili değilmiş gibi dursa da ve bu konuya uzak görünse de aslında oldukça ilgilidir. Çünkü etkileşimli bir tasarım yapabilmek için öncelikle kullanıcının becerilerini ve sınırlılıklarını bilmek gerekmektedir.
İnsanlar dünyayı nasıl algılıyor?
Bilgiyi nasıl işliyor ve nasıl saklıyorlar?
Problemleri nasıl çözüyorlar?
Fiziksel olarak nesneleri nasıl kullanıyorlar?

Bu konuda mevcut modellerin olduğunu söyleyebiliriz. Örneğin 1983 yılında Card,Moran ve Newell’ın tanımladığı “İnsan İşlemci Modeli”dir. Bu modelde algısal sistem, hareket sistemi ve bilişsel sistem bulunmaktadır ve bütün bu sistemlerin her biri kendi işlemci ve belleklerine sahiptir.


15 Mart 2017 Çarşamba

IBM'in Quantum Bilgisayarında Kod Yazın

Bundan 5-10 yıl öncesine kadar sadece teorik olarak anlatılan quantum bilgisayarları artık gerçek.
Quantum bilgisayarları klasik bilgisayarların aksine sadece 1 ve 0 ile çalışmaz. Hem bu deyerleri hemde bunun arasında bulunan sonsuz sayıda değerden birini (quantum çakışması ile) alabilir. Quantum bilgisayarlarda QBit (Quantum Biti) sayısı arttıkça ortaya çıkabilecek olasılık sayısı exponansiyel olarak artmaktadır. 2n (n= QBit) bu olasılık imkanı quantum bilgisayarlarını şuanda kullandığımız bilgisayarlarla kıyaslanmayacak kadar çok büyük bir hız avantajı getirmektedir. Şuanda Dünya üzerinde bildiğimiz en büyük quantum bilgisayarı 20Q Bitine sahiptir. Önümüzdeki yıllarda Quantum bilgisayarları; arama algoritmaları, şifre kırma çalışmaları, big data çalışmaları, DNA analizi çalışmaları gibi diğer pek çok alanda kullanılması düşünülmektedir. Ayrıca Quantum bilgisayarlarının çalışabilmesi için 0 Kelvin  (–273,15 Co) soğukluğuna ihtiyaç duyulmaktadır. (süper durum olasılığı için)


IBM'in Quantum Bilgisayarı

IBM Quantum deneyimini başlattı.  Herkes için kuantum hesaplama isimli bu  inisiyatifin temel taşı gerçek, çalışan bir quantum bilgisayarını herkesin kullanımına sunmak. Yazdığınız kodları IBM'in sağladığı 5Q Bitlik (5 Quantum Biti) makine üzerinde cloud olarak çalıştırabilirsiniz (kodları internet üzerinden IBM'in quantum bilgisayara aktarabilirsiniz sırası gelen kod o bilgisayar üzerinde çalışır). Quantum bilgisayarına kod yazımını kolaylaştırmak için (gerçekten oldukça karmaşık bir iş) IBM 5Q Biti gitar tellerine benzeyen bir araç ile kullanımımıza sunmuş. IBM'in bu girişimi öncesi sadece birkaç üniversite veya kurum quantum bilgisayarını kullanabiliyorken bugün https://quantumexperience.ng.bluemix.net/qstage/#/editor isimli internet adresini açan ve üye olan herkez bu deneyimi yaşayabilir.

Ilk Kodlar

IBM'in Quantum bilgisayarını kullanmak için bir arama algoritması olan Grover algoritmasını kullandık. Grover algoritması, yüksek olasılıklı bir kara kutu işlevinin benzersiz girdisini kullanarak belirli bir çıkış değeri üreten (aranan sayıyı yüksek bir olasılık ile bulan) bir quantum algoritmasıdır. Ilk kodlar için bu algoritma IBM'in verdiği editör kullanılarak sembollerle aşağıdaki ekrana yazılmıştır. Bu iş için sadece 2QBit kullanılmıştır. (Oluşturulan kodlar yan tarafta gözükmektedir.)

 

Oluşturulan ve IBM'in Quantum bilgisayarında çalıştırılan kod, her seferinde 4 farklı değer içerisinden bizim istediğimiz değeri tek seferde bulmaktadır. Klasik bilgisayarlarda bu arama işlemi 1/4 olasılıkta gerçekleşirken quantum bilgisayarı aradığımız veriyi 4 olasılık arasından hep ilk tahmininde bulmaktadır. Nasıl? diye soruyorsanız aşağıdaki videoda quantum bilgisayarlarının nasıl çalıştığı en basit haliyle anlatılmıştır (ingilizce).




14 Mart 2017 Salı

Sanal Gerçeklik için Üretilen Yazılımlar ve Uygulamalar

Sanal Gözlük için Üretilmiş bir Bilgisayar Oyunu



Sanal Gözlük ile Google Street View


Sanal Gözlük Paint


Holoportations


Microsoft HoloLens (Fiyatı 3000$)



The Virtuix Omni (Fiyatı 10.000$)

İlk sanal gerçeklik platformu. Sistemin web adresi: http://www.virtuix.com/





13 Mart 2017 Pazartesi

Yazılımları Test Ederek Para Kazanın

Yazılım üretiminde karşılaşılan en önemli problemlerden biri olan yazılım hatalarının bulunması ve bulunan bu hataların düzeltilmesi hayati derecede önemlidir. Yazılımlarda bulunan hataların tespiti için yazılımların test edilmesi gerekmektedir. Yazılımların test edilmesi yaklaşımı temel olarak Black Box ve White Box denilen test yöntemleri ile gerçekleştirilmektedir.

Yazılımları White Box testti  için geliştirilen bazı otomatik test araçları olsada (aşağıda listesi verilmiştir.) yazılımların test edilmesi oldukça maliyetli bir iştir.
  • Açık kaynaklı test araçları: Selenium, Appium, Jubula, SoapUI, Robotium, Calabast.
  • Ticari araçlar: HP QTP, TOSCA, IBM Rational Functional tester, Ranorex

Yukarıda verilen araçlar haricinde, yazılımları bir fill kullanarakta; yazılımlar test edilebilir ve yazılımlarda bulunan hatalar ortaya çıkarılabilir. Yazılımları kullanarak test etmeniz için geliştirilmiş çeşitli web uygulamaları bulunmaktadır. Bu sistemlerdeki uygulama testleri yapılarak aylık 100 ila 200$ civarında gelir elde edilebilir.


TestBirds

TestBirds sitesi; website testti yada mobil app testti yapabileceğiniz bir web uygulamasıdır. TestBirds sitesi kullanılarak gelen testleri (işleri) belirlenen zaman içerisinde yaparak ücret kazanmak mümkündür. Sistem üzerinden gerçekleştirilen testlerin kabulüne göre en az 5 Euro kazanılmaktadır.(Yaptığınız testtin kalitesi ve verilen testlerin zorluğuna göre ücret 10 kat artabilir.) Ayrıca yazılımları test ederken hatalar bulursanız bulduğunuz hatanın önemine göre 0.5 Eruo ile 5 Euro arasında ek miktarlar hesabınıza yansıtılmaktadır. 
Test Birds (www.testbirds.com) sitesine kayıt olduktan ve bilgilerinizi sisteme girdikten sonra, yazılımları hangi araç ile test edeceğinizi belirtmek için sisteme 1 adet araç tanımlamanız gerekmektedir. TestBirds sitesinde hem mobil uygulamalar hemde web site testleri yapıldığı için 1 PC ve 1 Mobil araç tanımlamanız elde edeceğiniz geliri arttırmak açısından avantajlı olacaktır.(İlk başta sadece bilgisayar tanımlayın)
Sistemde para çekme limiti 10 Eurodur ve direk olarak verdiğiniz IBAN adresine ücretler yatırılmıktadır. (Çekme isteği verildikten sonra kazandığınız tutar direk olarak banka hesabınıza yansımaktadır.)
Bu sistem kullanılarak kazanılan tutarın yanı sıra elde ettiğiniz deneyim sayesinde uluslararası alanda iş yapma beceriniz artacaktır.


Aylık 100 Euro gibi bir ücret kazanılabilir. Ayrıca yazılım testleri yapılarak kazanç elde etmek için kullanılacak çok sayıda alternatif web uygulamasıda bulunmaktadır.
Diğer Alternatifler
https://www.usertesting.com/ (Test başı kazanılacak tutar 10-15 Euro Testlerin tamamlanma süresi 45-60 dakika, sistem tarafından küçük bir sınava tabi tutulduktan sonra para kazanmaya başlıyorsunuz.)
https://www.userlytics.com/tester-signup (Test başı ücret; 10$ ile 100$ arası. Sistemde bulduğunuz her ilave hata için ek üçretler kazanabilirsiniz.)
https://www.userlytics.com/tester-signup (Aylık 200$ kadar ücret kazanabileceğiniz başka bir test plantformu)
(Mobil uygulamaları veya web sayfalarını test ederek use caseler tamamlayarak para kazanabileceğiniz bir başka sistem aylık 100$ kazanabilirsiniz.)
(Her bir test için 10$ kazanabileceğiniz bir sistem. Mobil uygulamaların testti için geliştirilmiş bir yapıya sahip. Her bir test için 10$ kazanabilirsiniz testlerin yapılış süresi 45-60 dakika  arasında değişmektedir.)
Burada verilen bilgiler tamamiyle bilgilendirme amaçlı olup asıl detaylar sistemlerin web sitelerinde bulunmaktadır.

7 Mart 2017 Salı

Örnek 9: ctime() Fonksiyonu ile Tarih Yazdırma


Tarih/Saat Faonksiyonları (time.h) –clock() Fonksiyonu






Örnek 10: clock() Fonksiyonu




Tarih/Saat Fonksiyonları (time.h) –difftime() Fonksiyonu





Örnek 11: difftime() Fonksiyonu



Tarih/Saat Fonksiyonları (time.h) –asctime(), ctime(), localtime() Fonks.



Tarih/Saat Fonksiyonları (time.h) –asctime(), ctime(), localtime() Fonks.

Fonksiyonlarda kullanılan tm yapısı aşağıdaki gibidir:
struct     tm {
    int    tm_sec;    /* saniye,    (0 - 59) */
    int    tm_min;    /* dakika,    (0 - 59) */
    int    tm_hour;   /* saat,      (0 - 23) */
    int    tm_mday;   /* ayın günü, (1 - 31) */
    int    tm_mon;    /* ay,        (0 - 11), 0 = Ocak */
    int    tm_year;   /* yıl - 1900 */
    int    tm_wday;   /* haftanın günü, (0 - 6), 0 = Pazar */
    int    tm_yday;   /* yılın günü,(0 - 365) */
    int    tm_isdst;  /* gündüz  (-1/0/1)     */
};


Örnek 8: asctime() ve localtime() Fonksiyonları ile Tarih Yazdırma



Tarih/Saat Fonksiyonları (time.h)



Yazılım uygulamaları içerisinde tarih ve saatle ilgili işlemleri sıkça yaparız.
C dilinde, tarih ve saat fonksiyonlarının bildirimleri, sembolik sabitler ve standart yapılar <time.h> başlık dosyasında tanımlanmıştır.
Bu fonksiyonlar üç temel işlevi yerine getirir:
Takvim (Tarih) bilgileri
Yerel Saat
Saat Dilimleri


Tarih/Saat Fonksiyonları (time.h) – time() Fonksiyonu

time() fonksiyonu 01/01/1970 tarihinden, programın çalıştığı tarihe ve saate kadar geçen sürenin saniye cinsinden değerini gönderir. Genel bildirimi aşağıdaki gibidir:

    time_t time(time_t *zaman);

time_t sayısal bir tip (genellikle long int) olup zaman bilgisini temsil eder.
zaman tarih bilgisini tutan işaretçi tipinde bir değişkendir.



Örnek 7: time() Fonksiyonu


Matematik Kütüphanesi Fonksiyonları (math.h) – Ters Trigonometrik Fonksiyonlar



Örnek:
asin(0.5)        ?    0.523599
acos(0.5)        ?    1.047198
atan(0.5)        ?    0.463648



Matematik Kütüphanesi Fonksiyonları (math.h) – Logaritmik Fonksiyonlar



Örnek:

log(4.0)        ?    1.386294
log10(4.0)        ?    0.602060


Örnek:
sin(3.14)        ?    0.001593
cos(3.14)        ?    0.999999
tan(3.14)        ?    0.001593

Örnek 6: Trigonometrik Fonksiyonlar


Matematik Kütüphanesi Fonksiyonları (math.h) – Mutlak Değer Fonksiyonları



Örnek:

abs(-456)        ?    456
fabs(-145.3)    ?    145.3


Matematik Kütüphanesi Fonksiyonları (math.h)


Matematiksel Fonksiyon Türleri
Yuvarlama Fonksiyonları
Mutlak Değer Fonksiyonları
Logaritmik Fonksiyonlar
Trigonometrik Fonksiyonlar
Ters Trigonometrik Fonksiyonlar

Matematik Kütüphanesi Fonksiyonları (math.h) – Yuvarlama Fonksiyonları



Örnek 5: Yuvarlama Fonksiyonları