C# Boks Oyunu: Nesne Yönelimli Programlama ile Fighter ve Ring Sınıfları
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.
C# Boks Oyunu Projesinin Amacı
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.
C# Boks Oyunu İçin Kullanılan Sınıflar
Bu C# uygulamasında iki temel sınıf bulunur:
- Fighter: Dövüşçüyü temsil eder. Adı, hasarı, canı, kilosu ve kaçınma oranı gibi bilgileri taşır.
- Ring: Maçın oynandığı alanı temsil eder. İki dövüşçüyü karşılaştırır, raundları başlatır ve kazananı belirler.
Fighter Sınıfı Ne İşe Yarar?
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.
C# Fighter Sınıfı
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;
}
}
Ring Sınıfı Ne İşe Yarar?
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.
C# Ring Sınıfı
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);
}
}
Main Metodu ile Oyunu Başlatma
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.
C# Main Sınıfı
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();
}
}
Programın Örnek Çalışma Mantığı
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.
C# Boks Oyunu ile Hangi Konular Öğrenilir?
- C# sınıf tanımlama
- C# constructor kullanımı
- C# metot yazımı
- C# nesne oluşturma
- C# sınıflar arası ilişki kurma
- C# koşullar ve döngüler
- C# oyun mantığı geliştirme
Bu C# Boks Oyunu Nasıl Geliştirilebilir?
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.
Sonuç
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.