Hjälp med tetris C#
Hej!
Håller på och programmerar tetris i C# och skulle behöva ha lite hjälp. Ritar ut alla klossar i en klass med en metod. Dessa klossar sparar jag i en lista. Jag har fått till kollisionsdetektion men inte hur man får bort en hel rad när den är full. Ett av problemen är ju att man inte kan ändra i listan i en foreach-loop. Lägger in koden och skriver kommentarer där jag behöver hjälp. Jag har heller aldrig programmerat innan så om ni inte tycker koden är så snygg så är det därför.
class kloss //klassen för att rita ut klossarna
{
public int posx = 30;
public int posy = 30;
public int turn = 1;
int i;
Random slumpGenerator = new Random();
Image im = Properties.Resources.ruta1;
Image im1 = Properties.Resources.ruta2;
Image im2 = Properties.Resources.ruta3;
Image im3 = Properties.Resources.ruta4;
Image im4 = Properties.Resources.ruta5;
Image im5 = Properties.Resources.ruta6;
Image im6 = Properties.Resources.ruta7;
public kloss(int posx, int posy)
{
this.posx = posx;
this.posy = posy;
i = slumpGenerator.Next(1, 7);
}
public void drawImage(Graphics g)
{
if (i == 1)
{
switch (turn) // L formen
{
case 1:
turn = 1;
g.DrawImage(im, posx, posy, 20, 20);
g.DrawImage(im, posx - 20, posy, 20, 20);
g.DrawImage(im, posx + 20, posy, 20, 20);
g.DrawImage(im, posx + 20, posy - 20, 20, 20);
break;
case 2:
turn = 2;
g.DrawImage(im, posx, posy, 20, 20);
g.DrawImage(im, posx, posy + 20, 20, 20);
g.DrawImage(im, posx, posy - 20, 20, 20);
g.DrawImage(im, posx - 20, posy - 20);
break;
case 3:
turn = 3;
g.DrawImage(im, posx, posy, 20, 20);
g.DrawImage(im, posx + 20, posy, 20, 20);
g.DrawImage(im, posx - 20, posy, 20, 20);
g.DrawImage(im, posx - 20, posy - 20, 20, 20);
break;
case 4:
turn = 4;
g.DrawImage(im, posx, posy, 20, 20);
g.DrawImage(im, posx, posy - 20, 20, 20);
g.DrawImage(im, posx, posy + 20, 20, 20);
g.DrawImage(im, posx + 20, posy + 20, 20, 20);
break;
}
}
private kloss test;
private List<kloss> position;
public Form1()
{
InitializeComponent();
timer1.Start();
test = new kloss(20, 20);
test.turn = 1;
position = new List<kloss>();
position.Add(test);
}
public void panel1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
test.drawImage(g);
foreach(kloss s in position)
{
s.drawImage(g);
}
if (test.posy == 190)
{
test = new kloss(20, 20);
position.Add(test);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
Graphics g = CreateGraphics();
test.posy++;
this.Refresh();
foreach (kloss s in position)
{
if (test.posy + 40 == s.posy)
{
test = new kloss(20, 20);
s.drawImage(g);
}
}
position.Add(test);
foreach(kloss s in position) // Här vill jag kolla om det är fullt på någon
rad och sedan ta bort dessa ur listan. Det är det jag helt enkelt inte får till
{
if(nått villkor som kollar alla x-positioner )
{
test = new kloss(20, 20);
s.drawImage();
//här vill jag ta bort alla som heter s.posy och ligger på den rad som är full
}
}
}