public void Move(GameData gd)
        {
            var player = GetPlayerOf(gd.NextPlayer);
            var move   = player.ProposeMove(gd);
            var data   = Game.TryMakeMove(gd.NextPlayer, move);

            UpdateOpponentState(player, data);

            if (data.Code != ResponseCode.OK && Game.State != GameState.GameEnded)
            {
                return;
            }

            OnMoveCompleted?.Invoke(data);
            if (Game.State == GameState.GameEnded)
            {
                OnGameEnded?.Invoke(data);
            }
        }
        public async Task RunAuto()
        {
            var data = Game.StartGame(Team.Blue);

            OnGameStarted?.Invoke(data);
            Console.WriteLine("Runner started an auto game!");

            while (Game.State != GameState.GameEnded)
            {
                Point move;
                if (Game.PlayerTurn == Team.Blue)
                {
                    move = PlayerBlue.ProposeMove(data);
                    PlayerRed.UpdateState(data);
                }
                else
                {
                    move = PlayerRed.ProposeMove(data);
                    PlayerBlue.UpdateState(data);
                }
                data = Game.TryMakeMove(Game.PlayerTurn, move);
                if (data.Code == ResponseCode.OK)
                {
                    await OnMoveCompleted?.Invoke(data);
                }
                if (Game.State == GameState.GameEnded)
                {
                    await OnMoveCompleted?.Invoke(data);

                    await OnGameEnded?.Invoke(data);

                    return;
                }
                await Task.Delay(500);
            }
            //if (data.Code == ResponseCode.Draw)
            //    Console.WriteLine("Draw!");
            //else
            //    Console.WriteLine("{0} Lost! (Point {1})", data.NextPlayer, data.Updated);
        }
示例#3
0
    /// <summary>
    /// start moving the unit form node to node
    /// </summary>
    public void Move(List <MapNavNode> path, OnMoveCompleted callback)
    {
        if (path.Count == 0)
        {
            callback();
            return;
        }

        this.onMoveCompleted = callback;
        this.path            = path;
        this.moving          = true;

        // unlink with tile
        LinkWithTile(null);

        // start moving
        targetPos     = path[0].position;
        nextPathIdx   = 1;
        journeyLength = Vector3.Distance(transform.position, targetPos);
        startTime     = Time.time;
        movesLeft--;
    }
        public async Task Move(string id, int row, int col)
        {
            if (!EnsureExists(id, out var player))
            {
                return;
            }
            var data = Game.TryMakeMove(player.Team, new Point(col, row));

            UpdateOpponentState(player, data);

            if (data.Code != ResponseCode.OK && Game.State != GameState.GameEnded)
            {
                return;
            }

            await OnMoveCompleted?.Invoke(data);

            if (Game.State == GameState.GameEnded)
            {
                await OnGameEnded?.Invoke(data);
            }
            //Move(data);
        }
示例#5
0
 protected void OnMoveCompletedCall()
 {
     OnMoveCompleted?.Invoke();
 }