예제 #1
0
        private void urediLikove(Kvadrat koji)
        {
            if (koji == Kvadrat.OkupiraPrviLik)
            {
                if (sljedeciOblikPrvi != null)
                {
                    aktivniOblikPrvi  = sljedeciOblikPrvi;
                    sljedeciOblikPrvi = SljedeciOblik();
                }
                else
                {
                    aktivniOblikPrvi  = SljedeciOblik();
                    sljedeciOblikPrvi = SljedeciOblik();
                }
            }


            if (koji == Kvadrat.OkupiraDrugiLik)
            {
                if (sljedeciOblikDrugi != null)
                {
                    aktivniOblikDrugi  = sljedeciOblikDrugi;
                    sljedeciOblikDrugi = SljedeciOblik();
                }
                else
                {
                    aktivniOblikDrugi  = SljedeciOblik();
                    sljedeciOblikDrugi = SljedeciOblik();
                }
            }
        }
예제 #2
0
        private void pomakni(Kvadrat kojiLik, Smjerovi smjer)
        {
            Oblik oblik = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi;

            if (oblik == null)
            {
                return;
            }

            if (Nivo().Smjer == suprotanSmjer(smjer))
            {
                nagradni_bodovi--;
            }

            oblik.Pozicija = nxt(oblik.Pozicija.Item1, oblik.Pozicija.Item2, smjer);

            var trenutne_koord = koordinateAktivnogLika(kojiLik);
            var sljedece_koord = new List <Tuple <int, int> >();

            foreach (var k in trenutne_koord)
            {
                var sljedeciIndeksi = nxt(k.Item1, k.Item2, smjer);
                sljedece_koord.Add(sljedeciIndeksi);
                ploca[sljedeciIndeksi.Item1, sljedeciIndeksi.Item2] = kojiLik;
            }

            foreach (var k in trenutne_koord)
            {
                if (!sljedece_koord.Contains(k))
                {
                    ploca[k.Item1, k.Item2] = Kvadrat.Slobodan;
                }
            }
        }
예제 #3
0
파일: Oblik.cs 프로젝트: iliavolyova/tetris
        public static Oblik NapraviOblik(XElement x)
        {
            Oblik o = new Oblik();

            o.FromXML(x);
            return(o);
        }
예제 #4
0
 public void FromXML(XElement x)
 {
     ID                 = int.Parse(x.Attribute("id").Value);
     Brzina             = int.Parse(x.Attribute("brzina").Value);
     NagradniKvadratici = bool.Parse(x.Attribute("nagradnikvadratici").Value);
     Prepreke           = bool.Parse(x.Attribute("prepreke").Value);
     ViseLikova         = bool.Parse(x.Attribute("viselikova").Value);
     Smjer              = (Smjerovi)Enum.Parse(typeof(Smjerovi), x.Attribute("smjer").Value);
     foreach (var o in x.Elements("oblik"))
     {
         Oblik c = Postavke.Oblici.Find(obl => obl.Ime == o.Attribute("ime").Value);
         if (c != null)
         {
             Oblici.Add(c);
         }
     }
 }
예제 #5
0
        private bool mozeRotacija(Kvadrat kojiLik)
        {
            Oblik koji = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi;

            bool[,] rotirano = koji.SimulirajRotaciju();
            var boundingBox = koji.Pozicija;

            for (int i = boundingBox.Item1, k = 0; i < boundingBox.Item1 + 4; ++i, ++k)
            {
                for (int j = boundingBox.Item2, l = 0; j < boundingBox.Item2 + 4; ++j, ++l)
                {
                    if (i < 0 || j < 0 || rotirano[k, l] && ((ploca[i, j] != Kvadrat.Slobodan && ploca[i, j] != kojiLik) || !uGranicama(new Tuple <int, int>(i, j))))
                    {
                        return(false);
                    }
                }
            }

            return(true);
        }
예제 #6
0
        public static void FromXML(XElement x)
        {
            foreach (var o in x.Elements("oblik"))
            {
                Oblici.Add(Oblik.NapraviOblik(o));
            }

            foreach (var o in x.Elements("igra"))
            {
                TipoviIgara.Add(TipIgre.NapraviTipIgre(o));
            }

            foreach (var o in x.Elements("rezultat"))
            {
                DodajRezultat(o.Attribute("tipigre").Value,
                              o.Attribute("igrac").Value,
                              int.Parse(o.Attribute("nivo").Value),
                              int.Parse(o.Attribute("bodovi").Value));
            }
        }
예제 #7
0
        void pohrani()
        {
            if (prikazivanje_u_tijeku)
            {
                return;
            }

            Oblik o = Postavke.Oblici[aktivni_oblik];

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    string    ime_g = "c" + i.ToString() + j.ToString();
                    Control[] r     = panel1.Controls.Find(ime_g, false);
                    o[i, j] = ((CheckBox)r[0]).Checked;
                }
            }
            o.Boja = panel2.BackColor;
            Postavke.Pohrani();
        }
예제 #8
0
        private void rotiraj(Kvadrat kojiLik)
        {
            Oblik koji = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi;

            koji.Rotiraj();
            var boundingBox = koji.Pozicija;

            for (int i = boundingBox.Item1, k = 0; i < boundingBox.Item1 + 4; ++i, ++k)
            {
                for (int j = boundingBox.Item2, l = 0; j < boundingBox.Item2 + 4; ++j, ++l)
                {
                    if (koji.Celije[k, l])
                    {
                        ploca[i, j] = kojiLik;
                    }
                    else if (!koji.Celije[k, l] && ploca[i, j] == kojiLik)
                    {
                        ploca[i, j] = Kvadrat.Slobodan;
                    }
                }
            }
        }
예제 #9
0
        void prikazi()
        {
            prikazivanje_u_tijeku = true;
            panel1.Enabled        = true;
            foreach (Control c in panel1.Controls)
            {
                c.Enabled = true;
            }

            Oblik o = Postavke.Oblici[aktivni_oblik];

            for (int i = 0; i < 4; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    string    ime_g = "c" + i.ToString() + j.ToString();
                    Control[] r     = panel1.Controls.Find(ime_g, false);
                    ((CheckBox)r[0]).Checked = o[i, j];
                }
            }
            panel2.BackColor      = o.Boja;
            prikazivanje_u_tijeku = false;
        }
예제 #10
0
        void render(Panel pan, Oblik o, Brush p)
        {
            Bitmap   bm = new Bitmap(bit_sljedeci);
            Graphics g  = Graphics.FromImage(bm);

            int w = (pan.Width) / (4);
            int h = (pan.Height) / (4);

            if (o != null)
            {
                for (int r = 0; r < 4; ++r)
                {
                    for (int s = 0; s < 4; ++s)
                    {
                        if (o[r, s])
                        {
                            g.FillRectangle(p, new Rectangle(new Point((s * w) + 1, (r * h) + 1), new Size(w - 3, h - 3)));
                            g.DrawImage(img, new Point(s * w, r * h));
                        }
                    }
                }
            }
            pan.BackgroundImage = bm;
        }
예제 #11
0
        public Oblik SljedeciOblik()
        {
            Oblik odabrani = Nivo().sljedeciOblik();

            return(Oblik.copy(odabrani));
        }
예제 #12
0
        private bool inicijaliziraj(Kvadrat kojiLik)
        {
            bool prvi       = kojiLik == Kvadrat.OkupiraPrviLik;
            bool viseLikova = Nivo().ViseLikova;

            urediLikove(kojiLik);

            Oblik aktivni = kojiLik == Kvadrat.OkupiraPrviLik ? aktivniOblikPrvi : aktivniOblikDrugi;

            int shift = 0;

            if (viseLikova && kojiLik == Kvadrat.OkupiraPrviLik)
            {
                shift = 2;
            }
            if (viseLikova && kojiLik == Kvadrat.OkupiraDrugiLik)
            {
                shift = -2;
            }

            switch (Nivo().Smjer)
            {
            case Smjerovi.Dolje:
                for (int i = 1, k = 0; i < 5; ++i, ++k)
                {
                    for (int j = tip_igre.Stupaca / 2 - 2 + shift, l = 0; j < tip_igre.Stupaca / 2 + 2 + shift; ++j, ++l)
                    {
                        if (ploca[i, j] != Kvadrat.Slobodan)
                        {
                            return(false);
                        }
                        ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j];
                    }
                }
                aktivni.Pozicija = new Tuple <int, int>(1, tip_igre.Stupaca / 2 - 2 + shift);
                break;

            case Smjerovi.Gore:
                for (int i = tip_igre.Redaka - 3, k = 0; i < tip_igre.Redaka + 1; ++i, ++k)
                {
                    for (int j = tip_igre.Stupaca / 2 - 2 + shift, l = 0; j < tip_igre.Stupaca / 2 + 2 + shift; ++j, ++l)
                    {
                        if (ploca[i, j] != Kvadrat.Slobodan)
                        {
                            return(false);
                        }
                        ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j];
                    }
                }
                aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka - 3, tip_igre.Stupaca / 2 - 2 + shift);
                break;

            case Smjerovi.Desno:
                for (int i = tip_igre.Redaka / 2 - 2 + shift, k = 0; i < tip_igre.Redaka / 2 + 2 + shift; ++i, ++k)
                {
                    for (int j = 1, l = 0; j < 5; ++j, ++l)
                    {
                        if (ploca[i, j] != Kvadrat.Slobodan)
                        {
                            return(false);
                        }
                        ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j];
                    }
                }
                aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka / 2 - 2 + shift, 1);
                break;

            case Smjerovi.Lijevo:
            default:
                for (int i = tip_igre.Redaka / 2 - 2 + shift, k = 0; i < tip_igre.Redaka / 2 + 2 + shift; ++i, ++k)
                {
                    for (int j = tip_igre.Stupaca - 3, l = 0; j < tip_igre.Stupaca + 1; ++j, ++l)
                    {
                        if (ploca[i, j] != Kvadrat.Slobodan)
                        {
                            return(false);
                        }
                        ploca[i, j] = aktivni.Celije[k, l] ? kojiLik : ploca[i, j];
                    }
                }
                aktivni.Pozicija = new Tuple <int, int>(tip_igre.Redaka / 2 - 2 + shift, tip_igre.Stupaca - 3);
                break;
            }

            if (kojiLik == Kvadrat.OkupiraPrviLik)
            {
                aktivniOblikPrvi = aktivni;
            }
            else
            {
                aktivniOblikDrugi = aktivni;
            }

            return(true);
        }
예제 #13
0
파일: Oblik.cs 프로젝트: iliavolyova/tetris
 public static Oblik NapraviOblik(XElement x)
 {
     Oblik o = new Oblik();
     o.FromXML(x);
     return o;
 }
예제 #14
0
        private void urediLikove(Kvadrat koji)
        {
            if (koji == Kvadrat.OkupiraPrviLik)
            {
                if (sljedeciOblikPrvi != null)
                {
                    aktivniOblikPrvi = sljedeciOblikPrvi;
                    sljedeciOblikPrvi = SljedeciOblik();
                }
                else
                {
                    aktivniOblikPrvi = SljedeciOblik();
                    sljedeciOblikPrvi = SljedeciOblik();
                }
            }
            

            if (koji == Kvadrat.OkupiraDrugiLik)
            {
                if (sljedeciOblikDrugi != null)
                {
                    aktivniOblikDrugi = sljedeciOblikDrugi;
                    sljedeciOblikDrugi = SljedeciOblik();
                }
                else
                {
                    aktivniOblikDrugi = SljedeciOblik();
                    sljedeciOblikDrugi = SljedeciOblik();
                }
            }
        }
예제 #15
0
파일: Oblik.cs 프로젝트: iliavolyova/tetris
 public static Oblik copy(Oblik o)
 {
     return(new Oblik(o.Ime, o.Celije, o.Boja));
 }
예제 #16
0
        void render(Panel pan, Oblik o, Brush p)
        {
            Bitmap bm = new Bitmap(bit_sljedeci);
            Graphics g = Graphics.FromImage(bm);

            int w = (pan.Width) / (4);
            int h = (pan.Height) / (4);

            if (o != null)
                 for (int r = 0; r < 4; ++r)
                 {
                     for (int s = 0; s < 4; ++s)
                     {
                        if (o[r, s])
                        {
                            g.FillRectangle(p, new Rectangle(new Point((s * w)+1, (r * h)+1), new Size(w - 3, h - 3)));
                            g.DrawImage(img, new Point(s * w, r * h));
                        }
                     }
                 }
           pan.BackgroundImage = bm;
        }
예제 #17
0
파일: Oblik.cs 프로젝트: iliavolyova/tetris
 public static Oblik copy(Oblik o)
 {
     return new Oblik(o.Ime, o.Celije, o.Boja);
 }