Arşiv

Aralık 2009 ayı için arşiv

Şubat 2010 Seminerleri / XNA Game Studio

28 Şubat 2010 Yorum yapılmamış

BilgeAdam Kadıköy Şubesinde gerçekleştirdiğim Şubat Seminerlerinin sonuncusu XNA Game Studio prezentasyonuna buradan erişebilirsiniz.

Bu seminerde değindiğim konular;

  • Oyun Geliştirme ile ilgili bilinmesi gereken kavramlar
  • XNA ile ilgili bilinmesi gereken kavramlar
  • XNA Örnek kodlar

Powerpoint Prezentasyonu

Sql Server’da Random Sayı Üretmek

27 Şubat 2010 1 yorum

C# tarafında rastgele sayıya ihtiyacımız olduğunda Random class’ından yeni bir nesne üretip kullanabiliyoruz. Eğer rastgele sayıya Sql tarafında ihtiyacımız olursa yapmamız gereken, RAND() fonksiyonunu kullanmaktır.

RAND() fonksiyonu ile ilgili detaylı bilgiye MSDN‘de yeralan şu makaleden ulaşabilirsiniz.

RAND([seed]) fonksiyonu parametre olarak seed değeri alabilir ve geriye float tipinde sonuç döner.

seed parametresi int, smallint veya tinyint tipinde olabilir.

RAND() fonksiyonu aynı seed değeri ile her çalıştırıldığında aynı “rastgele” sayıyı döndürür. Eğer seed verilmezse, Sql Server rastgele bir seed değeri atayarak, “rastgele” sayı oluşturur.

Eğer RAND() fonksiyonundan float tipinde noktalı sayı değil, int tipinde tamsayı dönmesini istiyorsak, basit bir convert işlemine tabi tutabiliriz;

SELECT CONVERT(INT, RAND() * 100)

ASP.NET ile Mobil Kullanıcıları Mobil Sayfaya Yönlendirmek

27 Şubat 2010 3 yorum

ASP.NET 4.0 ile aşağıdaki kod yardımıyla mobil kullanıcıları algılayabilir ve uygulamanın mobil sayfasına yönlendirebilirsiniz;

private static readonly Regex MobileRegex = new Regex(@"(nokia|sonyericsson|blackberry|IPHONE|samsung|sec-|windows ce|motorola|mot-|up.b|midp-)", RegexOptions.IgnoreCase | RegexOptions.Compiled);

public bool IsMobile
{
	get
	{
		HttpRequest r = HttpContext.Current.Request;

		if (r.Browser.IsMobileDevice)
			return true;

		if (!string.IsNullOrEmpty(r.UserAgent) && MobileRegex.IsMatch(r.UserAgent))
			return true;

		return false;
	}
}

protected void Page_Load(object sender, EventArgs e)
{
	if (IsMobile)
		Response.RedirectPermanent("Mobile.aspx", true);
}

Şubat 2010 Seminerleri / İleri Seviye C#

26 Şubat 2010 Yorum yapılmamış

BilgeAdam Kadıköy Şubesinde gerçekleştirdiğim Şubat Seminerlerinin İleri Seviye C# prezentasyonuna buradan erişebilirsiniz.

Bu seminerde değindiğim konular;

  • Access Modifiers
  • Anonymous Types
  • Anonymous Methods
  • Object Initializers
  • Rezerve Methodlar
  • Partial Class
  • Partial Methods
  • Null Coalescing Operatörü
  • Auto Implemented Properties
  • Obsolete Attribute
  • Extension Methods

Powerpoint Prezentasyonu

Belirlediğiniz şablonda rastgele string üretmek

26 Şubat 2010 Yorum yapılmamış

Uygulamanızda sizin belirlediğiniz şablona göre rastgele üretilmiş bir string’e ihtiyaç duyarsanız, aşağıdaki kod işinizi görebilir;

Random r = new Random();
string KullanilabilecekKarakterler = "AzByCxDwEvFuGtHsIrJqKpLoMnNmOlPkQjRiShTgUfVeWdXcYbZa1234567890";

MatchEvaluator Rastgele = delegate (Match m) {
	return KullanilabilecekKarakterler[r.Next(KullanilabilecekKarakterler.Length)].ToString();
};

Console.WriteLine(Regex.Replace("XXXX-XXXX-XXXX-XXXX", "X", Rastgele)); /// Lv2U-jHsa-TUep-NqKa
Console.WriteLine(Regex.Replace("Şifreniz : XXXX", "X", Rastgele)); /// Şifreniz : w6G0
Console.WriteLine(Regex.Replace("XXX.XXX-XX/XX", "X", Rastgele)); /// Fu8.c3Y-xT/6P
Console.WriteLine(Regex.Replace("XXXXXX", "X", Rastgele)); /// 8cPD2y

XNA – Oyun ekranının boyutlarını belirlemek

23 Şubat 2010 Yorum yapılmamış

XNA ile geliştirdiğiniz oyunlar varsayılan olarak 800 x 600 boyutlarında bir pencerede oynatılır.

Eğer siz bu pencereyi boyutlandırmak ve hatta Tam Ekran seçeneği eklemek isterseniz yapmanız gereken, oyun sınıfınızın constructor‘ına aşağıdaki kodları eklemektir;

graphics.PreferredBackBufferWidth = 1024; /// Oyun penceresinin genişliği
graphics.PreferredBackBufferHeight = 768; /// Oyun penceresinin yüksekliği
graphics.IsFullScreen = true; /// Oyun pencerede mi oynatılacak, yoksa tam ekran mı olacak

Bu kodları XNA – Oyun Temelleri yazımda yaptığımız oyuna uygularsak;

public GameLoop()
{
	this.Window.Title = "XNA - Oyun Temelleri";
	graphics = new GraphicsDeviceManager(this);
	graphics.PreferredBackBufferWidth = 1024;
	graphics.PreferredBackBufferHeight = 768;
	graphics.IsFullScreen = true;
	Content.RootDirectory = "Content";
}

virtual olmayan method’ları override etmek

23 Şubat 2010 Yorum yapılmamış

Base class‘ta tanımlanmış bir method‘u override etmemiz gerekiyor. Fakat method virtual yazılmamışsa, override edilemez. Türetilmiş class‘ta base class‘taki virtual olmayan method’u nasıl override edebiliriz?

Türetilmiş class’ta base class’taki method’u override etmek yerine new anahtar kelimesi ile baştan yazabiliriz. Böylece virtual yazılmamış ve dolayısıyla override edilemeyecek method’ları “bir çeşitoverride etmiş oluruz.

class Base
{
	public virtual void VirtualGoster()
	{
		Console.WriteLine(“Base.VirtualGoster”);
	}

	public void Goster()
	{
		Console.WriteLine(“Base.Goster”);
	}
}

class Derived : Base
{
	public override void VirtualGoster()
	{
		Console.WriteLine(“Derived.VirtualGoster”);
	}

	public new void Goster()
	{
		Console.WriteLine(“Derived.Goster”);
	}
}

class Program
{
	static void Main(string[] args)
	{
		Base base = new Derived();
		base.VirtualGoster();
		base.Goster();

		Console.WriteLine();

		Derived derived = new Derived();
		derived.VirtualGoster();
		derived.Goster();
	}
}

Çıktı :
Derived.VirtualGoster
Base.Goster
Derived.VirtualGoster
Derived.Goster

XNA – Oyun Temelleri

22 Şubat 2010 Yorum yapılmamış

XNA ile oyun geliştirmeye başlamadan önce, ekrana nasıl çizim yapabileceğimizi öğrenmemiz gerekiyor.

Not : Buradan ileriye devam etmeden önce XNA – Başlangıç yazımı okumanızı tavsiye ederim.

Öncelikle, ihtiyacımız olacak iki görseli bilgisayarınıza kopyalamanız gerekiyor;

Fil Resmi - Arkaplan olarak kullanılacak Arı Resmi

Solution Explorer‘da Content üzerine sağ tuşla tıklayarak ari.png ve fil.png dosyalarını projeye ekleyelim.

GameLoop.cs dosyamızda class seviyesinde Texture2D tipinde iki değişken oluşturalım;

Texture2D ArkaPlan;
Texture2D Ari;

Daha sonra bu değişkenlere resimleri yükleyeceğiz. Aynı yere bir tane de Rectangle tipinde değişken oluşturalım.

Rectangle OyunPencere;

Bu değişkene ekranımızın boyutlarını yüklüyor olacağız.

LoadContent() method’unda bu değişkenlerin değerlerini atayalım;

OyunPencere = new Rectangle(0, 0, graphics.GraphicsDevice.Viewport.Width, graphics.GraphicsDevice.Viewport.Height);
ArkaPlan = Content.Load<Texture2D>("fil");
Ari = Content.Load<Texture2D>("ari");

GameLoop class’ının constructor‘ında oyunumuzun başlığını değiştirebiliriz;

public GameLoop()
{
	this.Window.Title = "XNA - Oyun Temelleri";
	graphics = new GraphicsDeviceManager(this);
	Content.RootDirectory = "Content";
}

Draw() method’unda resimlerin ekrana çizim işlerini yapacağız. Çizime işlemlerini Begin() ve End() methodları arasında yapmamız gerekiyor;

spriteBatch.Begin(SpriteBlendMode.AlphaBlend);
spriteBatch.Draw(ArkaPlan, OyunPencere, Color.White);
spriteBatch.Draw(Ari, Vector2D.Zero, Color.White);
spriteBatch.End();

Bu durumda uygulamayı çalıştırırsak, karşımıza şöyle bir ekran gelir;

XNA Oyun Temelleri

Şimdi arı resmini, klavye tuşlarını kullanarak ekranda hareket ettirelim. Öncelikle arı’nın ekrandaki konumunu tutan bir değişkene ihtiyacımız var, class seviyesindeki değişkenlere ekleyelim;

Vector2 Location = Vector2.Zero;

Draw() methodunda ari resmini çizdiğimiz satırı güncelleyelim;

spriteBatch.Draw(Ari, Location, Color.White);

Son olarak Update() method’umuzu güncelleyelim;

protected override void Update(GameTime gameTime)
{
	KeyboardState ks = Keyboard.GetState();

	if (ks.IsKeyDown(Keys.Escape))
		this.Exit();

	if (ks.IsKeyDown(Keys.Up))
		Location.Y -= 3;
	if (ks.IsKeyDown(Keys.Down))
		Location.Y += 3;
	if (ks.IsKeyDown(Keys.Left))
		Location.X -= 3;
	if (ks.IsKeyDown(Keys.Right))
		Location.X += 3;

	base.Update(gameTime);
}

Gördüğünüz gibi, klavyede o anda basılı tuşları Keyboard.GetState() ile ks değişkenine yüklüyoruz, sonra basit karşılaştırmalar ile Location değişkenimizin X ve Y değerlerini değiştiriyoruz.

Draw() method’unda ari’yi çizeceğimiz yer olarak Location değişkenini verdiğimiz için, klavyeyi kullanarak ari’yi hareket ettirebildiğimizi görüyoruz.

XNA Oyun Temelleri

Oyunun kaynak kodlarını buradan indirebilirsiniz.

C# const ve readonly farkı

22 Şubat 2010 Yorum yapılmamış

Senaryo : Uygulama çalışırken değeri değiştirilemeyecek değişken tanımlamanız gerekiyor.

Çözüm : Muhtemel iki çözüm var, const ve readonly değişken tanımlamak. Fakat aralarında önemli bir fark var;

const : Türkçe’ye Sabit olarak çevrilebilir. Class seviyesinde tanımlanır ve tanımlanma anında değeri verilmek zorundadır. Sonradan değeri değiştirilemez.

readonly : Sadece-Okunabilir anlamına gelir. Class seviyesinde tanımlanır. Tanımlandığı anda değeri verilebilir veya Class Constructor’ında değeri verilebilir. Sonradan değeri değiştirilemez.

public class Matematik
{
	private const double PI = 3.14159;
}
public class Matematik
{
	private readonly int PI; /// PI değişkeninin değerini burada da verebilirdim.

	public Matematik()
	{
		PI = 22 / 7;
	}
}

Mart 2010 – Seminer Programı

19 Şubat 2010 3 yorum

Mart 2010 ayı içerisinde BilgeAdam – Kadıköy Şube‘de Mart Ayı – Oyun Ayı seminerlerini veriyor olacağım.

Mart 2010 - BilgeAdam Seminerleri

Katılım ücretsizdir.