コード例 #1
0
        public void GuessWordOutOfTime()
        {
            //prep auth
            string           username         = "******";
            GameSessionModel gameSessionModel = new GameSessionModel()
            {
                Guesses = 5, Score = 10, LastGuess = new DateTime(2001, 10, 10)
            };

            var mockContext = new Mock <HttpContext>(MockBehavior.Strict);

            mockContext.SetupGet(hc => hc.User.Identity.Name).Returns(username);
            _gameController.ControllerContext = new ControllerContext()
            {
                HttpContext = mockContext.Object
            };

            _gameService.Setup(gs => gs.RetrieveGameSessionModelByUsername(username))
            .Returns(gameSessionModel);
            _gameService.Setup(gs => gs.GameOver(gameSessionModel)).Returns(false);
            _gameService.Setup(gs => gs.InTime(gameSessionModel)).Returns(false);

            OkObjectResult result = _gameController.GuessWord(new GuessWriteDto()) as OkObjectResult;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));
            Assert.AreEqual("You've waited too long your guess counter has been incremented please try again.", result.Value);
        }
コード例 #2
0
        public void GuessWordNonMathingWordLengths()
        {
            string           username         = "******";
            GameSessionModel gameSessionModel = new GameSessionModel()
            {
                Guesses = 5, Score = 10, LastGuess = DateTime.Now
            };
            GuessWriteDto guess = new GuessWriteDto()
            {
                Guess = "guess"
            };

            var mockContext = new Mock <HttpContext>(MockBehavior.Strict);

            mockContext.SetupGet(hc => hc.User.Identity.Name).Returns(username);
            _gameController.ControllerContext = new ControllerContext()
            {
                HttpContext = mockContext.Object
            };

            _gameService.Setup(gs => gs.RetrieveGameSessionModelByUsername(username))
            .Returns(gameSessionModel);
            _gameService.Setup(gs => gs.GameOver(gameSessionModel)).Returns(false);
            _gameService.Setup(gs => gs.InTime(gameSessionModel)).Returns(true);
            _gameService.Setup(gs => gs.MatchingWordLengths(gameSessionModel, guess.Guess)).Returns(false);

            OkObjectResult result = _gameController.GuessWord(guess) as OkObjectResult;

            Assert.IsInstanceOfType(result, typeof(OkObjectResult));
            Assert.AreEqual("Your guessed word and the current word do not match in length.", result.Value);
        }
コード例 #3
0
ファイル: GameServiceTest.cs プロジェクト: karmalegend/Lingo
        public void CreateNewGameForUserTestNotFromDb()
        {
            //Using AAA template once to display understanding and usage won't be portrayed this way in future tests.


            //Arrange
            GameSessionModel game = new GameSessionModel()
            {
                Guesses = 0
            };

            _gameRepo.Setup(repo => repo.GetCurrentGame("username")).Returns((GameSessionModel)null);
            _userService.Setup(service => service.GetUserByUsername("username"))
            .Returns(new UserModel()
            {
                Username = "******"
            });
            _wordsRepo.Setup(repo => repo.GetFiveLetterWord()).Returns(new FiveLetterWordModel()
            {
                Word = "about"
            });
            _gameRepo.Setup(repo => repo.SaveChanges()).Returns(true);

            //Act
            int newGuesses = _gameService.CreateNewGameForUser("user").Guesses;

            //Assert.
            Assert.AreEqual(game.Guesses, newGuesses);
        }
コード例 #4
0
        public void GuessWordGameOver()
        {
            //prep auth
            string           username         = "******";
            GameSessionModel gameSessionModel = new GameSessionModel()
            {
                Guesses = 5, Score = 10
            };

            var mockContext = new Mock <HttpContext>(MockBehavior.Strict);

            mockContext.SetupGet(hc => hc.User.Identity.Name).Returns(username);
            _gameController.ControllerContext = new ControllerContext()
            {
                HttpContext = mockContext.Object
            };

            _gameService.Setup(gs => gs.RetrieveGameSessionModelByUsername(username))
            .Returns(gameSessionModel);
            _gameService.Setup(gs => gs.GameOver(gameSessionModel)).Returns(true);

            OkObjectResult result = _gameController.GuessWord(new GuessWriteDto()) as OkObjectResult;


            Assert.IsInstanceOfType(result, typeof(OkObjectResult));
            Assert.AreEqual("You've reached the maximum ammount of guesses please create a new game and try again." + $"\n You're score this game was {gameSessionModel.Score}", result.Value);
        }
コード例 #5
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        public void ServerBroadcastWeaponSwitched(string weaponName, string roomName)
        {
            GameSessionModel session = GameSessionManagerModel.Instance.GameSessionCollection.Find(m => m.Name == roomName);

            if (session != null)
            {
                PlayerInSessionModel playerInGame = session.PlayersInSession.Find(m => m.Player.ConnectionId == Context.ConnectionId);
                if (playerInGame != null)
                {
                    //TODO: move strings to Consts
                    switch (weaponName)
                    {
                    case "acorn":
                        playerInGame.CurrentWeapon = Weapons.Acorn;
                        break;

                    case "pineCone":
                        playerInGame.CurrentWeapon = Weapons.PineCone;
                        break;

                    default:
                        playerInGame.CurrentWeapon = Weapons.Acorn;
                        break;
                    }
                }
            }
        }
コード例 #6
0
        public int GetNewWordForGame(GameSessionModel currentgame)
        {
            int points = 0;

            switch (currentgame.Currentword.Length)
            {
            case 5:
                currentgame.Currentword = _wordsRepo.GetSixLetterWord().Word;
                points = 1;
                break;

            case 6:
                currentgame.Currentword = _wordsRepo.GetSevenLetterWord().Word;
                points = 3;
                break;

            case 7:
                currentgame.Currentword = _wordsRepo.GetFiveLetterWord().Word;
                points = 5;
                break;
            }

            currentgame.Score     = currentgame.Score + points;
            currentgame.Guesses   = 0;
            currentgame.LastGuess = DateTime.Now;
            _gameRepo.UpdateGameSession(currentgame);
            _gameRepo.SaveChanges();
            return(currentgame.Currentword.Length);
        }
コード例 #7
0
        public void IncreaseGuessTest()
        {
            GameSessionModel model = initObject();

            model.IncreaseGuess();
            Assert.AreEqual(model.Guesses, 1);
        }
コード例 #8
0
 public bool IncrementGuessCounter(GameSessionModel currentgame)
 {
     currentgame.IncreaseGuess();
     _gameRepo.UpdateGameSession(currentgame);
     _gameRepo.SaveChanges();
     return(GameOver(currentgame));
 }
コード例 #9
0
        private GameSessionModel initObject()
        {
            GameSessionModel model = new GameSessionModel();

            model.Guesses   = 0;
            model.LastGuess = DateTime.Now;
            return(model);
        }
コード例 #10
0
        public bool InTime(GameSessionModel currentgame)
        {
            bool intime = currentgame.GuessedIntime(DateTime.Now);

            currentgame.LastGuess = DateTime.Now;
            _gameRepo.UpdateGameSession(currentgame);
            _gameRepo.SaveChanges();
            return(intime);
        }
コード例 #11
0
        public bool GameOver(GameSessionModel currentgame)
        {
            bool over = currentgame.Guesses >= 5;

            if (over)
            {
                _highScoreService.AddNewHighScore(new HighScoreModel(currentgame.Score, currentgame.Player.Username));
            }
            return(over);
        }
コード例 #12
0
ファイル: gameController.cs プロジェクト: karmalegend/Lingo
        public IActionResult CreateNewGameSession()
        {
            GameSessionModel created = _gameService.CreateNewGameForUser(User.Identity.Name);

            if (created != null)
            {
                return(Ok(_mapper.Map <GameSessionDtoRead>(created)));
            }
            return(BadRequest());
        }
コード例 #13
0
        public void GuessWordHappyTest()
        {
            //prep auth
            string username = "******";

            GameSessionModel gameSession = new GameSessionModel()
            {
                Currentword = "word", Guesses = 3, LastGuess = DateTime.Now, Player = new UserModel(), Score = 5
            };

            GuessWriteDto guessWrite = new GuessWriteDto()
            {
                Guess = "word"
            };

            int newWordLength = 5;


            var mockContext = new Mock <HttpContext>(MockBehavior.Strict);

            mockContext.SetupGet(hc => hc.User.Identity.Name).Returns(username);
            _gameController.ControllerContext = new ControllerContext()
            {
                HttpContext = mockContext.Object
            };

            _gameService.Setup(gs => gs.RetrieveGameSessionModelByUsername(username)).Returns(gameSession);
            _gameService.Setup(gs => gs.GameOver(gameSession)).Returns(false);
            _gameService.Setup(gs => gs.InTime(gameSession)).Returns(true);
            _gameService.Setup(gs => gs.MatchingWordLengths(gameSession, "word")).Returns(true);
            _gameService.Setup(gs => gs.AttemptGuess(gameSession, guessWrite.Guess)).Returns(new List <List <char> >()
            {
                new List <char>()
                {
                    'a', 'a'
                }, new List <char>()
                {
                    'a', 'a'
                }
            });
            _gameService.Setup(gs => gs.CorrectGuess(new List <char>()
            {
                'a', 'a'
            })).Returns(true);
            _gameService.Setup(gs => gs.GetNewWordForGame(gameSession)).Returns(newWordLength);

            OkObjectResult result = _gameController.GuessWord(guessWrite) as OkObjectResult;


            Assert.IsInstanceOfType(result, typeof(OkObjectResult));
            Assert.AreEqual($"Congratulations you've correctly guessed the word! a new {newWordLength} letter word has been selected.", result.Value);
        }
コード例 #14
0
        public async Task <GameSessionModel> CreateGameSession(Guid invitationId, UserModel invitedBy, UserModel invitedPlayer)
        {
            var session = new GameSessionModel
            {
                User1      = invitedBy,
                User2      = invitedPlayer,
                Id         = invitationId,
                ActiveUser = invitedBy
            };

            _sessions.Add(session);
            return(session);
        }
コード例 #15
0
        public Task <GameSessionModel> CreateGameSession(Guid invitationId, UserModel invitedBy, UserModel invitedPlayer)
        {
            GameSessionModel session = new GameSessionModel
            {
                User1      = invitedBy,
                User2      = invitedPlayer,
                Id         = invitationId,
                ActiveUser = invitedBy
            };

            _sessions.Add(session);

            return(Task.FromResult(session));
        }
コード例 #16
0
ファイル: gameController.cs プロジェクト: karmalegend/Lingo
        public IActionResult GuessWord(GuessWriteDto guessWrite)
        {
            // verify if all valid preconditions are met
            GameSessionModel userGame = _gameService.RetrieveGameSessionModelByUsername(User.Identity.Name);

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }

            if (userGame == null)
            {
                return(Conflict("User doesn't currently have any game."));
            }
            string score = $"\n You're score this game was {userGame.Score}";

            if (_gameService.GameOver(userGame))
            {
                return(Ok("You've reached the maximum ammount of guesses please create a new game and try again." + score));
            }
            if (!_gameService.InTime(userGame))
            {
                if (_gameService.IncrementGuessCounter(userGame))
                {
                    return(Ok("You've waited too long your guess counter got incremented to the max ammount of guesses please create a new game" + score));
                }
                return(Ok("You've waited too long your guess counter has been incremented please try again."));
            }
            if (!_gameService.MatchingWordLengths(userGame, guessWrite.Guess))
            {
                return(Ok("Your guessed word and the current word do not match in length."));
            }

            //progress the actual guess verification here.
            List <List <char> > results = _gameService.AttemptGuess(userGame, guessWrite.Guess);

            if (_gameService.CorrectGuess(results[1]))
            {
                return(Ok($"Congratulations you've correctly guessed the word! a new {_gameService.GetNewWordForGame(userGame)} letter word has been selected."));
            }

            if (!_gameService.CorrectGuess(results[1]))
            {
                return(Ok(results));
            }

            return(BadRequest());
        }
コード例 #17
0
        public async Task <GameSessionModel> CreateGameSession(Guid invitationId, string invitedByEmail, string invitedPlayerEmail)
        {
            var invitedBy = await _UserService.GetUserByEmail(invitedByEmail);

            var invitedPlayer = await _UserService.GetUserByEmail(invitedPlayerEmail);

            GameSessionModel session = new GameSessionModel
            {
                User1      = invitedBy,
                User2      = invitedPlayer,
                Id         = invitationId,
                ActiveUser = invitedBy
            };

            _sessions.Add(session);
            return(session);
        }
コード例 #18
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        public void ServerBroadcastStartGameFromGameHub(string roomName)
        {
            GameSessionModel session = GameSessionManagerModel.Instance.GameSessionCollection.Find(m => m.Name == roomName);

            if (session == null)
            {
                return;
            }

            PlayerInSessionModel playerInGame = session.PlayersInSession.Find(m => m.Player.ConnectionId == Context.ConnectionId);

            if (playerInGame == null)
            {
                return;
            }

            session.Map[playerInGame.NextPosition.Column, playerInGame.NextPosition.Row].IsTileUncoveredByPlayer[playerInGame.Player.seatNumber - 1] = true;

            Clients.Caller.clientReceiveStartGame(playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber);
        }
コード例 #19
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        private void UpdateOtherPlayerPosition(GameSessionModel session, PlayerInSessionModel playerInGame, PlayerInSessionModel otherPlayer, int col, int row)
        {
            bool nextTileOtherPlayerUncovered = session.Map[col, row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1];
            bool prevTileOtherPlayerUncovered = session.Map[playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1];

            if (nextTileOtherPlayerUncovered)
            {
                if (!prevTileOtherPlayerUncovered)
                {
                    Clients.Client(otherPlayer.Player.ConnectionId).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer(playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, (.1));
                }
                else
                {
                    Clients.Client(otherPlayer.Player.ConnectionId).clientReceiveUpdateOtherPlayerPosition(playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber);
                }
            }
            else if (!nextTileOtherPlayerUncovered && prevTileOtherPlayerUncovered)
            {
                Clients.Client(otherPlayer.Player.ConnectionId).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer(playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, -.1);
            }
        }
コード例 #20
0
ファイル: GameServiceTest.cs プロジェクト: karmalegend/Lingo
        public void CreateNewGameForUserTestFromDb()
        {
            GameSessionModel game = new GameSessionModel()
            {
                Guesses = 0
            };

            _gameRepo.Setup(repo => repo.GetCurrentGame("username")).Returns(new GameSessionModel());
            _userService.Setup(service => service.GetUserByUsername("username"))
            .Returns(new UserModel()
            {
                Username = "******"
            });
            _wordsRepo.Setup(repo => repo.GetFiveLetterWord()).Returns(new FiveLetterWordModel()
            {
                Word = "about"
            });
            _gameRepo.Setup(repo => repo.SaveChanges()).Returns(true);

            Assert.AreEqual(game.Guesses, _gameService.CreateNewGameForUser("username").Guesses);
        }
コード例 #21
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        public void ServerBroadcastPlaceTurretOnMap(int col, int row, string roomName)
        {
            GameSessionModel session = GameSessionManagerModel.Instance.GameSessionCollection.Find(m => m.Name == roomName);

            if (session == null)
            {
                return;
            }

            PlayerInSessionModel playerInGame = session.PlayersInSession.Find(m => m.Player.ConnectionId == Context.ConnectionId);

            if (playerInGame == null)
            {
                return;
            }

            //TODO: temporary
            if (playerInGame.Player.seatNumber == 0)
            {
                return;
            }

            int tile = session.Map[col, row].Tile;

            //switch ((TileKind)tile)
            //{
            //	case TileKind.CoveredEmptyTile:
            //		{
            //			this.
            //		}
            //	case TileKind.UncoveredEmptyTile:
            //		{
            //			break;
            //		}
            //	default:
            //		{
            //			break;
            //		}
            //}
        }
コード例 #22
0
        /// <summary>
        /// method generates a new gameSession instance for the user,
        /// if they user has an existing session reset it to a new session.
        /// </summary>
        /// <param name="Username"></param>
        /// <returns>gameSessionModel</returns>
        public GameSessionModel CreateNewGameForUser(string Username)
        {
            // this is used to know wether we need to use the update or the add method as using the
            // add method with an existing session will cause a primary key duplicate.
            bool fromDb = true;

            GameSessionModel gameSession = _gameRepo.GetCurrentGame(Username);

            if (gameSession == null)
            {
                gameSession = new GameSessionModel();
                fromDb      = false;
            }

            gameSession.Player      = _userService.GetUserByUsername(Username);
            gameSession.Currentword = _wordsRepo.GetFiveLetterWord().Word;
            gameSession.Guesses     = 0;
            gameSession.LastGuess   = DateTime.Now;
            gameSession.Score       = 0;

            if (fromDb)
            {
                _gameRepo.UpdateGameSession(gameSession);
                _gameRepo.SaveChanges();
            }
            else
            {
                _gameRepo.AddGameSession(gameSession);
                _gameRepo.SaveChanges();
            }

            if (_gameRepo.SaveChanges())
            {
                return(gameSession);
            }

            return(null);
        }
コード例 #23
0
 Point three = new Point(142, 143); // bot
 public GameSession(Server server, int champ)
 {
     Champ  = champ;
     Port   = GetPort();
     Server = server;
     if (GameTimer != null)
     {
         GameTimer.Dispose();
     }
     GameTimerTry = 0;
     GameTimer    = new Timer(GameTimerCallback, null, 1000, Timeout.Infinite);
     Logger.Log("Waiting for game to start...");
     Server.SetInfoText("Waiting for game to start...");
     Server.SetIndicator(IndicatorStates.Wait);
     if (champ != 0)
     {
         items = Game.Champions.GetItems(champ);
     }
     if (GameState == null || GameState.Started == false)
     {
         GameState = new GameSessionModel();
     }
 }
コード例 #24
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        public void ServerBroadcastHealPlayer(string roomName)
        {
            GameSessionModel session = GameSessionManagerModel.Instance.GameSessionCollection.Find(m => m.Name == roomName);

            if (session == null)
            {
                return;
            }
            PlayerInSessionModel playerInGame = session.PlayersInSession.Find(m => m.Player.ConnectionId == Context.ConnectionId);

            if (playerInGame == null)
            {
                return;
            }

            //TODO: temporary
            if (playerInGame.Player.seatNumber == 0)
            {
                return;
            }

            if (playerInGame.UncoveredMines <= 0)
            {
                return;
            }

            int upperDmgLimit = (playerInGame.UncoveredMines * 10) + 10;
            int lowerDmgLimit = (playerInGame.UncoveredMines * 5) + 10;
            int healPoints    = this.random.Next(lowerDmgLimit, upperDmgLimit);

            playerInGame.Health += healPoints;
            playerInGame.UncoveredMines--;
            playerInGame.CurrentWeapon = Weapons.Acorn;

            Clients.Client(playerInGame.Player.ConnectionId).clientReceiveHealPlayer(healPoints, playerInGame.Health, playerInGame.UncoveredMines);
        }
コード例 #25
0
        public void GuessedIntimeTestOutOfTime()
        {
            GameSessionModel model = initObject();

            Assert.IsFalse(model.GuessedIntime(model.LastGuess.AddSeconds(11)));
        }
コード例 #26
0
        public void GuessedIntimeTestIntime()
        {
            GameSessionModel model = initObject();

            Assert.IsTrue(model.GuessedIntime(model.LastGuess.AddSeconds(5)));
        }
コード例 #27
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        private void UpdateOtherPlayerPosition( GameSessionModel session, PlayerInSessionModel playerInGame, PlayerInSessionModel otherPlayer, int col, int row )
        {
            bool nextTileOtherPlayerUncovered = session.Map[col, row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1];
            bool prevTileOtherPlayerUncovered = session.Map[playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row].IsTileUncoveredByPlayer[otherPlayer.Player.seatNumber - 1];

            if (nextTileOtherPlayerUncovered)
            {
                if (!prevTileOtherPlayerUncovered)
                {
                    Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer( playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, (.1) );
                }
                else
                {
                    Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition( playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber );
                }
            }
            else if (!nextTileOtherPlayerUncovered && prevTileOtherPlayerUncovered)
            {
                Clients.Client( otherPlayer.Player.ConnectionId ).clientReceiveUpdateOtherPlayerPosition_changeAlphaOtherPlayer( playerInGame.CurrentPosition.Column, playerInGame.CurrentPosition.Row, playerInGame.NextPosition.Column, playerInGame.NextPosition.Row, playerInGame.Player.seatNumber, -.1 );

            }
        }
コード例 #28
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        private TileKind PineConeHitsTile( int col, int row, PlayerInSessionModel player, GameSessionModel session, bool isMainPlayer )
        {
            //map
            // 0 = covered tile
            // 1 = uncovered tile
            // 2 = covered Mine tile
            // 3 = uncovered/destroyed Mine tile
            // 4 = uncovered/scored Mine tile
            // 5 = uncovered mine (not scored) uncovered by pineCone explosion
            // 6 = uncovered tile by pineCone explosion
            // 7 = coveredTurret
            // 8 = uncoveredTurret

            int tile = player.PrivateMap[col, row].Tile;
            TileKind result;

            switch ((TileKind)tile)
            {
                case TileKind.CoveredEmptyTile:
                    {
                        result = TileKind.UncoveredTileByPineConeExplosion;

                        if (isMainPlayer)
                        {
                            player.AmmoPoints += session.Map[col, row].Number;
                        }

                        break;
                    }
                case TileKind.UncoveredEmptyTile:
                    {
                        result = TileKind.UncoveredTileByPineConeExplosion;
                        break;
                    }
                case TileKind.CoveredMineTile:
                    {
                        result = TileKind.UncoveredMineByPineConeExplosionNotScored;
                        break;
                    }
                case TileKind.UncoveredDestroyedMineTile:
                    {
                        result = TileKind.UncoveredDestroyedMineTile;
                        break;
                    }
                case TileKind.UncoveredScoredMineTile:
                    {
                        result = TileKind.UncoveredScoredMineTile;
                        break;
                    }
                default:
                    {
                        result = TileKind.UncoveredEmptyTile;
                        break;
                    }
            }

            player.PrivateMap[col, row].Tile = (int)result;
            session.Map[col, row].IsTileUncoveredByPlayer[player.Player.seatNumber - 1] = true;

            return result;
        }
コード例 #29
0
ファイル: GameRepository.cs プロジェクト: karmalegend/Lingo
 public void UpdateGameSession(GameSessionModel gameSession)
 {
     _context.GameSessions.Update(gameSession);
 }
コード例 #30
0
ファイル: GameRepository.cs プロジェクト: karmalegend/Lingo
 public void AddGameSession(GameSessionModel gameSession)
 {
     _context.GameSessions.Add(gameSession);
 }
コード例 #31
0
 public bool MatchingWordLengths(GameSessionModel currentgame, string guessWord)
 {
     return(currentgame.Currentword.Length == guessWord.Length);
 }
コード例 #32
0
ファイル: Game.cs プロジェクト: Alanik/ColorFactory
        private void Shoot( PlayerInSessionModel playerInGame, PlayerInSessionModel opponent, Random rnd, GameSessionModel game )
        {
            int startCol = playerInGame.CurrentPosition.Column;
            int startRow = playerInGame.CurrentPosition.Row;
            int endCol = opponent.CurrentPosition.Column;
            int endRow = opponent.CurrentPosition.Row;

            if (playerInGame.AmmoPoints == 0)
            {
                playerInGame.IsShooting = false;
                RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler );

                playerInGame.ShootingQuarterSecondCounter = 0;
                Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerStopsShooting
            ( opponent.Player.seatNumber );
                return;
            }

            ArrayList tiles;

            if (ShootingPathIsClear( startCol, startRow, endCol, endRow, playerInGame.PrivateMap, out tiles ))
            {
                //TODO: move to separate class/module ie. (Damage Calculation Logic)

                int upperBaseDmgLimit = (playerInGame.UncoveredMines * 2) + 10;

                int upperDmgLimit = rnd.Next( 0, 9 ) == 9 ? upperBaseDmgLimit + rnd.Next( 1, upperBaseDmgLimit ) : upperBaseDmgLimit;
                int lowerDmgLimit = rnd.Next( 0, 2 ) == 0 ? 0 : (playerInGame.UncoveredMines * 2);

                int rndDamage = rnd.Next( lowerDmgLimit, upperDmgLimit );

                opponent.Health -= rndDamage;
                playerInGame.AmmoPoints -= 1;

                //TODO: temporary
                if (opponent.Health <= 0)
                {
                    game.EndGame = true;

                    PositionModel uncoveredBulletTile = GetUncoveredBulletTile( tiles, game.Map, playerInGame.UncoveredBulletTile, opponent.Player.seatNumber - 1 );

                    Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerShootsOtherPlayer( rndDamage, playerInGame.AmmoPoints, opponent.Player.seatNumber, string.Format( "Player {0} has won the game by destroying player {1}. Hail to the king! Congratz {0}.", playerInGame.Player.Name, opponent.Player.Name ) );
                    Clients.Client( opponent.Player.ConnectionId ).clientReceivePlayerGetsShotByOtherPlayer( rndDamage, opponent.Health, uncoveredBulletTile, string.Format( "Player {0} has won the game by destroying player {1}. Hail to the king! Congratz {0}.", playerInGame.Player.Name, opponent.Player.Name ) );

                    playerInGame.IsShooting = false;
                    RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler );
                }
                else
                {
                    PositionModel uncoveredBulletTile = GetUncoveredBulletTile( tiles, game.Map, playerInGame.UncoveredBulletTile, opponent.Player.seatNumber - 1 );

                    Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerShootsOtherPlayer( rndDamage, playerInGame.AmmoPoints, opponent.Player.seatNumber );
                    Clients.Client( opponent.Player.ConnectionId ).clientReceivePlayerGetsShotByOtherPlayer( rndDamage, opponent.Health, uncoveredBulletTile );
                }
            }
            else
            {
                playerInGame.IsShooting = false;
                RemoveShootingHandler( playerInGame.ShootingQuarterSecondCounter, playerInGame.playerShootingHandler );

                Clients.Client( playerInGame.Player.ConnectionId ).clientReceivePlayerStopsShooting
            ( opponent.Player.seatNumber );
            }
        }
コード例 #33
0
 public List <List <char> > AttemptGuess(GameSessionModel currentgame, string guessWord)
 {
     IncrementGuessCounter(currentgame);
     return(GuessVerifier.CheckResult(currentgame.Currentword, guessWord));
 }