Visual Studio C# Form Application ile Taş Kağıt Makas Oyunu Yapılımı

Visual Studio C# Form Application ile Taş Kağıt Makas Oyunu Yapılımı

Merhaba arkadaşlar bu yazımda sizlere C# kullanarak Visual Studio Form Application da taş kağıt makas oyunu yapacağız.

Oyunun özellikleri
1 Oyunculu - Bilgisayara Karşı
2 Oyunculu - 2 Arkadaş Oynayabiliyor

Yapımda Kullandığım Elemanlar

  • 5 adet buton
  • 6 adet label
  • 3 adet panel
Oyun bittiği zaman nasıl gözükmesi gerekiyor


İlk olarak oyuna başlama kısmını yapalım yani 1. paneli.
İlk olarak 1 adet 420x300 boyutunda bir panel koyuyoruz ve ortasına 2 adet button koyuyoruz.
Bu butonlar ile pc ye karşımı yoksa arkadaşına karşımı oynayacağını seçtiriyoruz.

Butonlarımızın kodları şu şekilde olacak içleri

1 Oyuncu Butonu

panel1.Visible = false;
panel2.Visible = true;

2 Oyuncu Butonu

panel1.Visible = false;
panel3.Visible = true;

Ardından bilgisayara karşı oynana yeri yapmak için 2. paneli atıyor ve yukarıdaki görseldeki gibi elemanları ekleyin ama unutmayın puan ve bilgisayara karşı oyna yazısının arasında kullanıcıya kimin kazandığını söylemek için bir label daha bulunuyor.
Bilgi veren label e tek_oyuncu_bilgi adını verdim, puanın gösterildiği label a da tek_oyuncu_puan adını verdim.
Evrensel bir single_score adında int değer tuttum ve burada kullanıcın puan değerini sakladım.

Şimdi ilk olarak kimin nasıl kazanacağını belirleyen bir fonksiyon yazalım.
        
 public int single_score = 0;
 public void single_tas_kagit_makas(int secim_user)
        {
            Random rand = new Random();
            int secim_pc = rand.Next(0, 2 + 1);

            string[] rsp = { "Taş", "Kağıt", "Makas" };

            // Taş = 0 Kağıt = 1 Makas = 2
            if (secim_user == 0 && secim_pc == 0 || secim_user == 1 && secim_pc == 1 || secim_user == 2 && secim_pc == 2)
            {
                tek_oyuncu_bilgi.Text = "Berabere kaldınız" + "\n Bilgisayar : " + rsp[secim_pc] + "\n Sen : " + rsp[secim_user];
            }
            else if (secim_user == 0 && secim_pc == 2 || secim_user == 1 && secim_pc == 0 || secim_user == 2 && secim_pc == 1)
            {
                tek_oyuncu_bilgi.Text = "Kazandınız" + "\n Bilgisayar : " + rsp[secim_pc] + "\n Sen : " + rsp[secim_user];
                single_score++;
                tek_oyuncu_puan.Text = "Puan : " + single_score.ToString();
            }
            else
            {
                tek_oyuncu_bilgi.Text = "Kaybettiniz" + "\n Bilgisayar : " + rsp[secim_pc] + "\n Sen : " + rsp[secim_user];
                single_score--;
                tek_oyuncu_puan.Text = "Puan : " + single_score.ToString();
            }

        }

Bilgisayarın anlayacağı şekilde kullanıcı bilgilerini aldık ve bilgisayara da rast gele seçim yaptırdık.
Bu fonksiyonda bilgisayarın anlaması için 0 1 2 int değerlerine taş kağıt makas adını verdik ve kıyaslama operatörleri ile sisteme kimin yenip kimin kaybedeceğini tanımlattık.
Evet arkadaşlar bundan sonra tek oyunculu kısmı için sadece butonlara bu fonksiyonu çalıştırması için emir vermek kaldı.

Taş yazan butona

  single_tas_kagit_makas(0);

Kağıt yazan butona

  single_tas_kagit_makas(1);

Makas yazan butona

  single_tas_kagit_makas(2);

kodlarını atadık ve fonksiyonumuzu çağırdık böylelikle tek oyunculu oyun bitmiş oluyor gelin şimdi çok oyunculu kısmını yapalım.
Çok oyunculu sistem için ben klavye ile tuşlara basılması ile oynan bir sistem yaptım diğer türlü kimin neye bastıgı görülecekti ama bu şekilde 1. kullanıcı a,s,d 2. kullanıcı 1,2,3 tuşlarını kullanıp seçimini yapıyor ve hızlı bir şekilde daha doğrusu aynanda seçecekleri için çoklu bir şekilde oynanabiliyor.

Çoklu oyuncu için 3. bir panel atıp yukarıdaki gibi görünümü yapın. Bilgi labelini koymayı unutmayın.
Gelin kodlara geçelim.
Uygulama ilk açıldığı zaman çalışan yere "this.KeyPreview = true" komutunu girmemiz gerekiyor kullanıcının klavye girdilerini takip etmek için.

 public Form1()
        {
            this.KeyPreview = true;

            InitializeComponent();
        }

Şimdi kullanıcılar arasında olan rekabeti algılayacak fonksiyonu yazmamız gerekiyor. Bilgisayara karşı için kullandığımızın aynısını alıp ekstra bir int atayıp bilgisayar yerine fonksiyona girilen değeri alıp işlem yaptırıyoruz.

      public void  multiplayer_tas_kagit_makas(int user1, int user2)
        {           

            string[] rsp = { "Taş", "Kağıt", "Makas" };

            // Taş = 0 Kağıt = 1 Makas = 2
            if (user1 == 0 && user2 == 0 || user1 == 1 && user2 == 1 || user1 == 2 && user2 == 2)
            {
                ark_bilgilendirme.Text = "Berabere kaldınız" + "\n 1. Oyuncu : " + rsp[user1] + "\n 2. Oyuncu : " + rsp[user2];
            }
            else if (user1 == 0 && user2 == 2 || user1 == 1 && user2 == 0 || user1 == 2 && user2 == 1)
            {
                ark_bilgilendirme.Text = "1. Oyuncu Kazandınız 2. Oyuncu Kaybettiniz" + "\n 1. Oyuncu : " + rsp[user1] + "\n 2. Oyuncu : " + rsp[user2];

                ark_puan.Text = "Puan : " + single_score.ToString();
            }
            else
            {
                ark_bilgilendirme.Text = "1. Oyuncu Kaybettiniz 2. Oyuncu Kazandınız" + "\n 1. Oyuncu : " + rsp[user1] + "\n 2. Oyuncu : " + rsp[user2];

                ark_puan.Text = "Puan : " + single_score.ToString();
            }

        }


Buradaki kodları açıklamaya gerek duymuyorum yukarıda zaten aynısını bilgisayar için yaptıklarımızı açıklamıştım.

Şimdi gelin kullanıcının klavyeden girdiği değerleri algılama işlemini yapalım.

İlk adım olarak oyuncuların hangisinin hangi tuşa ne girdiğini yakalamak için evrensel integer değer oluşturuyoruz.

 public int oyuncu_1 = -1, oyuncu_2 = -1;


Burada -1 değerini verdim çünkü kullanıcılardan ikisi de seçim yapmadan sonucu göstermek istemiyorum ve bu sayede kontrol edeceğiz aşağıdaki kodları inceleyince zaten anlarsınız.
Şimdi artık klavyeyi yakalayıp işlem yaptırabiliriz.

        private void Key_Press(object sender, KeyPressEventArgs e)
         {
           
            if(e.KeyChar.ToString() == "a")
            {
                oyuncu_1 = 0;
            }
            else if(e.KeyChar.ToString() == "s")
            {
                oyuncu_1 = 1;
            }
            else if (e.KeyChar.ToString() == "d")
            {
                oyuncu_1 = 2;
            }

            if (e.KeyChar.ToString() == "1")
            {
                oyuncu_2 = 0;
            }
            else if (e.KeyChar.ToString() == "2")
            {
                oyuncu_2 = 1;
            }
            else if (e.KeyChar.ToString() == "3")
            {
                oyuncu_2 = 2;
            }


            if (oyuncu_1 != -1 && oyuncu_2 != -1)
            {
                multiplayer_tas_kagit_makas(oyuncu_1, oyuncu_2);
                oyuncu_1 = -1;
                oyuncu_2 = -1;
            }

        }


Burada yaptığımızı açıklayayım hemen sizlere.
Klavyedeki a,s,d tuşlarına basılınca 1. oyuncuya taş kağıt makas olarak atama yaptık.
1,2,3 tuşları içinde 2. oyuncuya atamalarda bulunduk.
Sonra 2 oyuncunun da seçimleri yapılmışsa kıyaslama için yazdığımız fonksiyonu çağırdık ve sonuçları oyunculara gösterdik.
İşlem bittikten sonra kullanıcı verilerini sıfırladık daha doğrusu -1 yaptık ki seçimsiz kalsınlar böylelikle 2. defa oynayabilsinler, ard arda oynayabilsinler.

Burada klavye yakarken en önemli nokta Form içerisinden KeyPress eventine yazdığınız fonksiyonu atamayı unutmamanız gerekiyor.(Resimde Key_Press_Up da bulunuyor ama onları atmanıza gerek yok Key_Press i atmanız yeterlidir.)


Benim yaptığım projeye GitHub üzerinden ulaşabilirsiniz.
GitHup - Urhoba Taş Kağıt Makas

Oyun İçinden Görüntüler