25 Mayıs 2013 Cumartesi

C Sharp Uygulamaları İskambil Kağıt Dağıtma Örnek Uygulama



KONU : C Sharp Uygulamalar - C Sharp ( C# ) form uygulamalar iskambil kağıtları karma ve dağıtma. İskambil kağıtlarını form üzerinde picturebox nesnesi ile gösterme. Oyuncu Kağıt görsellerini form üzerinde sıralama ve yerleştirme. İskambil kağıt oynama alanı oluşturma.
ETİKETLER: c sharp iskambil - c# iskambil - c# iskambil oyunu - c# pişti oyunu - c# pişti - c# ile pişti - c# batak oyunu - c# batak oyunu -c sharp kağıt oyun alanı - oyun alanı oluşturma- kağıt oyunları - picturebox - resimleri bölme - resimleri rastgele dağıtma.



UYGULAMAYI İNDİR



using System;
using System.Collections.Generic;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace iskambilOyun
{
    public partial class Form1 : Form
    {
        #region Global değişkenler
        ArrayList resimler = new ArrayList();
        ArrayList kartlar = new ArrayList();
        ArrayList etiketler = new ArrayList();
        int[] oyunEl = new int[52];
        int deste = 20, el = 5;
        Label[] lblPuan;
        int acikKartSayisi = 0;
        int[] xx = new int[4];
        int[] yy = new int[4];

        #endregion

        #region Form1
        public Form1()
        {
            InitializeComponent();
        }
        #endregion

        #region Form u yukle
        private void Form1_Load(object sender, EventArgs e)
        {
            resimleriOlustur();
            Dagit_Click(sender, e);
            kartlariSirala();
            ekranaYukle();
            elPuanları();
            ayniOlanKartlar();
        }
        #endregion

        #region Yeni oyun Başlat
        private void yeniOyunToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Temizle();
            resimleriOlustur();
            Dagit_Click(sender, e);
            kartlariSirala();
            ekranaYukle();
            elPuanları();
            ayniOlanKartlar();
        }
        #endregion

        #region Ekranı temizle
        private void Temizle()
        {
            for (int i = 0; i < deste; i++)
            {
                ((PictureBox)kartlar[i]).Dispose();
            }
            for (int i = 0; i < 8; i++)
            {
                ((Label)etiketler[i]).Dispose();
            }
            acikKartSayisi = 0;
        }
        #endregion

        #region Kartları Dağıt
        private void Dagit_Click(object sender, EventArgs e)
        {
            ArrayList kagitlar = new ArrayList();
            kagitlar.Clear();
            kartlar.Clear();
            etiketler.Clear();
            int x = 375, y = 50, kart = 0, random;
            Random rdn = new Random();
            for (int i = 0; i < 4; i++)
            {
                Label lbl = new Label();
                lbl.Name = i.ToString();
                xx[i] = x - 100;
                yy[i] = y + 115;
                lbl.Location = new Point(x - 100, y + 115);
                etiketler.Add(lbl);
                this.Controls.Add(lbl);
                for (int j = 0; j < el; j++)
                {
                    PictureBox pcb = new PictureBox();
                    pcb.Name = kart.ToString();
                    pcb.Size = new Size(73, 98);
                    pcb.Location = new Point(x, y);
                    pcb.Click += new EventHandler(pcb_Click);
                    pcb.BringToFront();
                    x -= 25;

                    random = rdn.Next(0, 52);
                    while (kagitlar.Contains(random))
                        random = rdn.Next(0, 52);
                    kagitlar.Add(random);
                    kartlar.Add(pcb);
                    oyunEl[kart++] = random;

                    //pcb.Image = (Image)resimler[random];
                    this.Controls.Add(pcb);
                }

                if (i != 1)
                    y += 200;
                if (i == 1)
                    x = 600;
                if (i == 2)
                    x = 375;
                if (i == 0)
                    x = 135;
            }
        }
        #endregion

        #region Kart resimlerini olustur
        void resimleriOlustur()
        {
            Bitmap resim = new Bitmap(1, 1);
            Graphics gr = null;
            //Bu Bitmap için grafik nesnesi oluştur
            int x = 0, y = 0, w = 73, h = 98;
            for (int i = 0; i < 4; i++)
            {
                for (int k = 0; k < 13; k++)
                {
                    Rectangle seçili_alan = new Rectangle(x, y, w, h);
                    //Seçili alan büyüklüğünde bir Bitmap oluştur
                    resim = new Bitmap(seçili_alan.Width, seçili_alan.Height);
                    //Bu Bitmap için grafik nesnesi oluştur
                    gr = Graphics.FromImage(resim);
                    //Picture Box içindeki resmi yeni resmin 0,0 noktasına çiz
                    gr.DrawImage(pictureBox1.Image, 0, 0, seçili_alan, GraphicsUnit.Pixel);
                    //Yeni resmi pictureBox içine ata
                    resimler.Add(resim);
                    x += 73;
                }
                y += 98;
                x = 0;
            }
            gr.Dispose();
        }
        #endregion

        #region Tıklanan kartı ortaya al
        void pcb_Click(object sender, EventArgs e)
        {
            PictureBox pcb = (PictureBox)sender;
            pcb.Location = new Point(325, 250);
            pcb.BringToFront();
            int kartNo = int.Parse(pcb.Name);
            int lblNo = 0;
            if (kartNo < el && kartNo >= 0)
                lblNo = 0;
            else
                if (kartNo < 2 * el && kartNo >= el)
                    lblNo = 1;
                else
                    if (kartNo < 3 * el && kartNo >= 2 * el)
                        lblNo = 2;
                    else
                        lblNo = 3;

            Label lbl = ((Label)etiketler[lblNo]);
            int lblToplam = int.Parse(lbl.Text.Substring(14));
            int kartPuan = 0;
            if (oyunEl[kartNo] % 13 == 0)
                kartPuan = 11;
            else
                if (oyunEl[kartNo] % 13 > 9)
                    kartPuan = 10;
                else
                    kartPuan = oyunEl[kartNo] % 13 + 1;
            lblToplam -= kartPuan;
            lbl.Text = "Toplam Puan = " + lblToplam.ToString();
            acikKartSayisi--;
            DialogResult c = DialogResult.None;
            if (acikKartSayisi == 0)
                c = MessageBox.Show("Yeni oyun başlasın mı?", "Yeni Oyun", MessageBoxButtons.YesNo);
            if (c == DialogResult.Yes)
                yeniOyunToolStripMenuItem_Click(sender, e);
            else if (c == DialogResult.No)
                Close();

        }
        #endregion

        #region Kartları Sırala
        void kartlariSirala()
        {
            ArrayList oyun = new ArrayList();
            for (int i = 0; i < 4; i++)
            {
                for (int k = 0; k < el; k++)
                    oyun.Add(oyunEl[i * el + k]);
                oyun.Sort();
                for (int k = 0; k < el; k++)
                    oyunEl[i * el + k] = int.Parse(oyun[k].ToString());
                oyun.Clear();
            }
        }
        #endregion

        #region Kartları Göster
        void ekranaYukle()
        {
            for (int i = 0; i < deste; i++)
            {
                PictureBox pcb = (PictureBox)kartlar[i];
                pcb.Image = (Image)resimler[oyunEl[i]];
                acikKartSayisi++;
            }
        }
        #endregion

        #region Puanları Hesapla
        private void elPuanları()
        {
            int toplamPuan = 0, kartPuan = 0;

            for (int i = 0; i < 4; i++)
            {
                for (int k = 0; k < el; k++)
                {
                    if (oyunEl[i * el + k] % 13 == 0)
                        kartPuan = 11;
                    else
                        if (oyunEl[i * el + k] % 13 > 9)
                            kartPuan = 10;
                        else
                            kartPuan = oyunEl[i * el + k] % 13 + 1;
                    toplamPuan += kartPuan;
                }
                Label lbl = (Label)etiketler[i];
                lbl.Text = "Toplam Puan = " + toplamPuan.ToString();
                toplamPuan = 0;
            }
        }
        #endregion

        #region Puanları Hesapla
        private void ayniOlanKartlar()
        {
            string aynısıvar = "";
            int aynı = 1;
            int name = 4;
            for (int j = 0; j < 4; j++)
            {
                string etiket = "";
                aynısıvar = "";

                for (int i = 0; i < el; i++)
                {
                    if (aynısıvar.IndexOf((oyunEl[5 * j + i] % 13).ToString()) < 0)
                        for (int k = i + 1; k < el; k++)
                        {
                            if (oyunEl[5 * j + i] % 13 == oyunEl[5 * j + k] % 13)
                            {
                                aynı++;
                                aynısıvar = (oyunEl[5 * j + 1] % 13).ToString() + " ";
                            }
                        }
                    if (aynı > 1)
                        etiket += aynı.ToString() + " tane " + (oyunEl[5 * j + i] % 13 + 1).ToString() + " ";
                    aynı = 1;
                }
                if (etiket == "")
                    etiket += "Aynı Olan Kart Yok";
                else
                    etiket += " var";

                Label lblet = new Label();
                lblet.Name = name.ToString();
                lblet.Location = new Point(xx[j], yy[j] + 30);
                lblet.Text = etiket;
                etiketler.Add(lblet);
                this.Controls.Add(lblet);
                name++;
            }
        }
        #endregion

        private void denemeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            List< Image > parcaResimler = new List< Image >();
            Bitmap resim;
            Graphics gr = null;
            Image alinanResim = Image.FromFile(@"C:\alinan.jpg");
            int sutunSayisi = 2;
            int satirSayisi = 5;
            int x = 0;
            int y = 0;
            for (int i = 0; i < satirSayisi; i++)
            {
                for (int k = 0; k < sutunSayisi; k++)
                {
                    Rectangle seçili_alan = new Rectangle(x, y, alinanResim.Width / sutunSayisi, alinanResim.Height / satirSayisi);
                    //Seçili alan büyüklüğünde bir Bitmap oluştur
                    resim = new Bitmap(seçili_alan.Width, seçili_alan.Height);
                    //Bu Bitmap için grafik nesnesi oluştur
                    gr = Graphics.FromImage(resim);
                    //Picture Box içindeki resmi yeni resmin 0,0 noktasına çiz
                    gr.DrawImage(alinanResim, 0, 0, seçili_alan, GraphicsUnit.Pixel);
                    //Yeni resmi parcaResimler içine image olarak kaydet
                    parcaResimler.Add(resim);
                    x += alinanResim.Width / sutunSayisi;
                }
                y += alinanResim.Height / satirSayisi;
                x = 0;
            }
            gr.Dispose();

            x = 30;
            y = 30;


            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    PictureBox pcb = new PictureBox();

                    pcb.Size = new Size(alinanResim.Width / sutunSayisi, alinanResim.Height / satirSayisi);
                    pcb.Location = new Point(x, y);
                    pcb.Click += new EventHandler(pcb_Click);
                    pcb.BringToFront();
                    pcb.Image = parcaResimler[i * 5 + j];
                    x += 50;
                    y += 50;
                    this.Controls.Add(pcb);
                }
            }

        }

    }
}


UYGULAMAYI İNDİR

9 yorum :

  1. Kardeş picturebox koymuşşsun ama picture hangisi

    YanıtlaSil
    Yanıtlar
    1. kaç tane kağıt varsa o kadar picturebox var. For döngülerine bakarsan bir tanesi 4 bir tanesi de 13 e kadar dönüyor toplamda 52 tane picture box oluşturuyorum

      Sil
  2. şuna disayn kısmında kullanılan tolls'lar ve adlarını tex'ini felan yazarsan çok iyi olcak

    YanıtlaSil
    Yanıtlar
    1. Dagit_Click metodu kaç tane picturebox nerede nasıl gösterileceğini belirtiyor. Bu metodu incele.

      Sil
  3. alinan.jpg yi atarmısın kardeşim yaa yapmaya çalışıyorum da

    YanıtlaSil
    Yanıtlar
    1. alinan.jpg deneme amacıyla yapmışım ve şu an o resmi bulamıyorum. Ama bu resmi uygulamanın içine gömmüştüm . resimleriOlustur() metodunun içinde de bu resmi resimler listesine aktarıyorum.

      Sil
  4. Yanıtlar
    1. Burada sadece oyunu görsel kısmı nasıl yapılıra ait bir örnek var. Bu uygulamada oyun algoritması yok.

      Sil
  5. şöyle ki ben iskambil oyununda üstüne bir kaç bir şey daha katarak bazı şeyler yapmaya çalıştım yaptım ama oyunda şuan kazanan biri olamıyor. 52 kağıttan oluşan bir desteyle 4 oyuncular sırayla kağıtları alıyor 1. oyuncu 2. ye 2.oyuncu 3.ye vs kağıt verebiliyor ama oyun sürekli dönüyor bende birinin kazanması için elinde belli türden olan kağıtarı biriktirsin diyorum. yani şöyle ki elinde 7 tane maça olan kazansın yada 7 tane sinek gibi. Kart türü ve sayilari kart durumunu vs dizi mantığıyla yaptım ve her oyuncunun kartlarınıda kendilerine ait listboxlarda tutuyorum. Demem o ki listbox ın içinde aynı kart türünden 7 tane varsa oyuncu oyunu kazansın istiyorum
    ama bunu koda dökemedim yardımcı olabilir misiniz ?

    YanıtlaSil