首页 > 解决方案 > 如何在老虎机 C# 中随机化图像

问题描述

所以我正在用 C# 制作老虎机。我对 C# 真的很陌生,而且我真的很不擅长。到目前为止,我的项目进展顺利。但是现在我想在单击“旋转”按钮时随机显示显示的图像。

我尝试了很多不同的东西。我找到的解决方案要么是使用 PictureBox,要么与我正在研究的没有什么关系。

如果有人可以查看我的代码并将我推向正确的方向,我将非常感激。

提前致谢!

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;

namespace Prb.Slot.Machine.Wpf
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {

        int CoinInsert = 0;

        private static Random random;

        public enum SlotMachineIcon
        {
            Banana,
            BigWin,
            Cherry,
            Lemon,
            Orange,
            Plum,
            Seven,
            Strawberry,
            Watermelon
        }

        public MainWindow()
        {
            InitializeComponent();
        }

        private static void Init()
        {
            if (random == null) random = new Random();
        }
        public static int Random(int min, int max)
        {
            Init();
            return random.Next(min, max);
        }

        void UpdateImage(Image wpfImage, SlotMachineIcon newIcon)
        {

            DirectoryInfo directoryInfo = new DirectoryInfo(Environment.CurrentDirectory);
            directoryInfo = new DirectoryInfo(directoryInfo.Parent.Parent.Parent.Parent.FullName);
            Uri uri = new Uri($"{directoryInfo.FullName}/images/{newIcon}.png");
            wpfImage.Source = new BitmapImage(uri);
        }


        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            lblCoinsInserted.Content = 0;
            lblCoinBalance.Content = 0;
            lblCoinsWon.Content = 0;

            UpdateImage(imgLeft, SlotMachineIcon.Cherry);
            UpdateImage(imgMiddle, SlotMachineIcon.Banana);
            UpdateImage(imgRight, SlotMachineIcon.Seven);

        }

        private void btnInsertCoins_Click(object sender, RoutedEventArgs e)
        {
            
            int.TryParse(txtInsertCoins.Text, out int InsertCoins);

            if (InsertCoins > 0)
            {
                CoinInsert += int.Parse(txtInsertCoins.Text.ToString());
                lblCoinBalance.Content = (int)lblCoinBalance.Content + Convert.ToInt32(txtInsertCoins.Text);
                lblCoinsInserted.Content = CoinInsert;
                txtInsertCoins.Clear();
            }
            else
            {
                MessageBox.Show("Gelieve strikt positieve getallen in te vullen", "Ongeldig aantal munten", MessageBoxButton.OK, MessageBoxImage.Warning);
                txtInsertCoins.Clear();
            }
        }

        private void btnSpin_Click(object sender, RoutedEventArgs e)
        {
            int InsertedCoins = Convert.ToInt32(lblCoinsInserted.Content);
            int CoinsBalance = Convert.ToInt32(lblCoinBalance.Content);

            /*var v = Enum.GetValues(typeof(SlotMachineIcon));
            int number = random.Next(10);*/

            if (InsertedCoins == 0 | CoinsBalance == 0)
            {
                MessageBox.Show("Gelieve eerst munten in te werpen", "Geen munten ingeworpen", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
            else
            {
                lblCoinBalance.Content = CoinsBalance -  1;

                UpdateImage(imgLeft, SlotMachineIcon.Strawberry);
                UpdateImage(imgMiddle, SlotMachineIcon.Watermelon);
                UpdateImage(imgRight, SlotMachineIcon.Watermelon);

            }
        }


    }
}

标签: c#wpf

解决方案


编辑:像@EmondErno 指出的那样移出随机声明。

每次调用此方法时都会返回一个随机图标:

private Random random = new();

private SlotMachineIcon GetRandomIcon()
{
    return (SlotMachineIcon)random.Next(10); //don't forget to update this number if you add or remove icons
}

然后在每个 UpdateImage 方法中调用它,例如:

UpdateImage(imgLeft, GetRandomIcon());
UpdateImage(imgMiddle, GetRandomIcon());
UpdateImage(imgRight, GetRandomIcon());

推荐阅读