Exemplo n.º 1
0
 public GespiegeldeEl(Veld veld)
 {
     Kleur = Brushes.Purple;
     MiddelpuntRotatiePositie = new Tetris.Positie(5, 3);
     Add(veld[5, 2]);
     Add(veld[6, 2]);
     Add(veld[5, 3]);
     Add(veld[5, 4]);
 }
Exemplo n.º 2
0
 public GespiegeldeZ(Veld veld)
 {
     Kleur = Brushes.LightBlue;
     MiddelpuntRotatiePositie = new Tetris.Positie(4, 3);
     Add(veld[4, 2]);
     Add(veld[4, 3]);
     Add(veld[5, 3]);
     Add(veld[5, 4]);
 }
Exemplo n.º 3
0
 public El(Veld veld)
 {
     Kleur = Brushes.DarkBlue;
     MiddelpuntRotatiePositie = new Tetris.Positie(5, 3);
     Add(veld[5, 2]);
     Add(veld[4, 2]);
     Add(veld[5, 3]);
     Add(veld[5, 4]);
 }
Exemplo n.º 4
0
 public Z(Veld veld)
 {
     Kleur = Brushes.LimeGreen;
     MiddelpuntRotatiePositie = new Tetris.Positie(6, 3);
     Add(veld[6, 2]);
     Add(veld[6, 3]);
     Add(veld[5, 3]);
     Add(veld[5, 4]);
 }
Exemplo n.º 5
0
 public Vork(Veld veld)
 {
     Kleur = Brushes.Yellow;
     MiddelpuntRotatiePositie = new Tetris.Positie(5, 3);
     Add(veld[5, 2]);
     Add(veld[5, 3]);
     Add(veld[5, 4]);
     Add(veld[6, 3]);
 }
Exemplo n.º 6
0
 public Lange(Veld veld)
 {
     Kleur = Brushes.OrangeRed;
     MiddelpuntRotatiePositie = new Tetris.Positie(4, 2);
     Add(veld[3, 2]);
     Add(veld[4, 2]);
     Add(veld[5, 2]);
     Add(veld[6, 2]);
 }
Exemplo n.º 7
0
 public Vierkant(Veld veld)
 {
     Kleur = Brushes.Gray;
     MiddelpuntRotatiePositie = new Tetris.Positie(4, 2);
     Add(veld[4, 2]);
     Add(veld[5, 2]);
     Add(veld[4, 3]);
     Add(veld[5, 3]);
 }
Exemplo n.º 8
0
        public virtual void MoveHorizontal(Veld veld, int richting)
        {
            while (_sem == 1)
            {
                //do nothing
            }
            _sem = 1;
            this.Sort();
            if (richting == 1)
            {
                this.Reverse();
            }
            List <int> yArray = new List <int>();
            bool       moveOk = true;

            foreach (Positie pos in this)
            {
                if ((pos.X == 0 && richting == -1) || (pos.X == 9 && richting == 1))
                {
                    moveOk = false;
                    break;
                }
                else
                {
                    if (yArray.TrueForAll(y => pos.Y != y))
                    {
                        if (veld[pos.X + richting, pos.Y].Kleur != null)
                        {
                            moveOk = false;
                            break;
                        }
                        yArray.Add(pos.Y);
                    }
                }
            }
            if (moveOk)
            {
                MiddelpuntRotatiePositie.X += richting;
                for (int i = 0; i < 4; i++)
                {
                    this[i].Kleur = null;
                    Positie nieuwePos = veld[this[i].X + richting, this[i].Y];
                    this[i]       = nieuwePos;
                    this[i].Kleur = this.Kleur;
                }
            }
            _sem = 0;
        }
Exemplo n.º 9
0
 public virtual void MoveDown(Veld veld)
 {
     if (KanZakken(veld))
     {
         MiddelpuntRotatiePositie.Y += 1;
         while (_sem == 1)
         {
             //do nothing
         }
         _sem = 1;
         for (int i = 0; i < 4; i++)
         {
             this[i].Kleur = null;
             Positie nieuwePos = veld[this[i].X, this[i].Y + 1];
             this[i]       = nieuwePos;
             this[i].Kleur = this.Kleur;//
         }
         _sem = 0;
     }
 }
Exemplo n.º 10
0
        //Movement:

        //posities in blok sorteren op X of Y
        //hoogste/laagste posities X of Y checken
        //als hoogste/laagste positie X of Y +/- 1 niet ingenomen/out of bounds, positie swap
        //sorteren ook nodig voor juist te swappen (niet overschrijven)
        public bool KanZakken(Veld veld)
        {
            while (_sem == 1)
            {
                //do nothing
            }
            _sem = 1;
            List <int> xArray = new List <int>();
            bool       moveOk = true;

            this.Sort(_ycomp);
            this.Reverse();
            foreach (Positie pos in this)
            {
                if (pos.Y == 19)
                {
                    moveOk = false;
                    break;
                }
                else
                {
                    if (xArray.TrueForAll(x => pos.X != x))
                    {
                        if (veld[pos.X, pos.Y + 1].Kleur != null)
                        {
                            moveOk = false;
                            break;
                        }
                        xArray.Add(pos.X);
                    }
                }
            }
            if (moveOk == false)
            {
                OnKanNietZakken();                  //raise KanNietZakken Event
            }
            _sem = 0;
            return(moveOk);
        }
Exemplo n.º 11
0
        public virtual void Kantel(Veld veld)
        {
            while (_sem == 1)
            {
                //do nothing
            }
            _sem = 1;
            //lijst opstellen met nieuwe kantelposities
            List <Positie> gekanteldBlok = new List <Positie>();

            //ingenomen false, wnt sommige blokposities worden nieuwe posities van andere
            for (int i = 0; i < 4; i++)
            {
                this[i].Kleur = null;
            }
            //nieuwe blokposities toevoegen als niet ingenomen, of pos == centerpunt blok
            for (int i = 0; i < 4; i++)
            {
                //nieuwe blokposities toevoegen als pos == centerpunt blok
                if (this[i].X == MiddelpuntRotatiePositie.X && this[i].Y == MiddelpuntRotatiePositie.Y)
                {
                    gekanteldBlok.Add(this[i]);
                }
                else
                {
                    //90 graden rotatie formule
                    int x    = this[i].X - this.MiddelpuntRotatiePositie.X;
                    int y    = this[i].Y - this.MiddelpuntRotatiePositie.Y;
                    int newX = -y;
                    int newY = x;
                    newX = newX + this.MiddelpuntRotatiePositie.X;
                    newY = newY + this.MiddelpuntRotatiePositie.Y;

                    //nieuwe blokposities toevoegen als binnen index & newpos niet ingenomen
                    if (newX < 10 && newX >= 0 && newY < 19 && newY >= 0 && (veld[newX, newY].Kleur == null))
                    {
                        gekanteldBlok.Add(veld[newX, newY]);
                    }
                    else
                    {
                        break;
                    }
                }
            }
            if (gekanteldBlok.Count == 4) //alle nieuwe posities zijn niet reeds ingenomen
            {
                for (int i = 0; i < 4; i++)
                {
                    this[i]       = gekanteldBlok[i];
                    this[i].Kleur = this.Kleur;
                }
            }
            else //rotatie niet mogelijk, oude posities terug op Ingenomen
            {
                for (int i = 0; i < 4; i++)
                {
                    this[i].Kleur = this.Kleur;
                }
            }
            _sem = 0;
        }