Ejemplo n.º 1
0
        private PosicaoPeca GetPosicaoPecaRotate90(PosicaoPeca pp)
        {
            switch (pp)
            {
            case PosicaoPeca.original:
                return(PosicaoPeca.esquerda);

            case PosicaoPeca.esquerda:
                return(PosicaoPeca.abaixo);

            case PosicaoPeca.abaixo:
                return(PosicaoPeca.direita);

            case PosicaoPeca.direita:
                return(PosicaoPeca.original);

            default:
                return(PosicaoPeca.original);
            }
        }
Ejemplo n.º 2
0
        private void DrawTileSubRoutine(PieceObject po, string valor)
        {
            bool        equal = po.faceA == po.faceB;
            PictureBox  pb1   = new PictureBox();
            PosicaoPeca pp    = PosicaoPeca.original;

            if (po.faceA == -1 || po.faceB == -1)
            {
                return;
            }

            byte[]       dadosImg = this.GetImageContent(this.cip.ID, po.faceA, po.faceB);
            MemoryStream ms       = new MemoryStream(dadosImg);
            Image        img      = Image.FromStream(ms);

            Size size = new Size(46, 86);

            img = ResizeImage(img, size);

            if (!equal)
            {
                img = this.RotateImage90Degrees(img);
                pp  = this.GetPosicaoPecaRotate90(pp);
            }

            Point newLoc = new Point(leftBody_left, topBody_left);

            pb1.Image = img;
            pb1.Size  = img.Size;

            if (!this.initialized)
            {
                pb1.Location  = newLoc;
                esquerdaEqual = direitaEqual = equal;
            }
            else
            {
                if (String.IsNullOrEmpty(valor))
                {
                    valor = "Esquerda";
                }

                if (valor.Equals("Esquerda"))
                {
                    // Segue a rota original!
                    if (esquerdaState == 0)
                    {
                        if (!equal)
                        {
                            if (esquerdaEqual)
                            {
                                newLoc.Offset(-img.Width, 17);
                            }
                            else
                            {
                                newLoc.Offset(-img.Width, 0);
                            }
                        }
                        else
                        {
                            newLoc.Offset(-46, -17);
                        }

                        if (newLoc.X < 0)
                        {
                            if (!equal)
                            {
                                img       = this.RotateImage90Degrees(img);
                                pp        = this.GetPosicaoPecaRotate90(pp);
                                pb1.Image = img;
                                pb1.Size  = img.Size;
                            }

                            if (!equal)
                            {
                                if (esquerdaEqual)
                                {
                                    newLoc.Offset(82, 67);
                                }
                                else
                                {
                                    newLoc.Offset(82, 44);
                                }
                            }
                            else
                            {
                                newLoc.Offset(28, 64);
                            }
                            esquerdaState       = 1;
                            firstEsquerdaState1 = true;
                        }
                    }
                    else if (esquerdaState == 1) // Desce
                    {
                        if (!equal || !firstEsquerdaState1)
                        {
                            img       = this.RotateImage90Degrees(img);
                            pp        = this.GetPosicaoPecaRotate90(pp);
                            pb1.Image = img;
                            pb1.Size  = img.Size;
                        }

                        if (!equal)
                        {
                            if (esquerdaEqual)
                            {
                                if (firstEsquerdaState1 == true)
                                {
                                    newLoc.Offset(-15, 74);
                                }
                                else
                                {
                                    newLoc.Offset(0, 74);
                                }
                            }
                            else
                            {
                                newLoc.Offset(0, 74);
                            }
                        }
                        else
                        {
                            newLoc.Offset(15, 74);
                        }

                        if (newLoc.Y > 75)
                        {
                            newLoc.Offset(0, 10);
                            esquerdaState       = 2;
                            firstEsquerdaState2 = true;
                        }

                        if (firstEsquerdaState1 == true)
                        {
                            firstEsquerdaState1 = false;
                        }
                    }
                    else if (esquerdaState == 2) // Segue a rota invertida
                    {
                        if (!equal)
                        {
                            if (firstEsquerdaState2)
                            {
                                if (esquerdaEqual)
                                {
                                    newLoc.Offset(img.Width, 17);
                                }
                                else
                                {
                                    newLoc.Offset(45, 29);
                                }

                                firstEsquerdaState2 = false;
                            }
                            else
                            {
                                if (esquerdaEqual)
                                {
                                    newLoc.Offset(45, 17);
                                }
                                else
                                {
                                    newLoc.Offset(img.Width, 0);
                                }
                            }
                        }
                        else
                        {
                            if (firstEsquerdaState2)
                            {
                                img       = this.RotateImage90Degrees(img);
                                pp        = this.GetPosicaoPecaRotate90(pp);
                                pb1.Image = img;
                                pb1.Size  = img.Size;
                                newLoc.Offset(55, 40);
                                firstEsquerdaState2 = false;
                                equal = false;
                            }
                            else
                            {
                                newLoc.Offset(84, -16);
                            }
                        }
                    }
                    esquerdaEqual = equal;
                    leftBody_left = newLoc.X;
                    topBody_left  = newLoc.Y;
                }
                else if (valor.Equals("Direita"))
                {
                    newLoc = new Point(leftBody_right, topBody_right);
                    // Segue a rota original!
                    if (direitaState == 0)
                    {
                        if (topBody_right == 100 && leftBody_right == 450)
                        {
                            newLoc.Offset(45, 17);
                        }
                        else if (!equal)
                        {
                            if (direitaEqual)
                            {
                                newLoc.Offset(79, 17);
                            }
                            else
                            {
                                newLoc.Offset(img.Width, 0);
                            }
                        }
                        else
                        {
                            newLoc.Offset(85, -17);
                        }

                        if (newLoc.X > 850)
                        {
                            if (!equal)
                            {
                                img       = this.RotateImage90Degrees(img);
                                pb1.Image = img;
                                pb1.Size  = img.Size;
                            }

                            if (!equal)
                            {
                                if (direitaEqual)
                                {
                                    newLoc.Offset(-82, 67);
                                }
                                else
                                {
                                    newLoc.Offset(-82, 44);
                                }
                            }
                            else
                            {
                                newLoc.Offset(-28, 64);
                            }
                            direitaState = 1;
                        }
                    }
                    else if (direitaState == 1) // Desce
                    {
                        if (!equal || !firstDireitaState1)
                        {
                            img       = this.RotateImage90Degrees(img);
                            pb1.Image = img;
                            pb1.Size  = img.Size;
                        }

                        if (!equal)
                        {
                            if (direitaEqual)
                            {
                                newLoc.Offset(0, 74);
                            }
                            else
                            {
                                if (firstDireitaState1 == true)
                                {
                                    newLoc.Offset(45, 74);
                                }
                                else
                                {
                                    newLoc.Offset(0, 74);
                                }
                            }
                        }
                        else
                        {
                            newLoc.Offset(0, 74);
                        }

                        if (newLoc.Y > 75)
                        {
                            newLoc.Offset(0, 10);
                            direitaState       = 2;
                            firstDireitaState2 = true;
                        }

                        if (firstDireitaState1 == true)
                        {
                            firstDireitaState1 = false;
                        }
                    }
                    else if (direitaState == 2) // Segue a rota invertida
                    {
                        if (!equal)
                        {
                            if (firstDireitaState2)
                            {
                                if (direitaEqual)
                                {
                                    newLoc.Offset(-img.Width, 17);
                                }
                                else
                                {
                                    newLoc.Offset(-85, 29);
                                }

                                firstDireitaState2 = false;
                            }
                            else
                            {
                                if (direitaEqual)
                                {
                                    newLoc.Offset(-85, 17);
                                }
                                else
                                {
                                    newLoc.Offset(-img.Width, 0);
                                }
                            }
                        }
                        else
                        {
                            if (firstDireitaState2)
                            {
                                img       = this.RotateImage90Degrees(img);
                                pb1.Image = img;
                                pb1.Size  = img.Size;
                                newLoc.Offset(-80, 30);
                                firstEsquerdaState2 = false;
                            }
                            else
                            {
                                newLoc.Offset(-45, -16);
                            }
                        }
                    }
                    direitaEqual   = equal;
                    leftBody_right = newLoc.X;
                    topBody_right  = newLoc.Y;
                }

                PosicaoPeca newPp = PosicaoPeca.original;
                if (valor == "Esquerda")
                {
                    newPp = this.ManageImageUnderConditions(img, this.extremoA, this.extremoB, po,
                                                            this.posicaoEsquerda, pp, "B");
                }
                else if (valor == "Direita")
                {
                    newPp = this.ManageImageUnderConditions(img, this.extremoA, this.extremoB, po,
                                                            this.posicaoDireita, pp, "B");
                }

                while (pp != newPp)
                {
                    img = this.RotateImage90Degrees(img);
                    pp  = this.GetPosicaoPecaRotate90(pp);
                }

                pb1.Size     = img.Size;
                pb1.Location = newLoc;
            }

            if (this.InvokeRequired)
            {
                this.BeginInvoke((MethodInvoker) delegate()
                {
                    Controls.Add(pb1);
                });
            }
            else
            {
                Controls.Add(pb1);
            }
        }
Ejemplo n.º 3
0
        private PosicaoPeca ManageImageUnderConditions(Image img, int extremeA, int extremeB, PieceObject po,
                                                       PosicaoPeca lastPp, PosicaoPeca pp, String extremeSide)
        {
            PosicaoPeca newPp = pp;
            Boolean     equal = po.faceA == po.faceB;

            switch (extremeSide)
            {
            case "A":     // Direita
                switch (lastPp)
                {
                case PosicaoPeca.original:
                case PosicaoPeca.abaixo:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        if (!equal)
                        {
                            if (po.faceA == extremeA)
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                            else
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                        }
                        break;

                    case PosicaoPeca.esquerda:
                        if (po.faceA == extremeA)
                        {
                        }
                        else
                        {
                            newPp = this.GetPosicaoPecaRotate90(newPp);
                            newPp = this.GetPosicaoPecaRotate90(newPp);
                        }
                        break;

                    case PosicaoPeca.abaixo:
                        if (!equal)
                        {
                            if (po.faceB == extremeA)
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                            else
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                        }
                        break;

                    case PosicaoPeca.direita:
                        if (po.faceB == extremeA)
                        {
                        }
                        else
                        {
                            newPp = this.GetPosicaoPecaRotate90(newPp);
                            newPp = this.GetPosicaoPecaRotate90(newPp);
                        }
                        break;
                    }
                    break;

                case PosicaoPeca.esquerda:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        if (equal)
                        {
                        }
                        else
                        {
                            if (po.faceA == extremeA)
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                            else
                            {
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                                newPp = this.GetPosicaoPecaRotate90(newPp);
                            }
                        }
                        break;

                    case PosicaoPeca.esquerda:
                        //if (face)
                        break;

                    case PosicaoPeca.abaixo:
                        break;

                    case PosicaoPeca.direita:
                        break;
                    }
                    break;

                case PosicaoPeca.direita:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        break;

                    case PosicaoPeca.esquerda:
                        break;

                    case PosicaoPeca.abaixo:
                        break;

                    case PosicaoPeca.direita:
                        break;
                    }
                    break;

                default:
                    break;
                }
                break;

            case "B":     // Esquerda
                switch (lastPp)
                {
                case PosicaoPeca.original:
                case PosicaoPeca.abaixo:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        break;

                    case PosicaoPeca.esquerda:
                        break;

                    case PosicaoPeca.abaixo:
                        break;

                    case PosicaoPeca.direita:
                        break;
                    }
                    break;

                case PosicaoPeca.esquerda:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        break;

                    case PosicaoPeca.esquerda:
                        break;

                    case PosicaoPeca.abaixo:
                        break;

                    case PosicaoPeca.direita:
                        break;
                    }
                    break;

                case PosicaoPeca.direita:
                    switch (pp)
                    {
                    case PosicaoPeca.original:
                        break;

                    case PosicaoPeca.esquerda:
                        break;

                    case PosicaoPeca.abaixo:
                        break;

                    case PosicaoPeca.direita:
                        break;
                    }
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }

            return(newPp);
        }