예제 #1
0
        public PlayViewModel(DiceSite Site)
        {
            _site = Site;
            Bets  = new ObservableCollection <Bet>();

            BetHighCommand = new Command(async() =>
                                         await _site.PlaceBet(true, BetAmount, BetChance));

            BetLowCommand = new Command(async() =>
                                        await _site.PlaceBet(false, BetAmount, BetChance));

            MessagingCenter.Subscribe <DiceSite, decimal>(this, "updateBalance", (obj, val) =>
            {
                OnPropertyChanged(nameof(Amount));
            });

            MessagingCenter.Subscribe <DiceSite, Bet>(this, "addBet", (obj, bet) =>
            {
                Bets.Add(bet);
            });

            MessagingCenter.Subscribe <DiceSite, string>(this, "updateStatus", (obj, message) =>
            {
                Status = message;
            });
        }
예제 #2
0
        public async Task <int> Run(DiceSite Site)
        {
            var  currentAmount = _settings.BaseBet;
            bool bettingHigh   = true;

            if (_settings.BetOn == BetOnEnum.Low)
            {
                bettingHigh = false;
            }

            while (CanExecute(Site))
            {
                if (!await Site.PlaceBet(bettingHigh, currentAmount, _settings.Chance))
                {
                    // perdita
                    if (_settings.BetAction_OnLose == BetResultAction.ReturnToBase)
                    {
                        currentAmount = _settings.BaseBet;
                    }
                    if (_settings.BetAction_OnLose == BetResultAction.Increase)
                    {
                        currentAmount *= (_settings.IncreaseAmount_OnLose / 100m + 1);
                    }
                    if (_settings.BetAction_OnLose == BetResultAction.ChangeOdds)
                    {
                        _settings.BetOdds = _settings.NewOdd_OnLose;
                    }
                }
                else
                {
                    // vincita
                    if (_settings.BetAction_OnWin == BetResultAction.ReturnToBase)
                    {
                        currentAmount = _settings.BaseBet;
                    }
                    if (_settings.BetAction_OnWin == BetResultAction.Increase)
                    {
                        currentAmount *= (_settings.IncreaseAmount_OnWin / 100m + 1);
                    }
                    if (_settings.BetAction_OnWin == BetResultAction.ChangeOdds)
                    {
                        _settings.BetOdds = _settings.NewOdd_OnWin;
                    }
                }

                if (_settings.BetOn == BetOnEnum.Alternate)
                {
                    bettingHigh = !bettingHigh;
                }

                Refresh?.Invoke(this, EventArgs.Empty);
            }
            ;

            return(await Task <int> .FromResult(Site.wins - Site.losses));
        }