C# öğrenirken Nesne Yönelimli Programlama konularını pekiştirmenin en keyifli yollarından biri küçük oyun projeleri geliştirmektir. C# ile yapılmış basit bir boks oyunu, hem sınıf oluşturmayı hem nesnelerle çalışmayı hem de metotların gerçek bir senaryoda nasıl kullanıldığını anlamayı kolaylaştırır. Bu örnekte C# kullanarak bir boks oyunu geliştireceğiz. Oyunda iki dövüşçü sırayla birbirine vuracak, hasar alacak, kaçma ihtimali olacak ve sağlık puanı sıfıra inen taraf maçı kaybedecek.
Bu C# örneğinde amacımız, Fighter ve Ring adında iki ayrı sınıf oluşturarak oyunu nesne yönelimli bir mantıkla kurgulamaktır. Böylece C# sınıf yapıları, constructor kullanımı, metot tanımlama, nesne oluşturma ve sınıflar arası ilişki gibi önemli konular pratik şekilde öğrenilmiş olur.
Bu C# uygulamasında iki temel sınıf bulunur:
C# içinde oluşturulan Fighter sınıfı, her dövüşçünün temel özelliklerini ve davranışlarını temsil eder. Bir dövüşçünün saldırı yapabilmesi için Hit metodu, gelen saldırıdan kaçabilmesi için ise Dodge metodu kullanılır. Böylece C# ile gerçek hayattaki bir boksör mantığı yazılıma aktarılmış olur.
using System;
public class Fighter
{
public string Name;
public int Damage;
public int Health;
public int Weight;
public double DodgeChance;
public Fighter(string name, int damage, int health, int weight, double dodgeChance)
{
Name = name;
Damage = damage;
Health = health;
Weight = weight;
DodgeChance = dodgeChance;
}
public int Hit(Fighter foe)
{
Console.WriteLine("------------");
Console.WriteLine(Name + " => " + foe.Name + " " + Damage + " hasar vurdu.");
if (foe.Dodge())
{
Console.WriteLine(foe.Name + " gelen hasarı savurdu.");
return foe.Health;
}
if (foe.Health - Damage < 0)
{
return 0;
}
return foe.Health - Damage;
}
public bool Dodge()
{
Random random = new Random();
double randomValue = random.NextDouble() * 100;
return randomValue <= DodgeChance;
}
}
C# tarafında Ring sınıfı, oyunun yönetildiği ana yapıdır. Bu sınıf içinde iki dövüşçü tutulur, kilo kontrolü yapılır, raundlar başlatılır, skor yazdırılır ve kazanan belirlenir. Böylece oyunun akışı tek bir C# sınıfı içerisinde düzenli şekilde yönetilmiş olur.
using System;
public class Ring
{
public Fighter F1;
public Fighter F2;
public int MinWeight;
public int MaxWeight;
public Ring(Fighter f1, Fighter f2, int minWeight, int maxWeight)
{
F1 = f1;
F2 = f2;
MinWeight = minWeight;
MaxWeight = maxWeight;
}
public void Run()
{
if (CheckWeight())
{
while (F1.Health > 0 && F2.Health > 0)
{
Console.WriteLine("======== YENİ ROUND ==========");
F2.Health = F1.Hit(F2);
if (IsWin())
{
break;
}
F1.Health = F2.Hit(F1);
if (IsWin())
{
break;
}
PrintScore();
}
}
else
{
Console.WriteLine("Sporcuların ağırlıkları uyuşmuyor.");
}
}
public bool CheckWeight()
{
return (F1.Weight >= MinWeight && F1.Weight <= MaxWeight) &&
(F2.Weight >= MinWeight && F2.Weight <= MaxWeight);
}
public bool IsWin()
{
if (F1.Health == 0)
{
Console.WriteLine("Maçı Kazanan : " + F2.Name);
return true;
}
else if (F2.Health == 0)
{
Console.WriteLine("Maçı Kazanan : " + F1.Name);
return true;
}
return false;
}
public void PrintScore()
{
Console.WriteLine("------------");
Console.WriteLine(F1.Name + " Kalan Can : " + F1.Health);
Console.WriteLine(F2.Name + " Kalan Can : " + F2.Health);
}
}
Her C# konsol uygulamasında olduğu gibi burada da oyunu başlatan nokta Main metodudur. Fighter sınıfından iki nesne oluşturulur, ardından bu nesneler Ring sınıfına gönderilir ve maç başlatılır. Bu yapı, C# içinde nesne oluşturma ve sınıfları birbirine bağlama mantığını öğrenmek için oldukça faydalıdır.
using System;
public class Program
{
public static void Main(string[] args)
{
Fighter marc = new Fighter("Marc", 15, 100, 90, 0);
Fighter alex = new Fighter("Alex", 10, 95, 100, 0);
Ring ring = new Ring(marc, alex, 90, 100);
ring.Run();
}
}
Bu C# boks oyunu çalıştırıldığında önce iki dövüşçünün kilo aralığı kontrol edilir. Eğer iki dövüşçü de belirlenen kilolar arasındaysa maç başlar. Her yeni round’da birinci dövüşçü ikinciye vurur, sonra ikinci dövüşçü birinciye vurur. Her vuruş sonrası sağlık puanı düşer. Eğer sağlık puanı sıfıra ulaşırsa C# uygulaması kazananı ekrana yazdırır.
Bu temel C# boks oyunu daha da geliştirilebilir. Örneğin ilk kimin vuracağını rastgele belirleyebilirsiniz. C# içinde kritik vuruş sistemi ekleyebilirsiniz. Oyuncular için farklı özel yetenekler tanımlayabilirsiniz. Kullanıcıdan klavye ile dövüşçü bilgileri alabilirsiniz. Ayrıca C# kullanarak her round sonrası ekrana daha detaylı maç istatistikleri yazdırabilirsiniz.
C# ile boks oyunu geliştirmek, Nesne Yönelimli Programlama konularını uygulamalı olarak öğrenmek için çok güzel bir örnektir. Fighter ve Ring sınıfları sayesinde C# sınıf mantığı daha net anlaşılır. Metotlar, nesneler ve oyun akışı bir araya geldiğinde ortaya hem öğretici hem de eğlenceli bir C# konsol uygulaması çıkar. Özellikle C# öğrenenler için bu tarz projeler, teorik bilgiyi pratiğe dökmek açısından oldukça değerlidir.