C# Basit Oyun Yapımı Simple Game

Csharp da basit bir oyun yapımını göstereceğim temel işlemlerin yer aldığı flappy bird ün resimleri bulunduğu basit bir oyun olacak.

Oyunumuzun Görseli

Formumuzun Constructor'ını ve global değişkenlerimizi yazıyoruz.

//Constructorımız
public KOSAVAR()
{
    InitializeComponent();
    //OyunÇalışınca Savacinin Başlama Pozisyonu
    Savasci.Top = 150;
    silah.Visible = false;
}
//Puan Değişkenimiz
int puan = 0;
//Buton işlemleri Değişkenimiz
bool ButonTiklamalari = false;

Şimdi yerimiz hareket etsin ki savaşçımızın hareket ediyormuş gibi gözüksün. Bunun için timer_yer adında da yeni bir timer ekliyoruz. Ve bu timer mızın Tick olayının içine şunları yazıyoruz.

private void timer_Yer_Tick(object sender, EventArgs e)
{
    //Yerimiz sola doğru gelsin
    pictureBox_Yer.Left -= 5;
    if (pictureBox_Yer.Left <= -100)
    {
        pictureBox_Yer.Left = 0;
    }
}

Sırada hareket etmesi gereken düşman askerleri var. Bunun için timer_asker adında da yeni bir timer ekliyoruz. Ve bu timer'mızın Tick olayının içine de şunları yazıyoruz.

 private void timer_Asker_Tick(object sender, EventArgs e)
 {
     Random r1 = new Random();
      int b = r1.Next(10,150);
      int a = r1.Next(1,25);
      silah.Left += 9; 
      asker.Left -= 5;
      asker2.Left -= 5;
      asker3.Left -= 5;

      // silah askere değince silah.Right >= asker.Left && silah.Top >= asker.Top || silah.Bottom >= asker.Bottom
      if (silah.Bounds.IntersectsWith(asker.Bounds)) 
      {
         //Askerimize Yeni bir yer atamış oluyoruz
         asker.Left = 600 + a;
         asker.Top = b + a;
         puan++;
         Puan.Text=puan.ToString();
      }
      if (silah.Bounds.IntersectsWith(asker2.Bounds))
      {
         //Askerimize Yeni bir yer atamış oluyoruz
         asker2.Left = 590+ a;
         asker2.Top = b + a;
         puan++;
         Puan.Text=puan.ToString();
      }
      if (silah.Bounds.IntersectsWith(asker3.Bounds))
      {
          //Askerimize Yeni bir yer atamış oluyoruz
          asker3.Left = 610+ a;
          asker3.Top = b + a;
          puan++;
          Puan.Text=puan.ToString();
      }
      // Kahramanım Askerlere carparsa dursun yani yansın
      if (Savasci.Bounds.IntersectsWith(asker3.Bounds) || 
          Savasci.Bounds.IntersectsWith(asker.Bounds) || 
          Savasci.Bounds.IntersectsWith(asker2.Bounds))
      {
          timer_Yer.Enabled = false;
          timer_Asker.Enabled = false;

          MessageBox.Show("Tekrar Başlamak için F1 Tuşuna Basınız. Puanınız : " + puan + "", "Yandınız KOSAVAR");
      }

      //Kahramanım yere carparsa da yansın
      if (Savasci.Bounds.IntersectsWith(pictureBox_Yer.Bounds))
      {
         timer_Yer.Enabled = false;
         timer_Asker.Enabled = false;
         MessageBox.Show("Tekrar Başlamak için F1 Tuşuna Basınız. Puanınız : " + puan + "", "Yandınız KOSAVAR");
      }
      //Askerler sola gidişi biterse  
      //yeni bir yer atıyoruz
      if (asker.Left <= -3)
      {
         asker.Left = 567 + a;
         asker.Top = b + a;
      }
      if (asker2.Left <= -2)//ekran bıtınce
      {
         asker2.Left = 567+a;
         asker2.Top = b+a;

      }
      if (asker3.Left <= -1)
      {
         asker3.Left = 567+a;
         asker3.Top = b+a;
      }
  }

Şimdi kahramanımız hariç herkesi hareket ettirdiğimize göre sıra kahramanımızda bunun içinde formumuzun KeyDown olayına şunları yazıyoruz.

 private void KOSAVAR_KeyDown(object sender, KeyEventArgs e)
 {
   //picturebox'a x ve y koordinatları atıyoruz.
   int x = Savasci.Location.X;
   int y = Savasci.Location.Y;

   if (e.KeyCode == Keys.Right && x >= 0 || x<0 )
                x += 5;//Tuşa 1 kere basıldığında kaç pixel kayacağını gösteriyor

    if (e.KeyCode == Keys.Up && y >= 0 || y < 0 )
                y -= 5;

    if (e.KeyCode == Keys.Down && y >= 0 || y < 0 )
                y += 5;

    if (e.KeyCode == Keys.Left && y >= 0 )
                x -= 5;

    if (e.KeyCode == Keys.Space)//Ateş etme
    {
       //silağımızın yani mermizin başlama yerini belirliyoruz
       silah.Top = Savasci.Top;
       silah.Left = Savasci.Right + 1;
       silah.Visible = true;
       if (ButonTiklamalari)
             timer_Asker.Start();

    }

    //Savaşcımızın yeni lokasyonu alıyoruz
     Savasci.Location = new Point(x,y);
     if (e.KeyCode == Keys.F1)//Yeniden başlatma
                 Application.Restart();

     if (e.KeyCode == Keys.Escape)//Oyundan Çıkma
                this.Close();
  }

Son olarak da oyunumuzun başlatma durdurma butonlarınını yazalım bunun için başlat ve durdur resimin click olayına şunları yazıyoruz.

  private void Pic_Baslat_Click(object sender, EventArgs e)
  {
     if (!Savasci.Bounds.IntersectsWith(asker.Bounds) &&
         !Savasci.Bounds.IntersectsWith(asker2.Bounds) &&
         !Savasci.Bounds.IntersectsWith(asker3.Bounds) &&
         !Savasci.Bounds.IntersectsWith(pictureBox_Yer.Bounds))
         {
             timer_Yer.Start();
             timer_Asker.Start();
             ButonTiklamalari = true;
         }
  }
  private void Pic_Durdur_Click(object sender, EventArgs e)
  {
     if (!Savasci.Bounds.IntersectsWith(asker.Bounds) &&
         !Savasci.Bounds.IntersectsWith(asker2.Bounds) &&
         !Savasci.Bounds.IntersectsWith(asker3.Bounds) &&
         !Savasci.Bounds.IntersectsWith(pictureBox_Yer.Bounds))
         {
             timer_Yer.Stop();
             timer_Asker.Stop();
             ButonTiklamalari = false;
         }
  }

Projeye Bu Link den ulaşabilirsiniz. Ben böyle kodladım tabi daha çok geliştirilebilir.