using System; using System.Collections.Generic; using System.Drawing; using System.Threading.Tasks; using System.Windows.Forms; namespace WindowsFormsApp2 { public partial class Form1 : Form { Boss secondBoss; private Timer bossSpeedBoostTimer; // Boss'un hızlanma süresi private int bossNormalSpeed = 5; // Boss'un normal hızı private int bossFastSpeed = 10; // Boss'un hızlı hızı private bool isBossSpeedBoosted = false; // Boss'un hızlanıp hızlanmadığını kontrol et int score = 0; int level = 1; int lives = 3; int objectSpeed = 5; // Başlangıç düşme hızı Random rnd = new Random(); List fallingObjects = new List(); Timer gameTimer; Timer spawnTimer; // Nesne spawn etmek için yeni bir timer Timer bossTimer; // Boss için yeni bir timer bool movingLeft = false; // Sol hareket durumu bool movingRight = false; // Sağ hareket durumu Boss boss; // Boss nesnesi bool isBossVisible = true; // Boss görünürlüğü kontrolü Timer bossVisibilityTimer; // Boss görünürlük timer'ı Timer bossAttackTimer; // Boss'un saldırı zamanlayıcısı int bossHealth = 20; // Boss canı ProgressBar bossHealthBar; // Boss can barı Timer fastAttackTimer; // Boss'un hızlı saldırı zamanlayıcısı Random random = new Random(); // Resim dosya yolunu tanımla string imagePath = @"C:\"; public Form1() { InitializeComponent(); InitGame(); } private void InitGame() { bossSpeedBoostTimer = new Timer(); bossSpeedBoostTimer.Interval = 10000; // 10 saniye bossSpeedBoostTimer.Tick += BossSpeedBoostTimer_Tick; // Oyun başlangıç ayarlarını burada yapıyoruz score = 0; level = 1; lives = 3; objectSpeed = 5; lblPuan.Text = "Puan: 0"; lblSeviye.Text = "Seviye: 1"; lblKalp.Text = "Can: 3"; pbCharacter.Left = (ClientSize.Width - pbCharacter.Width) / 2; pbCharacter.ImageLocation = imagePath + "zenci.png"; // Karakter resmi yüklendi gameTimer = new Timer(); gameTimer.Interval = 20; // Düşme hızı gameTimer.Tick += GameTick; spawnTimer = new Timer(); // Nesne spawn için yeni timer spawnTimer.Interval = 4000; // 1. seviyede 4 saniyede bir spawnTimer.Tick += SpawnObject; // Spawn nesne metodu spawnTimer.Start(); // Başlangıçta çalışmaya başlar // Boss timer'ını başlat bossTimer = new Timer(); bossTimer.Interval = 100; // Bossun hareket etme hızı bossTimer.Tick += BossTick; fastAttackTimer = new Timer(); fastAttackTimer.Interval = 100; // Hızlı saldırı için 0.1 saniye fastAttackTimer.Tick += FastAttack; // Boss görünürlük timer'ı bossVisibilityTimer = new Timer(); bossVisibilityTimer.Interval = 10000; // 10 saniye bossVisibilityTimer.Tick += BossVisibilityTimer_Tick; // Boss'un saldırı zamanlayıcısı bossAttackTimer = new Timer(); bossAttackTimer.Interval = 1250; // Boss 2 saniyede bir muz atacaktır bossAttackTimer.Tick += BossAttack; // Boss can barı bossHealthBar = new ProgressBar { Location = new Point(10, 10), // Can barının konumu Size = new Size(200, 20), // Can barı boyutu Maximum = bossHealth, // Maksimum can Value = bossHealth // Başlangıç canı }; this.Controls.Add(bossHealthBar); // Can barını forma ekle // Formun KeyPreview özelliğini true yapın this.KeyPreview = true; this.KeyDown += new KeyEventHandler(Form1_KeyDown); this.KeyUp += new KeyEventHandler(Form1_KeyUp); // Form özelliklerini sabitle this.MaximizeBox = false; // Tam ekran butonunu gizle this.FormBorderStyle = FormBorderStyle.FixedSingle; // Boyut değişikliğini engelle button1.Visible = false; // Başlangıçta butonu gizle } private void CheckBossSpeedBoost() { // %5 şans kontrolü if (random.NextDouble() < 0.05 && !isBossSpeedBoosted) // %5 şans { isBossSpeedBoosted = true; // Hız artışı durumu bossTimer.Interval = 100; // Hızlanmayı sağlar bossSpeedBoostTimer.Start(); // Hızlanma süresi başlat } } private void BossSpeedBoostTimer_Tick(object sender, EventArgs e) { isBossSpeedBoosted = false; // Hız artışı durumu geri al bossTimer.Interval = 200; // Normal hız ayarla bossSpeedBoostTimer.Stop(); // Timer'ı durdur } private void Form1_KeyDown(object sender, KeyEventArgs e) { // Tuşlara basıldığında karakteri sağa ve sola hareket ettirir if (e.KeyCode == Keys.A) movingLeft = true; // Sol hareket if (e.KeyCode == Keys.D) movingRight = true; // Sağ hareket } private void Form1_KeyUp(object sender, KeyEventArgs e) { // Tuşlar bırakıldığında hareket durur if (e.KeyCode == Keys.A) movingLeft = false; // Sol hareket durdu if (e.KeyCode == Keys.D) movingRight = false; // Sağ hareket durdu } private void GameTick(object sender, EventArgs e) { // Karakterin hareketini güncelle if (movingLeft && pbCharacter.Left > 0) pbCharacter.Left -= 10; // Sol if (movingRight && pbCharacter.Right < ClientSize.Width) pbCharacter.Left += 10; // Sağ // Düşen nesneleri kontrol et for (int i = fallingObjects.Count - 1; i >= 0; i--) { fallingObjects[i].Top += objectSpeed; // Düşme hızı // Karakterle çarpışma kontrolü if (fallingObjects[i].Bounds.IntersectsWith(pbCharacter.Bounds)) { // Muz kontrolü if (fallingObjects[i].ImageLocation.Contains("muz.png")) { lives--; // Can kaybı UpdateLives(); // Can güncelleme } else { score += GetScoreForLevel(); UpdateScoreAndLevel(); } // Düşen nesneyi kaldır Controls.Remove(fallingObjects[i]); fallingObjects.RemoveAt(i); continue; // Dışarıdaki işlemleri atla } // Nesne ekranın altına düştüğünde if (fallingObjects[i].Top > ClientSize.Height) { // Eğer düşen nesne muz değilse ve ekranın dışına düştüyse can kaybı if (!fallingObjects[i].ImageLocation.Contains("muz.png")) { lives--; // Can kaybı UpdateLives(); // Can güncelleme } Controls.Remove(fallingObjects[i]); // Ekranın dışına düşen nesneleri kaldır fallingObjects.RemoveAt(i); } } // Boss ile çarpışma kontrolü if (boss != null && boss.Visible && pbCharacter.Bounds.IntersectsWith(boss.Bounds)) { lives--; // Can kaybı UpdateLives(); // Can güncelleme } // Bossun attığı muzların karaktere doğru hareket etmesini sağla foreach (PictureBox obj in fallingObjects) { if (obj.ImageLocation.Contains("muz.png")) // Muz kontrolü { if (pbCharacter.Left > obj.Left) obj.Left += 2; // Sağ else if (pbCharacter.Left < obj.Left) obj.Left -= 2; // Sol } } } private void SpawnObject(object sender, EventArgs e) { // Rastgele nesne oluşturma, eğer boss görünürse nesne spawn etme if (boss == null || !boss.Visible) { PictureBox obj = CreateFallingObject(); fallingObjects.Add(obj); this.Controls.Add(obj); } } private PictureBox CreateFallingObject() { PictureBox obj = new PictureBox { Size = new Size(30, 30), Location = new Point(rnd.Next(0, Math.Max(0, ClientSize.Width - 30)), 0), // Kontrol eklendi SizeMode = PictureBoxSizeMode.StretchImage }; string[] images; if (level == 1) { images = new[] { "yogurt.png", "ekmek.png", "ketcap.png", "mayonez.png" }; } else if (level == 2) { images = new[] { "muz.png", "portakal.png", "limon.png", "karpuz.png" }; } else // level == 3 { images = new[] { "kebap.png", "sucuk.png", "salam.png", "cikolata.png" }; } string selectedImage = images[rnd.Next(images.Length)]; string imageFilePath = imagePath + selectedImage; if (!System.IO.File.Exists(imageFilePath)) { imageFilePath = imagePath + "unnamed.jpg"; // Yoksa unnamed.png kullan } // Resim yüklemesini try-catch bloğuyla kontrol et try { obj.ImageLocation = imageFilePath; obj.Load(); // Resmi yükle } catch (Exception ex) { MessageBox.Show($"Resim yüklenirken hata oluştu: {ex.Message}"); obj.ImageLocation = imagePath + "unnamed.jpg"; // Hata durumunda unnamed.png kullan } return obj; } private int GetScoreForLevel() { // Seviyeye göre puan döndürür return 100; // Her seviyede aynı puan } private void UpdateScoreAndLevel() { lblPuan.Text = $"Puan: {score}"; // Seviye kontrolü ve güncelleme if (score >= 200 && level == 1) { level = 2; objectSpeed += (int)(objectSpeed * 0.05); // Hız %5 artır spawnTimer.Interval = 3000; // 2. seviye 3 saniyede bir lblSeviye.Text = $"Seviye: {level}"; } else if (score >= 400 && level == 2) { level = 3; objectSpeed += (int)(objectSpeed * 0.05); // Hız %5 artır spawnTimer.Interval = 2000; // 3. seviye 2 saniyede bir lblSeviye.Text = $"Seviye: {level}"; } // Boss kontrolü if (score >= 1000) { if (boss == null) { boss = new Boss(); this.Controls.Add(boss); // Bossu forma ekle bossTimer.Start(); // Boss hareket timer'ını başlat bossAttackTimer.Start(); // Boss saldırı timer'ını başlat button1.Visible = true; // Boss'u vurma butonunu göster spawnTimer.Stop(); // Boss gelince nesneleri spawn etmeyi durdur bossHealthBar.Visible = true; // Boss can barını göster } else if (secondBoss == null) // İkinci boss'u oluştur { secondBoss = new Boss(); // Boss sınıfını tekrar kullanarak ikinci boss'u oluştur secondBoss.Location = new Point(ClientSize.Width - secondBoss.Width, 0); // Sağdan başlat this.Controls.Add(secondBoss); bossTimer.Start(); // İkinci boss için de timer'ı başlat } } } private void EndGame() { gameTimer.Stop(); // Oyun bitince timer'ı durdur spawnTimer.Stop(); // Nesne spawn timer'ını durdur bossTimer.Stop(); // Boss timer'ını durdur bossAttackTimer.Stop(); // Boss saldırı timer'ını durdur MessageBox.Show("Oyun Bitti! Puanınız: " + score); Application.Exit(); // Uygulamayı kapat } private void UpdateLives() { lblKalp.Text = "Can: " + lives; if (lives <= 0) { EndGame(); // Oyunun sonlanması } } private void BossTick(object sender, EventArgs e) { // İlk boss için hareket if (boss != null && boss.Visible) { if (pbCharacter.Left > boss.Left) { boss.Left += 5; // Karakter sağda ise boss sağa hareket etsin } else if (pbCharacter.Left < boss.Left) { boss.Left -= 5; // Karakter solda ise boss sola hareket etsin } // Boss yalnızca ekranın alt kısmında sağa ve sola hareket etsin if (boss.Left <= 0) // Sol kenara çarptığında { boss.Left = 0; // Ekranın dışına çıkmasın } else if (boss.Right >= ClientSize.Width) // Sağ kenara çarptığında { boss.Left = ClientSize.Width - boss.Width; // Ekranın dışına çıkmasın } } // İkinci boss için hareket if (secondBoss != null && secondBoss.Visible) { // İkinci boss, sağdan sola hareket etsin if (pbCharacter.Left > secondBoss.Left) { secondBoss.Left -= 3; // Sağdan solda doğru hareket } else if (pbCharacter.Left < secondBoss.Left) { secondBoss.Left += 3; // Soldan sağa hareket } // İkinci boss yalnızca ekranın alt kısmında sağa ve sola hareket etsin if (secondBoss.Left <= 0) // Sol kenara çarptığında { secondBoss.Left = 0; // Ekranın dışına çıkmasın } else if (secondBoss.Right >= ClientSize.Width) // Sağ kenara çarptığında { secondBoss.Left = ClientSize.Width - secondBoss.Width; // Ekranın dışına çıkmasın } } } private void BossVisibilityTimer_Tick(object sender, EventArgs e) { if (boss != null) { isBossVisible = !isBossVisible; // Bossun görünürlüğünü değiştir boss.Visible = isBossVisible; // Boss görünürken nesne spawn etme if (!isBossVisible) { spawnTimer.Start(); // Boss görünmezse nesne spawn etmeye başla } else { spawnTimer.Stop(); // Boss görünürse nesne spawn etmeyi durdur } } } private async void BossAttack(object sender, EventArgs e) { if (boss != null && boss.Visible) { // İlk boss için saldırı // %10 şansla hızlı saldırı, %20 şansla özel muz atma double chance = random.NextDouble(); if (chance < 0.1) // %10 için { fastAttackTimer.Start(); // Hızlı saldırıyı başlat await Task.Delay(2000); // 2 saniye bekle fastAttackTimer.Stop(); // Hızlı saldırıyı durdur bossAttackTimer.Start(); // Standart saldırıyı tekrar başlat } else if (chance < 0.15) // %10 + %20 = %30 toplam { DropFastBanana(); // Hızlı muz bırakma işlemi } else { DropBanana(); // Normal muz bırakma işlemi } } // İkinci boss için saldırı if (secondBoss != null && secondBoss.Visible) { DropBanana(); // İkinci boss da normal muz bırakabilir } } private void DropFastBanana() { PictureBox fastBanana = new PictureBox { Size = new Size(20, 20), Location = new Point(boss.Left + (boss.Width / 2) - 10, boss.Bottom), // Boss'un altına muz bırak SizeMode = PictureBoxSizeMode.StretchImage }; fastBanana.ImageLocation = imagePath + "muz.png"; // Muz resmini ayarla fastBanana.Load(); // Resmi yükle fallingObjects.Add(fastBanana); // Muzları düşen nesne listesine ekle this.Controls.Add(fastBanana); // Kontrolü forma ekle // Hızlı muzun hareket hızını artırmak için bir timer ayarlayabiliriz Timer fastBananaTimer = new Timer(); fastBananaTimer.Interval = 20; // Her 20 ms'de bir fastBananaTimer.Tick += (s, args) => { if (fastBanana != null && fastBanana.Visible) { fastBanana.Top += 10; // Düşme hızı 10 (normal muzdan 1.5 kat daha hızlı) // Muz karakteri takip etme if (pbCharacter.Left > fastBanana.Left) fastBanana.Left += 5; // Sağ else if (pbCharacter.Left < fastBanana.Left) fastBanana.Left -= 5; // Sol // Karakterle çarpışma kontrolü if (fastBanana.Bounds.IntersectsWith(pbCharacter.Bounds)) { lives--; // Can kaybı UpdateLives(); // Can güncelleme // Muzu kaldır Controls.Remove(fastBanana); fallingObjects.Remove(fastBanana); fastBananaTimer.Stop(); // Timer'ı durdur return; } } else { fastBananaTimer.Stop(); // Eğer muz görünmüyorsa timer'ı durdur } }; fastBananaTimer.Start(); // Hızlı muz hareketini başlat } private void FastAttack(object sender, EventArgs e) { DropBanana(); // Hızlı saldırıda muz bırakma } private void DropBanana() { PictureBox banana = new PictureBox { Size = new Size(20, 20), Location = new Point(boss.Left + (boss.Width / 2) - 10, boss.Bottom), // Boss'un altına muz bırak SizeMode = PictureBoxSizeMode.StretchImage }; banana.ImageLocation = imagePath + "muz.png"; // Muz resmini ayarla banana.Load(); // Resmi yükle fallingObjects.Add(banana); // Muzları düşen nesne listesine ekle this.Controls.Add(banana); // Kontrolü forma ekle } private void btnOyna_Click(object sender, EventArgs e) { gameTimer.Start(); // Oyunu başlat button1.Visible = false; // Butonu gizle } // Boss sınıfı public class Boss : PictureBox { public Boss() { this.Size = new Size(80, 80); // Boss boyutu this.ImageLocation = @"C:\boss.jfif"; // Boss resmi yüklendi this.SizeMode = PictureBoxSizeMode.StretchImage; this.Location = new Point(0, 0); // Başlangıç konumu } } private async void button1_Click(object sender, EventArgs e) { if (boss != null && boss.Visible) // İlk boss kontrolü { bossHealth--; // Boss'un canını azalt bossHealthBar.Value = bossHealth; // Boss can barını güncelle // Boss'un canı sıfıra inerse if (bossHealth <= 0) { this.Controls.Remove(boss); // Boss'u kaldır boss = null; // Boss nesnesini null yap bossHealthBar.Visible = false; // Boss can barını gizle button1.Visible = false; // Butonu gizle MessageBox.Show("Boss yenildi!"); return; // Eğer boss yok edilirse metodu burada bitiriyoruz. } // Eğer bossun canı %25'e inerse ikinci bossu oluştur if (bossHealth == 5 && secondBoss == null) // 20 canı olan boss için 5 can kaldığında { secondBoss = new Boss(); secondBoss.Location = new Point(ClientSize.Width - secondBoss.Width, 0); // Sağdan yerleştir this.Controls.Add(secondBoss); // İkinci bossu forma ekle bossAttackTimer.Start(); // İkinci boss için saldırı timer'ını başlat } } // Butonu tıklayınca 3 saniye görünmez yap button1.Visible = false; await Task.Delay(10000); // 3 saniye bekle button1.Visible = true; // Sonra tekrar görünür yap } } }