示例#1
0
        public bool IsMoving = false;         //indique si l'utilisateur est en train de deplacer la tile this


        //void new()
        public oTile()
        {
            this.CreateAllTriangle();
            this.pos      = new TilePos(0, 0, GridParent.gStart);
            this.savedpos = new TilePos(0, 0, GridParent.gStart);

            this.RefreshImage();
        }
示例#2
0
        private oTile GetTileAtPos(oTile.TilePos ThePos)
        {
            oTile rep = null;

            foreach (oTile ActualTile in this.AllTile)
            {
                if (ActualTile.pos.x == ThePos.x && ActualTile.pos.y == ThePos.y && ActualTile.pos.parent == ThePos.parent)
                {
                    rep = ActualTile;
                    break;
                }
            }
            return(rep);
        }
示例#3
0
        private bool IsAnyTileAtPos(oTile.TilePos ThePos)
        {
            bool rep = false;

            foreach (oTile ActualTile in this.AllTile)
            {
                if (ActualTile.pos.x == ThePos.x && ActualTile.pos.y == ThePos.y && ActualTile.pos.parent == ThePos.parent)
                {
                    rep = true;
                    break;
                }
            }
            return(rep);
        }
示例#4
0
        public static List <oTile> GetRandom3x3Grid()
        {
            oTile[,] TileGrid = new oTile[3, 3];
            for (int y = 0; y <= 2; y++)
            {
                for (int x = 0; x <= 2; x++)
                {
                    TileGrid[x, y] = new oTile();

                    //la position n'est pas defini car elle doit etre defini aleatoirement

                    ////test
                    //TileGrid[x, y].pos = new oTile.TilePos(x, y, oTile.GridParent.gStart);
                }
            }

            //generation aleatoire des arrete interieur
            //verticale
            for (int y = 0; y <= 2; y++)
            {
                for (int x = 0; x <= 1; x++)
                {
                    int newn = oGridGenerator.GetRandomTriNumber();
                    TileGrid[x, y].TriRight.TheNumber    = newn;
                    TileGrid[x + 1, y].TriLeft.TheNumber = newn;
                }
            }
            //horizontale
            for (int y = 0; y <= 1; y++)
            {
                for (int x = 0; x <= 2; x++)
                {
                    int newn = oGridGenerator.GetRandomTriNumber();
                    TileGrid[x, y].TriDown.TheNumber   = newn;
                    TileGrid[x, y + 1].TriUp.TheNumber = newn;
                }
            }

            //generation aleatoire des bordule
            //verticale
            for (int y = 0; y <= 2; y++)
            {
                TileGrid[0, y].TriLeft.TheNumber  = oGridGenerator.GetRandomTriNumber();
                TileGrid[2, y].TriRight.TheNumber = oGridGenerator.GetRandomTriNumber();
            }
            //horizontale
            for (int x = 0; x <= 2; x++)
            {
                TileGrid[x, 0].TriUp.TheNumber   = oGridGenerator.GetRandomTriNumber();
                TileGrid[x, 2].TriDown.TheNumber = oGridGenerator.GetRandomTriNumber();
            }


            //definition aleatoire de la position des case
            List <oTile.TilePos> AllTilePos = new List <oTile.TilePos>();

            for (int y = 0; y <= 2; y++)
            {
                for (int x = 0; x <= 2; x++)
                {
                    oTile.TilePos newtilepos = new oTile.TilePos(x, y, oTile.GridParent.gStart);
                    AllTilePos.Add(newtilepos);
                }
            }

            Random rnd = module.rnd;

            for (int y = 0; y <= 2; y++)
            {
                for (int x = 0; x <= 2; x++)
                {
                    //optien un index aleatoire
                    int rndindex = 0;
                    rndindex = rnd.Next(0, AllTilePos.Count - 1);

                    oTile.TilePos tp = AllTilePos[rndindex];
                    AllTilePos.RemoveAt(rndindex);

                    TileGrid[x, y].pos = tp;
                }
            }



            //end
            List <oTile> rep = new List <oTile>();

            for (int y = 0; y <= 2; y++)
            {
                for (int x = 0; x <= 2; x++)
                {
                    TileGrid[x, y].RefreshImage();
                    rep.Add(TileGrid[x, y]);
                }
            }
            return(rep);
        }
示例#5
0
 public void SavePos()
 {
     this.savedpos = this.pos;
 }
示例#6
0
        private void ImageBox_MouseDown(object sender, MouseEventArgs e)
        {
            if (e.Button == MouseButtons.Left)
            {
                Point mpos = this.MousePos;
                int   w2   = this.ImgWidth / 2;             //pour savoir quelle grille il faut chercker

                //======== si aucune tile est en deplacement
                if (this.ActualGameStade == GameStade.sNothingHappening)
                {
                    if (mpos.X < w2)
                    {
                        oVirtualGrid.CasePos CaseUnderM = this.GridRep.GetCaseUnderPoint(mpos.X, mpos.Y);
                        if (CaseUnderM.Exist && CaseUnderM.x <= 2 && CaseUnderM.y <= 2)
                        {
                            oTile.TilePos tp = new oTile.TilePos(CaseUnderM.x, CaseUnderM.y, oTile.GridParent.gRep);
                            //check s'il y a une tile a cette case
                            if (this.IsAnyTileAtPos(tp))
                            {
                                oTile TheClickedTile = this.GetTileAtPos(tp);
                                TheClickedTile.SavePos();
                                TheClickedTile.IsMoving = true;
                                //ce changement de coordonner sert a degager la tile des grille au cas ou le joueur la remet a la meme place
                                TheClickedTile.pos.x = -1;
                                TheClickedTile.pos.y = -1;
                                this.ActualGameStade = GameStade.sTileMoving;
                            }
                        }
                    }
                    if (mpos.X > w2)
                    {
                        oVirtualGrid.CasePos CaseUnderM = this.GridStart.GetCaseUnderPoint(mpos.X, mpos.Y);
                        if (CaseUnderM.Exist && CaseUnderM.x <= 2 && CaseUnderM.y <= 2)
                        {
                            oTile.TilePos tp = new oTile.TilePos(CaseUnderM.x, CaseUnderM.y, oTile.GridParent.gStart);
                            //check s'il y a une tile a cette case
                            if (this.IsAnyTileAtPos(tp))
                            {
                                oTile TheClickedTile = this.GetTileAtPos(tp);
                                TheClickedTile.SavePos();
                                TheClickedTile.IsMoving = true;
                                //ce changement de coordonner sert a degager la tile des grille au cas ou le joueur la remet a la meme place
                                TheClickedTile.pos.x = -1;
                                TheClickedTile.pos.y = -1;
                                this.ActualGameStade = GameStade.sTileMoving;
                            }
                        }
                    }
                }
                // /!\ /!\ /!\ IL EST TRES IMPORTANT QUE CE SOIT UN ELSE car lorsqu'une case est clicker pour commencer un deplacement, this.ActualGameStade devien sTileMoving et il ne faut pas que le code de relachement de la tile s'execute immediatement apres
                else                 //========= si une tile est en deplacement
                {
                    oTile TheMovingTile = this.GetTheMovingTile();

                    if (mpos.X < w2)
                    {
                        oVirtualGrid.CasePos cp = this.GridRep.GetCaseUnderPoint(mpos.X, mpos.Y);
                        if (cp.Exist && cp.x <= 2 && cp.y <= 2)
                        {
                            oTile.TilePos tp = new oTile.TilePos(cp.x, cp.y, oTile.GridParent.gRep);
                            //check s'il y a deja une tile en dessous
                            bool  IsAnyTile    = this.IsAnyTileAtPos(tp);
                            oTile TheTileUnder = this.GetTileAtPos(tp);
                            if (!IsAnyTile)
                            {
                                TheMovingTile.pos.x      = tp.x;
                                TheMovingTile.pos.y      = tp.y;
                                TheMovingTile.pos.parent = tp.parent;
                                TheMovingTile.IsMoving   = false;
                                this.ActualGameStade     = GameStade.sNothingHappening;
                                this.EasyResetGameIfOk();
                            }
                            else
                            {
                                //oTile.TilePos temppos = TheMovingTile.pos;
                                TheMovingTile.pos      = TheTileUnder.pos;
                                TheTileUnder.pos       = TheMovingTile.savedpos;
                                TheMovingTile.IsMoving = false;
                                this.ActualGameStade   = GameStade.sNothingHappening;
                                this.EasyResetGameIfOk();
                            }
                        }
                    }
                    if (mpos.X > w2)
                    {
                        oVirtualGrid.CasePos cp = this.GridStart.GetCaseUnderPoint(mpos.X, mpos.Y);
                        if (cp.Exist && cp.x <= 2 && cp.y <= 2)
                        {
                            oTile.TilePos tp = new oTile.TilePos(cp.x, cp.y, oTile.GridParent.gStart);
                            //check s'il y a deja une tile en dessous
                            bool  IsAnyTile    = this.IsAnyTileAtPos(tp);
                            oTile TheTileUnder = this.GetTileAtPos(tp);
                            if (!IsAnyTile)
                            {
                                TheMovingTile.pos.x      = tp.x;
                                TheMovingTile.pos.y      = tp.y;
                                TheMovingTile.pos.parent = tp.parent;
                                TheMovingTile.IsMoving   = false;
                                this.ActualGameStade     = GameStade.sNothingHappening;
                                this.EasyResetGameIfOk();
                            }
                            else
                            {
                                TheMovingTile.pos      = TheTileUnder.pos;
                                TheTileUnder.pos       = TheMovingTile.savedpos;
                                TheMovingTile.IsMoving = false;
                                this.ActualGameStade   = GameStade.sNothingHappening;
                                this.EasyResetGameIfOk();
                            }
                        }
                    }
                }
            }
            this.Refresh();

            ////aucune tile ne doit etre en deplacement car les coordonner negative des tile en movement vont generer des erreur
            //if (this.ActualGameStade != GameStade.sTileMoving)
            //{
            //	this.EasyResetGameIfOk();
            //}
        }