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.