Ejemplo n.º 1
0
        private static void UpdateFromGameState(UpdateRequest state)
        {
            Players.Clear();
            Players.AddRange(state.Players);

            LightPlayer lightPlayer = Players[Player.ID];

            if (lightPlayer.Deaths != Player.Deaths)
            {
                Player.Deaths = lightPlayer.Deaths;
                Sounds.PlayShort("pop");
            }
            if (lightPlayer.Score != Player.Score)
            {
                Player.Score = lightPlayer.Score;
                Sounds.PlayShort("tic");
            }

            Player.HasRespawned = lightPlayer.HasRespawned;
            if (lightPlayer.ReSpawn)
            {
                Respawn();
                Player.HasRespawned = true;
            }

            if (state.Shots == null)
            {
                return;
            }
            for (int i = 0; i < state.Shots.Length; ++i)
            {
                LightShot shot = state.Shots[i];
                if (ShotLog.Contains(shot.ID))
                {
                    continue;
                }
                ShotLog.Add(shot.ID);
                Sounds.PlayShort("shot");

                Color       color = new Color(255, 220, 200, 255);
                VertexArray line  = new VertexArray(PrimitiveType.Lines);
                line.Append(new Vertex(
                                Geometry.AdaptPoint(new Vector2f(shot.Origin.X, shot.Origin.Y)),
                                color
                                ));
                line.Append(new Vertex(
                                Geometry.AdaptPoint(new Vector2f(shot.Dest.X, shot.Dest.Y)),
                                color
                                ));
                Screen.Echoes.Add(line);
            }
        }
        public void HandleHitResponse(GameResponse gameResponse = null)
        {
            if (gameResponse == null)
            {
                return;
            }

            GameResponse response = gameResponse == null?dummy.GetHitResponseDummyData() : gameResponse;

            ShotLog shotLog = new ShotLog()
            {
                coordinate = gameResponse.coordinates,
                hit        = gameResponse.hit
            };

            StaticResources.log.shotLog.Add(shotLog);

            Player player = StaticResources.PlayerList.Where(p => p.PlayerId == response.playerId).FirstOrDefault();

            string newstring = _placeholderShotReponse.Replace("{player}", player.name)
                               .Replace("{field}", response.coordinates.field.ToString())
                               .Replace("{row}", response.coordinates.row.ToString())
                               .Replace("{col}", response.coordinates.col.ToString())
                               .Replace("{hit}", response.hit ? "landed a hit" : "missed");

            WriteMessageToLog(newstring);

            if (player.PlayerId == StaticResources.user.PlayerId)
            {
                if (response.hit == true) //highscore bijhouden
                {
                    StaticResources.records.hits += 1;
                    StaticResources.records.currenctHitStreak += 1;
                    if (StaticResources.records.currenctHitStreak > StaticResources.records.highestHitStreak)
                    {
                        StaticResources.records.highestHitStreak = StaticResources.records.currenctHitStreak;
                    }
                }
                else
                {
                    StaticResources.records.currenctHitStreak = 0;
                }
            }

            // start gameover function if player is gameover
            if (response.gameOver)
            {
                HandleGameOver(response.senderId);
            }
        }
        private void HandleGameOver(int playerId, IPlayerField field = null)
        {
            var player = StaticResources.PlayerList.FirstOrDefault(Speler => Speler.PlayerId == playerId);

            string logEntry = "All boats of {player} have been destroyed";

            logEntry = logEntry.Replace("{player}", player.name);
            WriteMessageToLog(logEntry);

            player.GameOver = true;

            CheckforHighscoreUpdate(player);

            if (field != null)
            {
                // display all boats in field as sunk
                // store all ship coordinates as GameResponse hit = true

                foreach (var boat in field.boats)
                {
                    foreach (var coordinate in boat.coordinates)
                    {
                        ShotLog shotLog = new ShotLog()
                        {
                            coordinate = coordinate,
                            hit        = true
                        };

                        StaticResources.log.shotLog.Add(shotLog);
                    }
                }
            }

            int count = StaticResources.PlayerList.Where(p => p.GameOver == false).Count();

            if (count == 1)
            {
                TimerHandler.ResetHandler();
                player = StaticResources.PlayerList.FirstOrDefault(Speler => Speler.GameOver == false);
                StaticResources.log.winner = player.name;

                string message = player.name + " has won the game";
                WriteMessageToLog(message);
                CheckforHighscoreUpdate(player);
            }
        }