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);
}
}
}
}
}
Kardeş picturebox koymuşşsun ama picture hangisi
YanıtlaSilkaç 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şuna disayn kısmında kullanılan tolls'lar ve adlarını tex'ini felan yazarsan çok iyi olcak
YanıtlaSilDagit_Click metodu kaç tane picturebox nerede nasıl gösterileceğini belirtiyor. Bu metodu incele.
Silalinan.jpg yi atarmısın kardeşim yaa yapmaya çalışıyorum da
YanıtlaSilalinan.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.
SilOyun ihaleli mi ihalesiz mi?
YanıtlaSilBurada sadece oyunu görsel kısmı nasıl yapılıra ait bir örnek var. Bu uygulamada oyun algoritması yok.
Silşö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
YanıtlaSilama bunu koda dökemedim yardımcı olabilir misiniz ?