【问题标题】:" 'System.Drawing.Image' is a 'type' but is used like a 'variable' " in C# memory game [closed]“'System.Drawing.Image'是一种'类型',但在C#记忆游戏中被用作'变量'”[关闭]
【发布时间】:2015-08-11 01:06:58
【问题描述】:

我正在关注 YouTube 上关于如何在 Visual Studio C# 中创建记忆游戏的教程,我得到的唯一错误是标题中的错误,有人可以帮助我吗?我真的需要它用于学校的信息学项目

using Memory_Game.Properties;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Memory_Game
{
    public partial class Form1 : Form
    {
        private bool _allowClick = true;
        private PictureBox _firstGuess;
        private readonly Random _random = new Random();
        private readonly Timer _clickTimer = new Timer();
        int ticks = 30;
        readonly Timer timer = new Timer { Interval = 1000 };

        public Form1()
        {
            InitializeComponent();
            SetRandomImages();
            HideImages();
            StartGameTimer();
            _clickTimer.Interval = 1000;
            _clickTimer.Tick += _clickTimer_Tick;
        }

        private PictureBox [] PictureBoxes
        {
            get { return Controls.OfType<PictureBox>().ToArray(); }
        }

        private static IEnumerable<Image> Images
        {
            get
            {
                return new Image[]
                {
                    Memory_Game.Properties.Resources.img1,
                    Memory_Game.Properties.Resources.img2,
                    Memory_Game.Properties.Resources.img3,
                    Memory_Game.Properties.Resources.img4,
                    Memory_Game.Properties.Resources.img5,
                    Memory_Game.Properties.Resources.img6,
                    Memory_Game.Properties.Resources.img7,
                    Memory_Game.Properties.Resources.img8

                };
            }
        }

        private void StartGameTimer()
        {
            timer.Start();
            timer.Tick += delegate
            {
                ticks--;
                if (ticks == -1)
                {
                    timer.Stop();
                    MessageBox.Show("Time's up.", "Memory Game", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    ResetImages();
                }
                var time = TimeSpan.FromSeconds(ticks);
                lblTime.Text = "00:" + time.ToString("ss");
            };
        }

        private void ResetImages()
        {
            foreach (var pic in PictureBoxes)
            {
                pic.Tag = null;
                pic.Visible = true;
            }
            HideImages();
            SetRandomImages();
            ticks = 30;
            timer.Start();
        }

        private void HideImages()
        {
            foreach (var pic in PictureBoxes)
            {
                pic.Image = Resources.img0;
                //pic.Image = (Image).pic.Tag; 
            }
        }

        private PictureBox GetFreeSlot()         ///functie ca imaginea sa apara de maxim 2 ori, nu de 3 sau asa
        {
            int num;
            do
            {
                num = _random.Next(0, PictureBoxes.Count());
            }
            while (PictureBoxes[num].Tag != null);
            return PictureBoxes[num];
        }


        private void SetRandomImages()
        {
            foreach (var image in Images)
            {
                GetFreeSlot().Tag = image;
                GetFreeSlot().Tag = image;
            }
        }


        private void ClickImage(object sender, EventArgs e)
        {
            if (!_allowClick)
                return;
            var pic = (PictureBox)sender;
            if (_firstGuess == null)
            {
                _firstGuess = pic;
                pic.Image = (Image)pic.Tag;
                return;
            }
            pic.Image = (Image).pic.Tag;
            if(pic.Image == _firstGuess.Image && pic != _firstGuess)
            {
                pic.Visible = _firstGuess.Visible = false;
                {
                    _firstGuess = pic;
                }
                HideImages();
            }
            else
            {
                _allowClick = false;
                _clickTimer.Start();
            }
            _firstGuess = null;
            if (PictureBoxes.Any(p => p.Visible)) return;
            MessageBox.Show("Ati Castigat !", "Memory Game", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
            ResetImages();

        }

        private void _clickTimer_Tick(object sender, EventArgs e)
        {
            HideImages();
            _allowClick = true;
            _clickTimer.Stop();
        }
    }












}

【问题讨论】:

  • 究竟在哪一行?

标签: c# memory


【解决方案1】:

在 ClickImage 方法中你有一个额外的.

换行:

pic.Image = (Image).pic.Tag;

pic.Image = (Image)pic.Tag;

【讨论】:

  • imgur.com/5XJYnLz 这是截图
  • 这是因为在您的设计器中,您已声明(可能是无意的)一个事件和一个带有空主体的方法已添加到您的代码中,然后您将其删除,但该事件仍在您的设计器中注册。您必须通过进入表单属性来删除它。我这次回答了,但你应该问另一个问题,因为它离题了。
猜你喜欢
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 2016-10-17
  • 2020-03-14
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多