示例#1
0
        public void Run()
        {
            var returnCode = 2;

            while (returnCode == 2)
            {
                returnCode = _game.Start();

                //Code : on quite
                if (returnCode == 0)
                {
                    _game_repository.Delete();
                }

                //[1] Code : on quitte en sauvegardant

                //Code : lancement d'une nouvelle partie
                if (returnCode == 2)
                {
                    _displayer.Clear();
                    _displayer.Show("Lancement d'une nouvelle partie !");
                    _game_repository.Delete();
                    _game_model = _game_factory.Create(NUMBER_ROUND);
                    _game       = new TicTacToeGame(_reader, _displayer, _formatter, _player_factory, _round_factory, _game_model, _game_repository);
                }
            }
        }
示例#2
0
        public int Start()
        {
            if (_game.Player1 == null || _game.Player2 == null)
            {
                _Create_Players();
            }

            _displayer.Clear();

            //Lancement de la partie

            int t = 0;

            if (_game.Current != null)
            {
                t = Array.IndexOf(_game.Rounds, _game.Current);
            }

            //Si on est en mode mort subite on ne passe pas par là
            if (t != -1)
            {
                for (int i = t; i < _game.Rounds.Length; i++)
                {
                    //Si un des joueurs est dans une position ou le deuxième ne pourra remonter le score étant
                    //donné qu'il lui faudrait plus de tour qu'il n'y en a (ex : 3 - 0, comme il n'y a que 5 tours,
                    // le joueur 2 ne pourras dépasser le joueur1, le joueur1 a donc gagné même si le nombre de tour n'a pas été effectué)
                    if (_game.Player1.NumberWin > (_game.Rounds.Length / 2) || _game.Player2.NumberWin > (_game.Rounds.Length / 2))
                    {
                        break;
                    }

                    if (_game.Rounds [i] == null)
                    {
                        _game.Rounds [i] = _round_factory.Create();
                        _game.Current    = _game.Rounds [i];
                    }
                    _game_repository.Save(_game);

                    _displayer.Clear();

                    var round      = new TicTacToeRound(_reader, _displayer, _formatter, _game, _game_repository);
                    var returnCode = round.Start();

                    if (returnCode > 0)
                    {
                        return(returnCode);
                    }
                }

                //On créer le round pour la mort subite (dans le cas ou il y en aurait besoin)
                _game.Current = _round_factory.Create();
                _game_repository.Save(_game);
            }

            //Lancement du mode "mort subite" si match nul
            while (_game.Player1.NumberWin == _game.Player2.NumberWin)
            {
                _displayer.Clear();

                var round      = new TicTacToeRound(_reader, _displayer, _formatter, _game, _game_repository);
                var returnCode = round.Start();

                if (returnCode > 0)
                {
                    return(returnCode);
                }

                //Si match nul on recréer un round et on fait ça jusqu'au moment ou les joueurs seront départagés
                if (_game.Player1.NumberWin == _game.Player2.NumberWin)
                {
                    _game.Current = _round_factory.Create();
                    _game_repository.Save(_game);
                }
            }

            _displayer.Show("Fin de partie : ", ConsoleColor.Cyan, false);
            if (_game.Player1.NumberWin > _game.Player2.NumberWin)
            {
                _displayer.Show("Le joueur " + _game.Player1.Name + " a gagné la partie.");
            }
            else if (_game.Player2.NumberWin > _game.Player1.NumberWin)
            {
                _displayer.Show("Le joueur " + _game.Player2.Name + " a gagné la partie.");
            }
            else
            {
                _displayer.Show("Match nul !");
            }

            String userChoice = "";

            do
            {
                _displayer.Show("Voulez vous recommencer une partie ? [O/N]");
                userChoice = _reader.Read();

                if (userChoice != null && userChoice.ToLower() == "o")
                {
                    return(2);
                }
                else if (userChoice != null && userChoice.ToLower() == "n")
                {
                    return(0);
                }
            } while(userChoice == null || userChoice.ToLower() != "o" | userChoice.ToLower() != "n");

            return(0);
        }
示例#3
0
        public int Start()
        {
            _round.Current = _game.Player1;

            if (!_checker.HaveWinner() && !_checker.IsTied())
            {
                do
                {
                    _displayer.Clear();
                    _displayer.Show(GetMenu(), ConsoleColor.Blue);

                    _displayer.Show(_formatter.Format(_round.Board));

                    string index;
                    bool   validMove;
                    do
                    {
                        _displayer.Show("Joueur " + _round.Current.Name + " a vous de choisir une case :");
                        index = _reader.Read();
                        int n;
                        if (IsCommand(index) > 0)
                        {
                            return(IsCommand(index));
                        }
                        else if (int.TryParse(index, out n) == false || Convert.ToInt32(index) > _game.Current.Board.getNbCells() | Convert.ToInt32(index) < 1)
                        {
                            validMove = false;
                            _displayer.Show("La saisie " + index + " ne correspond pas à une case");
                        }
                        else
                        {
                            validMove = _round.Board.playTurn(Convert.ToInt32(index), _round.Current);
                            if (validMove == false)
                            {
                                _displayer.Show("Case " + index + " déjà utilisée");
                            }
                        }
                    } while(validMove != true);

                    _round.Current = (_round.Current == _game.Player1) ? _game.Player2 : _game.Player1;

                    _game_repository.Save(_game);
                } while(!_checker.HaveWinner() && !_checker.IsTied());
            }

            if (_checker.IsTied())
            {
                _displayer.Show("Match nul !", ConsoleColor.Yellow);
            }
            else
            {
                _checker.Winner.NumberWin++;
                _displayer.Show("Le gagnant du round est : " + _checker.Winner.Name, ConsoleColor.Green);
            }

            _displayer.Show(_formatter.Format(_round.Board));
            _displayer.Show("Appuyer sur une touche pour continuer...");
            _reader.Read();

            return(0);
        }