Beispiel #1
0
        // совершить ход в данную точку. Финальная - завершительная часть хода.
        public bool MakeHit(OneHit point, int player)
        {
            //player: 1 2 3
            // проверить занята ли точка, либо случилась победа
            if (point.state != 1)
            {
                return(false);
            }

            point.whoShodil = player;
            // Обновить точку, выше всех остальных шагов чтобы пользователь видел что произошёл ход
            // 1:2 2:3 3:4
            point.SetState(player + 1);

            // В последнюю схоженную данным игроком ячейку помещаем "иконку последнего хода" этого игрока
            lastHitedPoints[player - 1] = point.gameObject;

            //if (FindPobedaInPoint(point.coord, player))
            //{
            //return true;
            //}

            // создать чёрное поле
            AddBlackField(point.coord);

            return(true);
        }
Beispiel #2
0
        // совершить ход в данную точку. Финальная - завершительная часть хода.
        public virtual bool MakeHit(OneHit point, int player)
        {
            //player: 1 2 3
            // проверить занята ли точка, либо случилась победа
            if (point.state != 0 || gm.win == true)
            {
                return(false);
            }

            // Обновить точку, выше всех остальных шагов чтобы пользователь видел что произошёл ход
            point.SetState(player);

            // В последнюю схоженную данным игроком ячейку помещаем "иконку последнего хода" этого игрока
            lastHitedPoint[player - 1].transform.position = point.transform.position;

            if (FindPobedaInPoint(point.coord, player))
            {
                return(true);
            }

            // создать чёрное поле
            AddBlackField(point.coord);

            UnityEngine.Debug.Log(string.Format("{0}", points.Count));

            return(true);
        }
Beispiel #3
0
        // открывает поле при клике в данную точку
        public int OpenField(OneHit p, bool needCountAroundBombs = true)
        {
            /*for (int i = 0; i < 6; i++)
             *  if ( FindPoint( p.coord.GetAround(i) ).damageHill==2 )
             *      FindPoint( p.coord.GetAround(i) ).GetBombObject().SetActive(true);*/

            // если ячейки не существует, если она уже открыта или если закрыта
            // если точка была помечена как бомба - убираем пометку
            if (p == null || p.damageHill == 2 || p.state != 1 || p.playerMarkBomb == 1)
            {
                return(0);
            }

            for (int i = 0; i < 6; i++)
            {
                // Вокруг отустствуeт одна или более точек - текущую не показываем
                if (!FindPoint(p.coord.GetAround(i)))
                {
                    return(0);
                }
            }

            p.SetState(2);

            // Сколько бомб вокруг точки
            int countBombs = 0;

            for (int i = 0; i < 6; i++)
            {
                OneHit oh = FindPoint(p.coord.GetAround(i));
                if (oh.damageHill == 2 || oh.damageHill == 4)
                {
                    countBombs++;
                }
            }

            // если вокруг есть таблетки - показываем их
            p.CheckHill();

            // показываем сколько вокруг бомб
            if (countBombs > 0 && p.damageHill != 4)
            {
                p.DrawAroundBombs(countBombs);
                return(1);
            }

            // считаем количество открытых точек
            int ret = 0;

            for (int i = 0; i < 6; i++)
            {
                ret += OpenField(FindPoint(p.coord.GetAround(i)));
            }

            return(ret);
        }
Beispiel #4
0
        public void UpdateAllAfterHit(OneHit p)
        {
            // меняем позицию игрока
            p.SetState(players[playerCurHit].p.state);
            players[playerCurHit].p.SetState(2);
            players[playerCurHit].p = p;


            for (int i = 0; i < countPlayers; i++)
            {
                // Боты перерасчитывают свои веса
                if (players[i].GetType() == typeof(Bot))
                {
                    ((Bot)players[i]).ReanalyseAfterHit(p);
                }
            }

            // Определяем кто ходит
            int pch = playerCurHit; //игрок который только что ходил

            do
            {
                // playerCurHit:playerCurHit   0:1 1:2 2:0    или 0:1 1:0
                playerCurHit = (playerCurHit + 1) % countPlayers;
            }
            // пропускаем всех мёртвых игроков, они больше не ходят
            while (playerCurHit != pch && players[playerCurHit].playerDead);

            if (playerCurHit == pch && players[playerCurHit].playerDead)
            {// все умерли - конец игры
                gameOver = true;
                cam.GameOverDeclare(pch);
                return;
            }

            // в камере меняем иконку игрока который ходит
            cam.UpdateImgPlayerCurHit();
        }