Oyun yazma mantıkları ve algoritmaları

Başlatan EMG81, 26 Nisan 2012, 12:48:57

EMG81

Merhaba,

Önce linkler:
Tactics Game Engine (C#/XNA)
[Part 1 of 3] My C# / XNA Game Project - cosmiKPlatformerXNA - UPDATE #1
Tanks C# Game
C# Game Engine
C# Game , World Craft: Exploring a randomly generated world
C# XNA 2D RPG Game: "BOUND" (Tile Engine).Part I
C# XNA RPG Update 2
SnowEngine Demo - C#, XNA 4.0
Visual Basic Game :: Dagovar Desert Vixens

Hayatımda hiç oyun programı yazmaya çalışmadım. O yüzden gördüklerim(eminim birçok kişi benim hissettiğimi hissediyordur) bana çok etkileyici geliyor. En son şu videodan sonra VGA Video Game on a Breadboard anladım ki oyun yazmanın bir mantığı ve algoritması var. Geçen sene bu video yu izlediğimde "adama bak yahu. Hem vga hem ses hemde oyun yazmış" diyorken şimdi anlıyorum ki VGA ve ses i çözmek iş değilmiş. Adam minik bir mikro işlemcinin içerisine dışarıdan bakınca kocaman gibi görünen bir oyun sığdırmış ve asıl zor olan şey buymuş. Bu oyunu ister pc de ister işlemcide ben yazmaya kalksam çok hafıza kullanırdım. Bundan eminim ve bunun kadar iyi bir netice alamazdım. Aynı şey Pc oyunları içinde geçerli. Peki merak ediyorum Oyun yazmanın mantığı, mantıkları, algoritması, algoritmaları nelerdir ? Yazdığı küçük bir oyunun kodlarını birileri bizimle paylaşabilirmi ? Nereden başlanır ? Önce neler yapılır ?







Tagli

Konuyla doğrudan bir ilgim yok ama geçenlerde gözüme bu kitap çarpmıştı. Faydalı olabilir.
Gökçe Tağlıoğlu


EMG81

Kitabı indirdim. Vakit buldukça okumaya çalışacağım.

Burak B

#4
Yazacağın oyunun tarzına göre yaklaşım tarzları var programlamada. Ayrıca mutlaka bilmen gereken temel kavramlarda çabası. Japon RPG' si tarzında bişiler yampak istiyorsan RPGMaker diye bir program var. Onu bir incele. Yok 3D bişiler yazıcam diyorsan. Bedava dağıtımı yapılan 3D motorlardan birini temin et ve SDK sını incele derim.

Ama süper minik ve optimize kod yazayım diyorsan oyun kodlarına değil demo ve intro kodlarına bakmalı ve Demo Scene denen organizasyonları ziyaret etmelisin. Ayrıca bu tip kodlama sıkı sistem ve asm gerektirebilir. Yok eğer C de yazdığın kodun derleyiciden nasıl çıkacağını biliyorsan oda olur. En basitinden ben sana alpha blending algoritmasını bir incele diyeyim sende başla :). Çok önemli algoritmadır.

Mesela şöyle düşün yılan oyunu hani nokiadaki. Onu adam böyle yapmış;


Ama algo aynı. Ancak grafik motoru değiştirilmiş ve 3B(3D)' ye geçilmiş. Bende diyorumki bende bir snake yazayım ama ne nokiadaki gibi olsun nede bunun gibi 3B olsun. 2D olsun ama grafikleri zengin olsun. bir ormana üsten bakan bir temam olsun. Yapraklar hareketli olsun. Yılanım 2D iyi çizilmiş grafiklerden oluşsun. v.s. v.s. Bu görsellerin hepsinin birer bitmap olduğunu düşünürsek bunları üst üste katıştırıp göstermek v.s. gibi işlemler. Oyun programcısı için bilinmesi gereken şeylerdir. Yoksa yılanın ne yapacağı belli. Elmayı ye kuyruk uzasın kendine yada duvara çarparsan yanarsın. ;)

Bir örnek daha bu 3B oyun dünyasından. Soru ile başlayalım. Bir labirentin var. Kişinin gözünden bakıyorsun. Şimdi gördüğün herşey ekrana 3B izdüşüm olmalı. İlk sorun ekranım 2B :) 2B - 3B dönüşümleri bilmek lazım. Bunun içine matrisler geometri trigonometri v.s. v.s. giriyor. Bu konuyu hallettin. Labirentin verilerini yüklemen ve hafızayı düzenlemen lazım. Bunuda hallettin. Labirent datasını yükledin. Grafik motorun görüntüyü ekrana bastı (bu arada tonla ışıklandırma, gölge, kaplama, v.s. hesaplamalarını saymıyorum hepsi birer algoritma) oyun o kadar yavaş olacaktırki makineyi yorar. Ne yapmak lazım? Sebebi tüm labirent bilgisini sürekli işliyor oluşun. Ne yapmak gerek sadece gördüğün poligonları çizmelisin.  (Clipping, Back-Face Culling) Bu da bir algoritma. Daha niceleri var. Bu iş basit bir nokia snake yazmak isteyince kolay ama detaya indikçe zordur.

Pİyasada tonla kitap mevcut inan linklerini yazmaya uğraşmaya gerek yok. Google da arayınca çıkar. En meşhurları "Game Programming Gems" serisi ve Michael Abrash'ın Graphic Programming Black Book kıtabıdır. Dahası da var tabi.
"... a healthy dose of paranoia leads to better systems." Jack Ganssle

elektronikhobi

Tagli arkadaşımızın tavsiye ettiği kitap çok harika bir kitaptır. Kesinlikle tavsiye ederim. Normalde yapay zeka üzerine bir kitap olmasına rağmen içerisinde grafik programlama, hatta temel oyun programlama kavramları bile çok güzel anlatılmış. Örneğin 2 boyutlu C++ ile yazılmış bir grafik kütüphanesi var.

Ama bu kitabı anlayabilmek orta (hatta ileri düzey de diyebiliriz) düzey C++ bilgisi gerekiyor. En azından bu listedeki kitapların başlangıç seviyesinde ve orta düzey olanlarından bir kaç tanesini okumak gerekiyor.

http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list

Çünkü örneklerin bazıları C++ standart kütüphanesinde bulunan karmaşık şablon olanaklarını kullanıyor.

Bir de hiç programlama bilgisi gerektirmeden oyun yapılabilen programlar var.

Gamemaker ya da

http://www.yoyogames.com/make

Scirra gibi

http://www.scirra.com

oyun geliştirme ortamları var. Bunlarda programlama bilmeden oyun yapabiliyorsunuz. Bazı kişiler bunları önemsiz gibi görseler de oyunların çalışma mantığını anlamak açısından bence önemli. Benim yeni başlayan arkadaşlara tavsiyem bunları kullanarak oyun geliştirmeye başlamalarıdır.

Eğer özellikle C# ile oyun geliştirmeyi düşünüyorsanız XNA oyun geliştirme platformu kullanılabilir. Örneğin burada 2 boyutlu bir uzay oyunun nasıl programlanacağı anlatılıyor.

http://create.msdn.com/en-US/education/tutorial/2dgame/getting_started

Bir de her ne kadar D ile yazılmış olsa da ben de henüz tamamlanmamış olsa da 2D bir grafik motoru altyapısı hazırlıyordum.

https://github.com/erdemoncel/oyun

Bu örneği bilgisayarınıza indirerek nasıl çalıştığını görebilirsiniz. Grafik kütüphanesi olarak SDL kullanıyor.

Burada kurulumun nasıl yapılacağı anlatılıyor.

http://ddili.org/ders/sdl/hosgeldiniz.html