" '为System.Drawing.Image'是一种'类型'但用作变量' "在C#记忆游戏中

时间:2015-05-28 13:29:37

标签: c# memory

我正在关注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();
        }
    }












}

1 个答案:

答案 0 :(得分:3)

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

替换行:

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

使用

pic.Image = (Image)pic.Tag;