private static ThrowResult GetPlayerThrow()
        {
            ThrowResult output = (ThrowResult)(-1);
            bool        valid  = false;

            while (!valid)
            {
                Console.WriteLine("Choose throw: ");
                Console.WriteLine("1) Rock");
                Console.WriteLine("2) Paper");
                Console.WriteLine("3) Scissors");
                Console.Write("Input choice: ");

                if (InputIsValid(Console.ReadLine(), 1, 3, out int throwChoice))
                {
                    output = (ThrowResult)throwChoice - 1;
                    if (!EnumHelper.EnumValueIsValid(output))
                    {
                        throw new InvalidOperationException("Something is not quite right, You're throw wasn't found in the ThrowResult enum!");
                    }

                    valid = true;
                }
            }
            Console.WriteLine();
            Console.Clear();
            return(output);
        }
        private static void PlayRound(RockPaperScissors rockPaperScissors, ref int playerScore, ref int computerScore)
        {
            ThrowResult computerThrow = rockPaperScissors.GetComputerThrow();
            ThrowResult playerThrow   = GetPlayerThrow();

            Winner winner = rockPaperScissors.DetermineWinner(playerThrow, computerThrow);

            Console.WriteLine($"You threw: {Enum.GetName(playerThrow)}");
            Console.WriteLine($"The computer threw: {Enum.GetName(computerThrow)}");

            if (winner == Winner.Player1)
            {
                Console.WriteLine("You win this round!");
                playerScore++;
            }
            else if (winner == Winner.Player2)
            {
                Console.WriteLine("The computer won this round!");
                computerScore++;
            }
            else
            {
                Console.WriteLine("It's a tie!");
            }
        }
        public void PlayMatch()
        {
            var leg = new SinglePlayerLeg(126)

                      // Turn #1
                      .WithAdditionalThrow(ThrowResult.Triple(20))
                      .WithAdditionalThrow(ThrowResult.Double(20))
                      .WithAdditionalThrow(ThrowResult.Single(20))
                      // Score = 6

                      // Turn #2
                      .WithAdditionalThrow(ThrowResult.Outside)
                      .WithAdditionalThrow(ThrowResult.Outside)
                      .WithAdditionalThrow(ThrowResult.Outside)

                      // Turn #3. Bust! Not double!
                      .WithAdditionalThrow(ThrowResult.Triple(2))

                      // Turn #4. Bust! Too many!
                      .WithAdditionalThrow(ThrowResult.InnerBull)

                      // Turn #5. Bust! Can't leave 1.
                      .WithAdditionalThrow(ThrowResult.Single(5))

                      // Turn #6. Finished
                      .WithAdditionalThrow(ThrowResult.Double(3));

            Assert.AreEqual(6, leg.Turns.Count);
            Assert.AreEqual(0, leg.Score);
        }
Example #4
0
 public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
 {
     if (reader.TokenType != JsonToken.String)
     {
         throw new JsonSerializationException("ThrowResult should be string in json");
     }
     return(ThrowResult.Parse(reader.Value.ToString()));
 }
Example #5
0
 private async Task SendCurrentOppoThrow(RoomActor roomActor, ThrowResult throwResult)
 {
     foreach (var otherAU in roomActor.Room.RoomUsers
              .Where(ru => ru != roomActor).Select(ru => ru.ActiveUser))
     {
         await _masterHub.SendOrderedAsync(otherAU, "CurrentOppoThrow", throwResult);
     }
 }
Example #6
0
        public void NotFinish_IfBothPlayersHasNonZeroScore()
        {
            var leg = new Leg("id", 20);

            leg.AddThrow(ThrowResult.Single(10));
            Assert.IsFalse(leg.Finished);
            Assert.AreEqual(-1, leg.WinnerIndex);
        }
Example #7
0
        public void StartNewLeg_AfterLegFinished()
        {
            var match = new Match("1", new[] { "p1", "p2" }, 20, 2);

            match.AddThrow(ThrowResult.Double(10));
            match.AddThrow(ThrowResult.Double(10));
            Assert.AreEqual(2, match.Legs.Count);
            Assert.IsTrue(match.CurrentLeg.Finished);
        }
Example #8
0
        public void Finish_IfOnlyOneHasNonZeroScore()
        {
            var leg = new Leg("id", 20);

            leg.AddThrow(ThrowResult.Triple(20));             //0 bust!
            leg.AddThrow(ThrowResult.Double(10));             //1 finished
            Assert.IsTrue(leg.Finished);
            Assert.AreEqual(1, leg.WinnerIndex);
        }
Example #9
0
        private void GameView_OnThrowBegin(int xPos)
        {
            ThrowResult result = MyGame.GetThrowResult(xPos);

            GameSession.Scores += result.HitResult ? 1 : -1;
            ThrowResultDT resDT = new ThrowResultDT(result.Row, result.Column, result.HitResult);
            int           yPos  = result.Row == -1 ? 0 : (result.Row + 1) * FieldSettings.PictureHeight;

            this.GameView.AnimateBall(resDT, yPos);
        }
Example #10
0
    public void ForceThrow(ThrowResult throwResult)
    {
        IsPlayable = false; //redundant i think

        var card = HandCards.First(c => c.Front.Index == throwResult.ThrownCard);

        var throwSeq = DOTween.Sequence();

        var targetPoz = PlaceCard(card, throwSeq);

        ThrowBase(throwResult, animSeq: throwSeq, meetPoint: targetPoz);
    }
Example #11
0
        public void BeSerializable()
        {
            var turn = new Turn(301)
                       .WithAdditionalThrow(ThrowResult.Outside)
                       .WithAdditionalThrow(ThrowResult.Single(1))
                       .WithAdditionalThrow(ThrowResult.Double(2));
            var res = JsonConvert.SerializeObject(turn, new ThrowJsonConverter());

            Assert.AreEqual(@"{""Throws"":[""0"",""1"",""D2""],""ScoreBefore"":301,""ScoreAfter"":296,""Finished"":true,""Bust"":false}", res, res);
            var deserialized = JsonConvert.DeserializeObject <Turn>(res, new ThrowJsonConverter());

            Assert.AreEqual(turn, deserialized);
        }
Example #12
0
File: Oppo.cs Project: xAdamQ/Basra
    public async UniTask Throw(ThrowResult throwResult)
    {
        var randCard = HandCards.GetRandom();

        await randCard.AddFront(throwResult.ThrownCard);

        //check if call is awaitable and wait for it from the controller itself

        var throwSeq = DOTween.Sequence();

        var targetPoz = PlaceCard(randCard, throwSeq);

        ThrowBase(throwResult, throwSeq, targetPoz);
    }
Example #13
0
        public void ChangePlayer_AfterTurnFinished()
        {
            var match = new Match("1", new[] { "p1", "p2" }, 301, 2);

            match.AddThrow(ThrowResult.Single(1));
            match.AddThrow(ThrowResult.Single(2));
            match.AddThrow(ThrowResult.Single(3));
            // Player 1 turn is finished

            match.AddThrow(ThrowResult.Single(4));

            Assert.AreEqual(1, match.CurrentLeg.GetPlayerTurns(0).Count);
            Assert.AreEqual(1, match.CurrentLeg.GetPlayerTurns(1).Count);
        }
Example #14
0
        protected void ConvertAndSaveThrow(DetectedThrow detectedThrow,
                                           ThrowResult throwResult = ThrowResult.Ordinary)
        {
            var convertedThrow = new Throw(Game.PlayerOnThrow,
                                           detectedThrow.Sector,
                                           detectedThrow.Type,
                                           throwResult,
                                           (int)Game.PlayerOnThrow.GameData.ThrowNumber,
                                           detectedThrow.TotalPoints,
                                           detectedThrow.Poi,
                                           detectedThrow.ProjectionResolution);

            Game.Throws.Push(convertedThrow);
            Game.PlayerOnThrow.GameData.HandThrows.Add(convertedThrow);
        }
Example #15
0
 public Throw(Player player, Domain.Game game, int sector, ThrowType type, ThrowResult result,
              int number, int points, PointF poi, int projectionResolution, int id = -1)
 {
     Id     = id;
     Player = player;
     Game   = game;
     Sector = sector;
     Type   = type;
     Result = result;
     Number = number;
     Points = points;
     Poi    = poi;
     ProjectionResolution = projectionResolution;
     TimeStamp            = DateTime.Now;
 }
Example #16
0
        protected Throw ConvertAndSaveThrow(DetectedThrow thrw, ThrowResult throwResult)
        {
            var dbThrow = new Throw(PlayerOnThrow,
                                    Game,
                                    thrw.Sector,
                                    thrw.Type,
                                    throwResult,
                                    PlayerOnThrow.ThrowNumber,
                                    thrw.TotalPoints,
                                    thrw.Poi,
                                    thrw.ProjectionResolution);

            dbService.ThrowSaveNew(dbThrow);
            return(dbThrow);
        }
Example #17
0
    protected void ThrowBase(ThrowResult result, Sequence animSeq = null,
                             Vector2?meetPoint = null)
    {
        AudioManager.I.PlayIfSilent(throwClip);
        animSeq ??= DOTween.Sequence();

        var card = HandCards.First(c => c.Front != null && c.Front.Index == result.ThrownCard);

        Ground.I.Throw(card, result.EatenCardsIds, animSeq, meetPoint);
        var count = result.EatenCardsIds?.Count ?? 0;

        HandCards.Remove(card);
        OrganizeHand();
        CoreGameplay.I.NextTurn();
    }
Example #18
0
        public void BeSerializable()
        {
            var match = new Match("1", new[] { "p1", "p2" }, 20, 2);

            match.AddThrow(ThrowResult.Double(10));
            match.AddThrow(ThrowResult.Double(10));

            var text = JsonConvert.SerializeObject(match, Formatting.Indented, new ThrowJsonConverter());

            Console.WriteLine(text);
            var deserializedMatch = JsonConvert.DeserializeObject <Match>(text, new ThrowJsonConverter());
            var text2             = JsonConvert.SerializeObject(deserializedMatch, Formatting.Indented, new ThrowJsonConverter());

            Console.WriteLine(text2);
            Assert.AreEqual(text, text2);
        }
Example #19
0
        public void BeSerializable()
        {
            var leg = new Leg("1", 20);

            leg.AddThrow(ThrowResult.Single(10));            //#1
            leg.AddThrow(ThrowResult.Triple(20));            //#1 bust!
            leg.AddThrow(ThrowResult.Double(10));            //#2 finished

            var text = JsonConvert.SerializeObject(leg, Formatting.Indented, new ThrowJsonConverter());

            Console.WriteLine(text);
            var deserialized = JsonConvert.DeserializeObject <Leg>(text, new ThrowJsonConverter());
            var text2        = JsonConvert.SerializeObject(deserialized, Formatting.Indented, new ThrowJsonConverter());

            Console.WriteLine(text2);
            Assert.AreEqual(text, text2);
        }
Example #20
0
        private static IEmote GetEmoji(ThrowResult throwResult)
        {
            if (!EnumHelper.EnumValueIsValid(throwResult))
            {
                throw new ArgumentException("Argument is invalid.", nameof(throwResult));
            }

            switch (throwResult)
            {
            case ThrowResult.Rock:
                return(new Emoji("🪨"));

            case ThrowResult.Paper:
                return(new Emoji("🧻"));

            case ThrowResult.Scissors:
                return(new Emoji("✂️"));

            default:
                return(new Emoji("❓"));
            }
        }
        public ThrowResult GetThrowFromString(string stringThrow)
        {
            ThrowResult playerThrow = ThrowResult.Invalid;

            switch (stringThrow)
            {
            case "rock":
                playerThrow = ThrowResult.Rock;
                break;

            case "paper":
                playerThrow = ThrowResult.Paper;
                break;

            case "scissors":
                playerThrow = ThrowResult.Scissors;
                break;

            default:
                playerThrow = ThrowResult.Invalid;
                break;
            }
            return(playerThrow);
        }
Example #22
0
 public void ForcePlay(ThrowResult throwResult)
 {
     MyPlayer.ForceThrow(throwResult);
 }
        public Winner DetermineWinner(ThrowResult player1Result, ThrowResult Player2Result)
        {
            Winner winner = (Winner)(-1);

            if (!EnumHelper.EnumValueIsValid(player1Result))
            {
                throw new ArgumentException("Argument is invalid.", nameof(player1Result));
            }
            if (!EnumHelper.EnumValueIsValid(Player2Result))
            {
                throw new ArgumentException("Argument is invalid.", nameof(Player2Result));
            }

            switch (player1Result)
            {
            case ThrowResult.Rock:
                switch (Player2Result)
                {
                case ThrowResult.Rock:
                    winner = Winner.Tie;
                    break;

                case ThrowResult.Paper:
                    winner = Winner.Player2;
                    break;

                case ThrowResult.Scissors:
                    winner = Winner.Player1;
                    break;

                default:
                    break;
                }
                break;

            case ThrowResult.Paper:
                switch (Player2Result)
                {
                case ThrowResult.Rock:
                    winner = Winner.Player1;
                    break;

                case ThrowResult.Paper:
                    winner = Winner.Tie;
                    break;

                case ThrowResult.Scissors:
                    winner = Winner.Player2;
                    break;

                default:
                    break;
                }
                break;

            case ThrowResult.Scissors:
                switch (Player2Result)
                {
                case ThrowResult.Rock:
                    winner = Winner.Player2;
                    break;

                case ThrowResult.Paper:
                    winner = Winner.Player1;
                    break;

                case ThrowResult.Scissors:
                    winner = Winner.Tie;
                    break;

                default:
                    break;
                }
                break;

            default:
                break;
            }

            if (!EnumHelper.EnumValueIsValid(winner))
            {
                throw new InvalidOperationException("Winner value not valid");
            }

            return(winner);
        }
Example #24
0
        public async static Task RPSProcessor(Cacheable <IUserMessage, ulong> cachedEntity, ISocketMessageChannel channel, SocketReaction reaction)
        {
            var message      = (SocketUserMessage)cachedEntity.Value;
            var reactingUser = (SocketUser)reaction.User;

            if (reactingUser.IsBot || message == null)
            {
                return;
            }

            if (message.Content.StartsWith("Game over: "))
            {
                if (message.Reactions.ContainsKey(new Emoji("❗")))
                {
                    await message.ModifyAsync(x => x.Content = "Choose Rock, Paper, or Scissors!");

                    await message.RemoveAllReactionsAsync();

                    IEmote[] rpsReactions = new IEmote[]
                    {
                        new Emoji("🪨"),
                        new Emoji("🧻"),
                        new Emoji("✂️"),
                        new Emoji("❗"),
                    };

                    await message.AddReactionsAsync(rpsReactions);
                }
            }

            if (message.Content == "Choose Rock, Paper, or Scissors!")
            {
                var    reactions     = message.Reactions;
                IEmote usersReaction = null;

                foreach (var r in reactions)
                {
                    if (r.Value.ReactionCount > 1)
                    {
                        usersReaction = r.Key;
                    }
                }

                ThrowResult playerThrow = (ThrowResult)(-1);
                if (usersReaction.Name == "🪨")
                {
                    playerThrow = ThrowResult.Rock;
                }
                else if (usersReaction.Name == "🧻")
                {
                    playerThrow = ThrowResult.Paper;
                }
                else if (usersReaction.Name == "✂️")
                {
                    playerThrow = ThrowResult.Scissors;
                }
                else
                {
                    return;
                }

                ThrowResult computerThrow = EnumHelper.RandomEnumValue <ThrowResult>();
                var         winner        = DetermineWinner(computerThrow, playerThrow);

                string outputMessage = "Game over: ";
                if (winner == Winner.Bot)
                {
                    outputMessage += $"{ message.Author.Mention } *won* by throwing { GetEmoji(computerThrow) } against { usersReaction.Name}!";
                }
                else if (winner == Winner.Player)
                {
                    outputMessage += $"{ reactingUser.Mention } *won* by throwing { usersReaction.Name} against { GetEmoji(computerThrow) }!";
                }
                else
                {
                    outputMessage += $"It's a tie! { GetEmoji(computerThrow)} vs { GetEmoji(playerThrow) }!";
                }

                await message.ModifyAsync(msg => msg.Content = outputMessage);
            }
        }
Example #25
0
        public void Parse(string input, int expectedSector, SectionArea expedtedMultiplier)
        {
            var t = ThrowResult.Parse(input);

            Assert.AreEqual(new ThrowResult(expectedSector, expedtedMultiplier), t);
        }
Example #26
0
 public void ValidateInput(string input, bool expectedIsValid)
 {
     Assert.AreEqual(expectedIsValid, ThrowResult.IsValid(input));
 }
Example #27
0
 public void MyThrowResult(ThrowResult throwResult)
 {
     MyPlayer.MyThrowResult(throwResult);
 }
Example #28
0
 public void MyThrowResult(ThrowResult result)
 {
     ThrowBase(result);
 }
Example #29
0
 public async UniTask CurrentOppoThrow(ThrowResult throwResult)
 {
     await((IOppo)PlayerInTurn).Throw(throwResult);
 }