我正在关注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();
}
}
}
答案 0 :(得分:3)
在ClickImage方法中,您有一个额外的.
替换行:
pic.Image = (Image).pic.Tag;
使用
pic.Image = (Image)pic.Tag;