コード例 #1
0
ファイル: Gameplay.cs プロジェクト: darkiri/TicTacToe
 public Gameplay(PlayStrategy ai)
 {
     _ai = ai;
     _ai.SetMark(BoardMark.O);
     _whoGoesNow = BoardMark.X;
     _board = new BoardState();
 }
コード例 #2
0
ファイル: GameTurn.cs プロジェクト: qrow/TicTacToeOnline
 public GameTurn(string playerId, string gameId, int turn, BoardMark boardMark)
 {
     PlayerId = playerId;
     GameId = gameId;
     Turn = turn;
     BoardMark = boardMark;
 }
コード例 #3
0
ファイル: BoardState.cs プロジェクト: darkiri/TicTacToe
 public IEnumerable<int> GetPositions(BoardMark mark)
 {
     return _board
         .Select((m, p) => new {Mark = m, Position = p})
         .Where(b => b.Mark == mark)
         .Select(b => b.Position);
 }
コード例 #4
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
        private static IEnumerable<BobDecisionTree> AllDecisionsFromHere(BoardState board, BoardMark whosTurn, int decisionsCount)
        {
            IEnumerable<int> positions2Go = new BoardSymmetry(board).GetFreeUniquePositions();
            if (CanOptimizeTreeBuilding(decisionsCount, positions2Go))
            {
                positions2Go = positions2Go.AsParallel();
            }

            return positions2Go
                .Select(p => new { NewBoard = board.Set(p, whosTurn), Position = p })
                .Select(p => new BobDecisionTree(p.NewBoard, whosTurn.OpponentsMark(), p.Position, decisionsCount + 1))
                .ToArray();
        }
コード例 #5
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
        private BobDecisionTree(BoardState board, BoardMark whosTurn, int position, int decisionsCount)
        {
            _board = board;
            _position = position;
            _decisionsCount = decisionsCount;

            _children = board.HasCompleteLine()
                            ? Enumerable.Empty<BobDecisionTree>()
                            : AllDecisionsFromHere(board, whosTurn, decisionsCount);
            _endsFromHere = IsEndDecision
                                ? new[] {this}
                                : CollectEndDecisions();
            _treeSize = _children.Select(ch => ch.TreeSize).Sum() + 1;
        }
コード例 #6
0
ファイル: BoardTile.cs プロジェクト: sephirot47/Bugz
 //Set the mark type, that will be kept in the tile until the tile receives the OnUnSelected event
 public void SetTemporaryMarkType(BoardMark.MarkType type)
 {
     mark.SetType(type);
 }
コード例 #7
0
ファイル: BoardTile.cs プロジェクト: sephirot47/Bugz
 //Set the mark type, and it will be set as the permanent mark type, that is, the one to change to when the tile receives the OnUnSelected event
 public void SetPermanentMarkType(BoardMark.MarkType type)
 {
     permanentMarkType = type;
     mark.SetType(type);
 }
コード例 #8
0
ファイル: BoardState.cs プロジェクト: darkiri/TicTacToe
 public IEnumerable<int> GetPositionsToCompleteLine(BoardMark mark)
 {
     return _winPositions
         .Where(line => line.Count(GetPositions(mark).Contains) == 2)
         .SelectMany(line => line)
         .Where(p => _board.ElementAt(p) == BoardMark._);
 }
コード例 #9
0
ファイル: BoardState.cs プロジェクト: darkiri/TicTacToe
 private bool CompleteLine(IEnumerable<int> winLine, BoardMark mark)
 {
     return winLine.All(GetPositions(mark).Contains);
 }
コード例 #10
0
ファイル: BoardState.cs プロジェクト: darkiri/TicTacToe
 public BoardState Set(int position, BoardMark mark)
 {
     if (_board.ElementAt(position) != BoardMark._)
     {
         throw new InvalidOperationException();
     } else
     {
         return new BoardState(_board.Select((oldMark, p) => p == position ? mark : oldMark));
     }
 }
コード例 #11
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
 private double WinForecast(BoardMark whosTurn, int movesToGetTurn)
 {
     return WinEndsFor(whosTurn).Select(e => e.Weight(movesToGetTurn)).Sum();
 }
コード例 #12
0
ファイル: Gameplay.cs プロジェクト: darkiri/TicTacToe
 public void Reset()
 {
     _whoGoesNow = BoardMark.X;
     _board = new BoardState();
     OnChanged();
 }
コード例 #13
0
ファイル: BoardTests.cs プロジェクト: darkiri/TicTacToe
 private static BoardState SetUpBoard(IEnumerable<int> line, BoardMark mark)
 {
     return line.Aggregate(new BoardState(), (current, position) => current.Set(position, mark));
 }
コード例 #14
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
 public double GetWinFactor(BoardMark whosTurn)
 {
     return WinForecast(whosTurn, 0) - WinForecast(whosTurn.OpponentsMark(), 1);
 }
コード例 #15
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
 public BobDecisionTree(BoardState board, BoardMark whosTurn)
     : this(board, whosTurn, -1, 0)
 {
 }
コード例 #16
0
ファイル: BoardTile.cs プロジェクト: sephirot47/Bugz
 //Called at when creating the tile, it instantiates the mark
 private void CreateMark()
 {
     GameObject go = GameObject.Instantiate(Resources.Load("Board/BoardMark/BoardMark"), worldPos, Quaternion.identity) as GameObject;
     mark = go.GetComponent<BoardMark>();
 }
コード例 #17
0
ファイル: PlayStrategy.cs プロジェクト: darkiri/TicTacToe
 public void SetMark(BoardMark mark)
 {
     OwnMark = mark;
 }
コード例 #18
0
ファイル: Steve.cs プロジェクト: darkiri/TicTacToe
 private IEnumerable<int> GetForkPositions(BoardMark mark)
 {
     return _board.FreePositions
         .Where(p => _board.Set(p, mark).GetPositionsToCompleteLine(mark).Count() > 1);
 }
コード例 #19
0
ファイル: BobDecisionTree.cs プロジェクト: darkiri/TicTacToe
 private IEnumerable<BobDecisionTree> WinEndsFor(BoardMark player)
 {
     return _endsFromHere.Where(d => d._board.HasCompleteLine(player));
 }
コード例 #20
0
ファイル: Gameplay.cs プロジェクト: darkiri/TicTacToe
 private void SetAMark(int position)
 {
     if (!Board.FreePositions.Any(p => p == position))
     {
         throw new InvalidOperationException(String.Format("Cannot go to position {0}!", position));
     }
     else
     {
         _board = _board.Set(position, WhoGoesNow);
         _whoGoesNow = WhoGoesNow.OpponentsMark();
     }
 }
コード例 #21
0
ファイル: BoardState.cs プロジェクト: darkiri/TicTacToe
 public bool HasCompleteLine(BoardMark mark)
 {
     return _winPositions.Any(line => CompleteLine(line, mark));
 }