private void StartBtn_Click(object sender, RoutedEventArgs e) { if (context.Rewards.Max(x => x.Quantity) <= 0) { MessageBox.Show(this, "Sorry! there are no remaining rewards.", "Warning!", MessageBoxButton.OK, MessageBoxImage.Warning); return; } int CurrentWheelPint, RotateCount, StopPoint = 0; SettingsBtn.IsEnabled = StartBtn.IsEnabled = false; RotateCount = random.Next(1, 50); Reward reward = null; while (reward == null) { reward = GetRwardByChance(context.Rewards.ToList()); GetRewardPosetions(reward, out int Min, out int Max); if (reward.Posetion == 1) { StopPoint = random.Next(random.Next(0, Min) + 1, random.Next(339, Max) + 1) + 1; while (this.GetReward(StopPoint) != reward) { StopPoint = random.Next(random.Next(0, Min) + 1, random.Next(339, Max) + 1) + 1; } } else { StopPoint = random.Next(Min, Max) + 1; } } reward.Quantity--; context.SaveChanges(); CurrentWheelPint = 0; int StopTotalPoints = (360 * RotateCount) + StopPoint + RotateCount; for (int i = 0; i < StopTotalPoints; i++) { var par = Dispatcher.Invoke((Action <int>)((CurI) => { if (CurrentWheelPint < 360) { CurrentWheelPint++; } else { //CurrentRotateNo++; CurrentWheelPint = 0; } int CurrentAngle = CurrentWheelPint; WheelTrans.Angle = Reward1.Angle = CurrentAngle; CurrentAngle += 45; Reward2.Angle = CurrentAngle; CurrentAngle += 45; Reward3.Angle = CurrentAngle; CurrentAngle += 45; Reward4.Angle = CurrentAngle; CurrentAngle += 45; Reward5.Angle = CurrentAngle; CurrentAngle += 45; Reward6.Angle = CurrentAngle; CurrentAngle += 45; Reward7.Angle = CurrentAngle; CurrentAngle += 45; Reward8.Angle = CurrentAngle; this.UpdateLayout(); }), DispatcherPriority.Background, i);//Background ContextIdle /* * var task = Task.Factory.StartNew(() =>//o => * { * * //Thread.Sleep(10); * }); */ } this.UpdateLayout(); SettingsBtn.IsEnabled = StartBtn.IsEnabled = true; MessageBox.Show(this, "Congratulations! You won " + reward.ItemName + "!", "You won!", MessageBoxButton.OK, MessageBoxImage.Information); }
public void GetRewardPosetions(Reward reward, out int Min, out int Max) { switch (reward.Posetion) { case 1: { Min = 23; Max = 360; break; } case 8: { Min = 24; Max = 68; break; } case 7: { Min = 69; Max = 113; break; } case 6: { Min = 114; Max = 158; break; } case 5: { Min = 159; Max = 203; break; } case 4: { Min = 203; Max = 248; break; } case 3: { Min = 249; Max = 293; break; } case 2: { Min = 294; Max = 338; break; } default: { Min = 0; Max = 360; break; } } }