Example #1
0
 private static CellDto ConvertVMToDto(CellVM cell
                                       )
 {
     return(new CellDto
            (
                cell.Id,
                cell.Row,
                cell.Column,
                cell.CellType
                //cell.Name
            ));
 }
Example #2
0
        public void NewGame(ObservableCollection <ObservableCollection <CellVM> > boardVM)
        {
            ObservableCollection <ObservableCollection <Cell> > board;

            board = Helper.InitBoard();

            ObservableCollection <ObservableCollection <CellVM> > result = new ObservableCollection <ObservableCollection <CellVM> >();

            for (int i = 0; i < board.Count; i++)
            {
                ObservableCollection <CellVM> line = new ObservableCollection <CellVM>();
                for (int j = 0; j < board[i].Count; j++)
                {
                    Cell   cell   = board[i][j];
                    CellVM cellVM = new CellVM(cell.X, cell.Y, cell.Color, cell.Piece, new GameBusinessLogic(board));
                    line.Add(cellVM);
                }

                result.Add(line);
            }
            boardVM = result;
        }
Example #3
0
        private void Model_ChangedStateEvent(object sender, ChangedStateHandlerArgs e)
        {
            switch (e.StateName)
            {
            case NamesState.RowsCount:
                RowsCount = (int)e.NewValue;
                break;

            case NamesState.ColumnsCount:
                ColumnsCount = (int)e.NewValue;
                break;

            case NamesState.LineLength:
                LineLength = (int)e.NewValue;
                break;

            case NamesState.GameStatus:
                //int userId = (int)e.NewValue[1];

                if (e.NewValue is GameStatuses status)
                {
                    Statuse = status;
                }
                else
                {
                    object[] args   = (object[])e.NewValue;
                    int      userId = (int)args[1];
                    status = (GameStatuses)args[0];
                    if (status == GameStatuses.Win)
                    {
                        if (FirstGamer.Id == userId)
                        {
                            Winner = FirstGamer;
                            Loser  = SecondGamer;
                        }
                        else if (SecondGamer.Id == userId)
                        {
                            Winner = SecondGamer;
                            Loser  = FirstGamer;
                        }
                        else
                        {
                            throw new ArgumentException("Не существующий UserId, когда один из игроков сдался/выиграл");
                        }
                    }
                    else
                    {
                        throw new ArgumentException("Не допустимый статус игры");
                    }
                    Statuse = status;
                }
                break;

            case NamesState.Gamers:
                var users  = ((IEnumerable <UserDto>)e.NewValue).OrderBy(us => us.Turn);
                var first  = users.First();
                var second = users.Skip(1).First();

                CopyPropertiesToVM(first, FirstGamer);
                CopyPropertiesToVM(second, SecondGamer);
                FirstGamer.Image  = PiecesCollection.ElementAt(FirstGamer.ImageIndex);
                SecondGamer.Image = PiecesCollection.ElementAt(SecondGamer.ImageIndex);
                break;

            case NamesState.Types:
                CellTypes.Clear();
                ((ISet <CellTypeDto>)e.NewValue).ToList().ForEach(c => CellTypes.Add(c));
                FirstGamer.CellType  = CellTypes[1];
                SecondGamer.CellType = CellTypes[2];
                break;

            case NamesState.CurrentGamerId:
                break;

            case NamesState.CurrentGamerIndex:
                CurrentUserIndex = (int)e.NewValue;
                break;

            case NamesState.CurrentGamer:
                var user = (UserDto)e.NewValue;
                if (FirstGamer.UserName == user.UserName)
                {
                    CurrentUserIndex = 0;
                }
                else if (SecondGamer.UserName == user.UserName)
                {
                    CurrentUserIndex = 1;
                }
                else
                {
                    CurrentUserIndex = -1;
                }
                break;

            case NamesState.IsRevenge:
                IsRevenge = (bool)e.NewValue;
                break;

            case NamesState.CellType:
                CellDto cell = (CellDto)e.NewValue;
                cellsMatrix[cell.Row, cell.Column].CellType = cell.CellType;
                break;

            case NamesState.ChangeCellsCount:
                int[] cellsParams = (int[])e.NewValue;
                RowsCount    = cellsParams[0];
                ColumnsCount = cellsParams[1];
                Cells.Clear();
                cellsMatrix = new CellVM[RowsCount, ColumnsCount];
                for (int row = 0; row < RowsCount; row++)
                {
                    for (int col = 0; col < ColumnsCount; col++)
                    {
                        Cells.Add(cellsMatrix[row, col] = new CellVM()
                        {
                            Row = row, Column = col
                        });
                    }
                }
                break;

            case NamesState.ChangeGamerIsTurn:
                UserDto newUser = (UserDto)e.NewValue;
                //UserDto oldUser = (UserDto)e.OldValue;
                //UserVM newUserVM = FirstGamer, oldUserVM = SecondGamer;
                if (FirstGamer.UserName == newUser.UserName)
                {
                    FirstGamer.IsTurn = newUser.IsTurn;
                }
                else if (SecondGamer.UserName == newUser.UserName)
                {
                    SecondGamer.IsTurn = newUser.IsTurn;
                }
                else
                {
                    throw new ArgumentException($"Не существующее имя очередного игрока {newUser.UserName}", nameof(e));
                }
                break;

            default:
                break;
            }
        }
 public SelectTileCommand(CellVM cell)
 {
     this.cellVM = cell;
 }