Bir tetris klonu yazmaya çalışıyorum ve bazı araştırmalar yaptıktan sonra, bloğu oluşturmak için küçük kullanıcı denetimleri kullanan ve daha büyük bir kullanıcı denetimi içeren bir örnekle karşılaştım ızgara.Bir kullanıcı denetimini başka bir kullanıcı denetimi içinde taşıma
Yazmış olduğum her şey zaten gayet iyi çalışıyor gibi görünüyor (bloklar üretiliyor ve ızgaraya yerleştiriliyor, kodu değiştirirsem onları başka bir yere koyabilirim), ama blokları göremiyorum. Program çalışırken hareket etmek için. Kullandığım örnek, blokların her birinin control.left
özelliğini değiştirerek bunu yapar. Bunu denedim, hata ayıkladı ve özellik değişirken, blok hareket etmiyor.
Yaklaşık 4 saattir buralarda arama yaptım. Ben acemi bir programcıyım, bu yüzden muhtemelen aptalca bir şey olduğunu biliyorum, ama ne olduğunu bulamıyorum.
İşte yazdığım yöntemler var:
//Class TetrisGame.cs
public void MoveRight()
{
blok.MoveBlock("x", 1);
}
//Class Shape.cs
public void MoveBlock(string pos, int Amount)
{
if (pos == "x")
{
for (int i = 0; i < this.Shape().Count; i++)
{
((Blokje)this.Shape()[i]).MoveSide(1);
}
}
if (pos == "y")
{
for (int i = 0; i < this.Shape().Count; i++)
{
((Blokje)this.Shape()[i]).MoveDown(1);
}
}
//And, the code that should actually move the block in Block.cs:
public void MoveSide(int Step)
{
this.Left += (Step * 20);//Blocks are 20*20 pixels so should move in steps of 20 pixels
}
Şekli aslında sadece 4 blok içeren bir ArrayList olduğunu. küçük kareler olduğunu usercontrol arkasında kod beri Block.cs kısmi sınıftır, Shape.cs blokların dışında şekiller yapar ve tetrisgame sadece gamelogic olan
Tuşa basma olayı:
private void Form1_KeyPress(object sender, KeyPressEventArgs e)
{
try
{
if (e.KeyChar == 'q')//left
{
if (!paused)
{
Game.MoveLeft();
}
}
else if (e.KeyChar == 'd')//right
{
if (!paused)
{
Game.MoveRight();
}
}
else if (e.KeyChar == 'p')//pause
{
if (paused)
{
tmrGame.Start();
}
else
{
tmrGame.Stop();
}
}
else if (e.KeyChar == 'z')//rotate
{
if (!paused)
{
Game.Rotate();
}
}
else if (e.KeyChar == 'h')//help
{
Help.Show();
}
else if (e.KeyChar == 'f')//save
{
}
else if (e.KeyChar == 's')//Drop
{
if (!paused)
{
Game.Drop();
}
}
}
catch
{
//no error message has to be displayed, this is just to prevent runtime Errors when pressing keys before the game has started
}
}
Nasıl girdi alıyorsunuz? Klavye fare? Yaklaşımınız sadece birkaç eşyalarınız olduğunda çalışıyor olabilir. WPF veya Winform kullanıyor musunuz? –
Klavyeyi bir tuşa basma olay ve winforms ile kullanıyorum. Klavye girişi işe yarıyor, çünkü yardım formunu açmak için de kullanıyorum. – Frederik
this.location = new point (x, y); –