Merhaba arkadaşlar şimdi benim c# da yılan oyunu yapmam lazım.Diziler ve butonları kullanarak. Biraz bi şeyler yaptım ancak çok ta ilerlemiş sayılmam. Acil yardıma ihtiyacım var.
Şimdi olay şu formu açınca 4 tane buton yani yılan çıkacak rastgele (bunu yaptım) Ondan sonra butonlar hareket edecek yani yön tuşları ile. Rast gele yem çıkacak ve çıkan yemi yedikçe büyüyecek yılan. Sonra formun köşelerine çarpınca yanacak Uyarı verecek vs...
Şöyle düşündüm her hangi bir yön tuşuna basınca 4 butondan en baştakinin koordinatını bi öncekine onunkini bi öncekine filan hepsini birbirine aktartıp ilerletmeyi düşündüm ancak beceremedim pek.
Bana yardımcı olursanız çok sevinirim..İyi forumlar...
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms;
namespace WindowsFormsApplication4 { public partial class Form1 : Form { public Form1() { InitializeComponent(); }
Button[] yilan=new Button[10];
private void Form1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Up) { yilan[0].Location = new Point(yilan[0].Location.X, yilan[0].Location.Y - 20); for (int i = 0; i < 3; i++) { if (yilan[i] != null) { yilan[i + 1].Location = new Point(yilan[i].Location.X, yilan[i].Location.Y-20); } } } if (e.KeyCode == Keys.Right) { } if (e.KeyCode == Keys.Down) { } if (e.KeyCode == Keys.Left) { } }
Random rnd = new Random(); int x = rnd.Next(50, Width -100); int y = rnd.Next(50, Height - 100); Button btn = new Button(); btn.Name = "btn" + 0.ToString(); btn.Location = new Point(x, y); btn.Size = new Size(20,20); btn.Text = string.Empty; Controls.Add(btn); yilan[0] = btn; for (int i = 0; i < 3; i++) { Button b = new Button(); b.Location = new Point(Controls[string.Format("btn{0}", i)].Location.X + 20, Controls[string.Format("btn{0}", i)].Location.Y); b.Name = "btn" + (i + 1).ToString(); b.Text = string.Empty; b.Size=new Size(20, 20); Controls.Add(b); yilan[i + 1] = b; } }
} }
c# bilmiyorum ancak yeterince yılan yapmışlığım var mantığında yardımcı olmaya çalışayım doğru gitmişsin aslında. Madde madde anlatmaya çalışayım genel mantığı.
- Sen her bastığımda ilerlesin gibi düşünmüşsün kısa vadede sanırım, ancak direk timer veya thread tarzı bir yapı kullanırsan daha iyi olur. - Öncelikle array yerine arraylist dinamik bir yapı kullanırsan daha kolay sonuca ulaşabilirsin. Bir de hafızada yön tutmaya ihtiyacın var String olabilir yada integer olabilir 0 1 2 3 şeklinde her biri bir yönü temsil eder. - Arraylistte 0 kuyruğu ve en yüksek sayıdaki eleman da baş kısmını ifade edecek. Başlangıçta 3 eleman olacak arraylistte 3lü bir yılanla başladığını düşünürsek. - Timerdan event geldiğinde o anki yön verisine bakacaksın, yön(örneğin 0 için sağ diyelim) 0 ise arraylistteki son elemanın(kafa kısmının) pozisyonunu alıp x ine 1 ekleyecek y si sabit kalacak. Bunu if döngüsüyle yapabilirsin. Bu hareket kısmında sonraki karenin yem duvar ya da yılanın kendisi olup olmadığını kontrol etmen gerek. Eğer duvar veya yılanın kendisiyse oyunu bitir değilse ilerlet şeklinde olacak. - Daha sonra arraylistteki 0. elemanı(kuyruk) siliyorsun, tabi bu orada yem olup olmadığına bağlı olarak değişecek. - Bahsettiğimiz yön verisi de tuşa basıldığında değişecek.
Bu yapıları tamamlarsan basitce bir yılana ulaşmış olursun. Object-Oriented biliyor musun bilmiyorum ama kullanman durumunda işini kolaylaştırır. Bu çok verimli bir yöntem olmayabilir ancak basit olduğunu düşünüyorum. Anlamadığın yer olursa açıklamaya çalışırım.
quote:
Orijinalden alıntı: umutde
c# bilmiyorum ancak yeterince yılan yapmışlığım var mantığında yardımcı olmaya çalışayım doğru gitmişsin aslında. Madde madde anlatmaya çalışayım genel mantığı.
- Sen her bastığımda ilerlesin gibi düşünmüşsün kısa vadede sanırım, ancak direk timer veya thread tarzı bir yapı kullanırsan daha iyi olur. - Öncelikle array yerine arraylist dinamik bir yapı kullanırsan daha kolay sonuca ulaşabilirsin. Bir de hafızada yön tutmaya ihtiyacın var String olabilir yada integer olabilir 0 1 2 3 şeklinde her biri bir yönü temsil eder. - Arraylistte 0 kuyruğu ve en yüksek sayıdaki eleman da baş kısmını ifade edecek. Başlangıçta 3 eleman olacak arraylistte 3lü bir yılanla başladığını düşünürsek. - Timerdan event geldiğinde o anki yön verisine bakacaksın, yön(örneğin 0 için sağ diyelim) 0 ise arraylistteki son elemanın(kafa kısmının) pozisyonunu alıp x ine 1 ekleyecek y si sabit kalacak. Bunu if döngüsüyle yapabilirsin. Bu hareket kısmında sonraki karenin yem duvar ya da yılanın kendisi olup olmadığını kontrol etmen gerek. Eğer duvar veya yılanın kendisiyse oyunu bitir değilse ilerlet şeklinde olacak. - Daha sonra arraylistteki 0. elemanı(kuyruk) siliyorsun, tabi bu orada yem olup olmadığına bağlı olarak değişecek. - Bahsettiğimiz yön verisi de tuşa basıldığında değişecek.
Bu yapıları tamamlarsan basitce bir yılana ulaşmış olursun. Object-Oriented biliyor musun bilmiyorum ama kullanman durumunda işini kolaylaştırır. Bu çok verimli bir yöntem olmayabilir ancak basit olduğunu düşünüyorum. Anlamadığın yer olursa açıklamaya çalışırım.