2015-05-28 49 views
-5

我在YouTube上關注如何在Visual Studio C#中創建記憶遊戲,我得到的錯誤是標題中的一個人可以幫助我嗎?我真的需要它爲信息學項目在學校「'System.Drawing.Image'是'類型',但在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

在其中準確嗎? –

+4

你有一個錯字:'pic.Image =(Image).pic.Tag;' –

回答

3

在ClickImage方法你有一個額外.

將行:

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

隨着

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

http://imgur.com/5XJYnLz這裏有一個截圖 –

+0

這是因爲在你的設計器中你已經聲明瞭(也許是無意的)一個事件並且一個空體的方法已經添加到您的代碼中,然後您將其刪除,但該事件仍在您的設計器中註冊。您必須通過進入「表單」屬性將其刪除。我這次回答,但你應該提出另一個問題,因爲它是無關緊要的。 –

相關問題