-1

我正在制作一个鼹鼠游戏,我不能使用 MVVM,我正在随机出现一个随机的鼹鼠图像但是当我开始游戏时,会出现一个或两个鼹鼠,这不是该代码的一部分(我有它,所以当你点击一个痣时,它会消失,如果点击这些不需要的痣不会消失)。谢谢您的帮助!我已经添加了我所有的 Grid Population 代码,这可能就是问题所在。

在此处输入图像描述

代码:

    private void PopulateGrid()
            {
                MoleChanges = TUtils.GetIniInt(Moleini, "MoleChangeTimes", "AmountofChanges", 50);
                ImageSize = TUtils.GetIniInt(Moleini, "ImageSize", "imageSize", 10);
                NumofImages = TUtils.GetIniInt(Moleini, "NumPictures", "pictures", 8);
                int ImageBorderSize = TUtils.GetIniInt(Moleini, "ImageBorder", "imageBorder", 2);
                NumberOfColumns = TUtils.GetIniInt(Moleini, "NumRowsColumns", "columnNum", 4);
                ImageHeight = ImageSize * 0.7;

                // More Columns than Rows \\
                if (NumberOfColumns > NumofImages)
                {
                    MessageBox.Show("There is something wrong with the .ini file.");
                    MainWin.Close();
                }

                // Math - Get Necessary Variables \\
                int ColumnSize = (ImageSize + (2 * ImageBorderSize));
                int RowSize = (ImageSize + (2 * ImageBorderSize));
                NumberofRows = (int)Math.Ceiling(NumofImages / NumberOfColumns);
                int MainWindowWidth = (TUtils.ToInt(NumberOfColumns.ToString(), 2) * ColumnSize) + 15;
                int MainWindowHeight = (NumberofRows * RowSize) + 200;

                // Set Window Size \\
                MainWin.Width = MainWindowWidth;
                MainWin.Height = MainWindowHeight;

                // Create Grid \\
                Content_Grid.Children.Add(grid_Main);
                grid_Main.Height = MainWindowHeight;
                grid_Main.Width = MainWindowWidth;
                grid_Main.Background = Brushes.Transparent;

                // Grid Properties \\
                for (int i = 0; i < NumberOfColumns; i++)
                {
                    ColumnDefinition newColumn = new ColumnDefinition();
                    newColumn.Width = new GridLength(ColumnSize, GridUnitType.Pixel);
                    grid_Main.ColumnDefinitions.Add(newColumn);
                }

                for (int i = 0; i < NumberofRows; i++)
                {
                    RowDefinition Row = new RowDefinition();
                    Row.Height = new GridLength(RowSize, GridUnitType.Pixel);
                    grid_Main.RowDefinitions.Add(Row);
                }

                // Fill Grid \\
                int RowCount = 0;
                int ColumnCount = 0;
                for (int i = 0; i <= NumofImages; i++)
                {
                    Image newImage = HoleImage();
                    if (RowCount < NumberofRows)
                    {
                        if (ColumnCount < NumberOfColumns)
                        {
                            Console.WriteLine("ColumnCount: " + ColumnCount.ToString());
                            Grid.SetRow(newImage, RowCount);
                            Grid.SetColumn(newImage, ColumnCount);
                            grid_Main.Children.Add(newImage);
                            ColumnCount++;
                        }

                        else
                        {
                            RowCount++;
                            ColumnCount = 0;
                            Grid.SetRow(newImage, RowCount);
                            Grid.SetColumn(newImage, ColumnCount);
                            grid_Main.Children.Add(newImage);
                            ColumnCount++;
                            Console.WriteLine("RowCount: " + RowCount.ToString());
                        }
                    }

                    else
                    {
                        break;
                    }

                    ChangeImage();
                }


            }

    // Create Image for "Hut" \\
            private Image HoleImage()
            {
                // Initialize Image \\
                Image newImage = new Image();

                // Image Properties \\
                newImage.Width = ImageSize;
                newImage.Height = ImageHeight;

                // Define Name and Content \\
                newImage.Name = "Image";
                String ImageFunction = TUtils.GetIniString(Moleini, "ImagePath", "Hole", Root + "hole.jpg");
                if (File.Exists(ImageFunction))
                {
                    newImage.Source = new BitmapImage(new Uri(ImageFunction));
                }
                else
                {
                    MessageBox.Show("Cannot find " + ImageFunction + ".", "Please fix the ini file");
                }

                return newImage;
            }

// Change Image from "Hut" to Mole \\
        private void ChangeImage()
        {
                Image newImage = HoleImage();
                molePopup = MoleImage();
                int numCol = Convert.ToInt32(NumberOfColumns);
                //Random Number - Col
                Random randomColumns = new Random();
                int ranCol = randomColumns.Next(1, numCol);
                //Random Number - Row
                Random randomRow = new Random();
                int ranRow = randomRow.Next(1, NumberofRows);
                string Moleimage = TUtils.GetIniFileString(Moleini, "ImagePath", "PictureFile", Root + "mole2.png");
                //Populate Grid with Mole at Random Times \\
                Grid.SetRow(molePopup, ranRow);
                Grid.SetColumn(molePopup, ranCol);
                grid_Main.Children.Add(molePopup);

                molePopup.MouseUp += new MouseButtonEventHandler((o, e) =>
                {
                    MolePoints++;
                    grid_Main.Children.Remove(molePopup);
                });
        }
4

1 回答 1

1

在快速阅读完我的直觉后,您的 ChangeImage() 方法在每次通过网格时都会被调用,从而导致“随机”单元格被“痣”。

至于单击不起作用,我没有 VS 手,所以不能 100% 这样做,但是当你将 molePopup 传递给 grid_Mail.Children.Add 时,它可能作为值参数传递,这意味着你的 MouseUp 处理程序是当对象“复制”到网格时实际上并不存在。

于 2013-05-29T18:08:18.347 回答