// совершить ход в данную точку. Финальная - завершительная часть хода. 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); }
// совершить ход в данную точку. Финальная - завершительная часть хода. 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); }
// открывает поле при клике в данную точку 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); }
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(); }