我是C#的新手,但我有很多Java经验,所以我被告知C#很容易理解。
到目前为止。目前,我想做一个简单的TicTacToe作为练习的一部分。但是,我想要做的是绘制可以引用的可点击方块,这样我就可以检查是否已经点击了该框。
我目前正在使用Visual Studio Express 2012.我正在为桌面使用制作Windows窗体应用程序。
我四处寻找解决方案,但我似乎找不到能做到这一点的事情。
我将如何做到这一点?
答案 0 :(得分:3)
internal sealed class Box : Control
{
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(Point.Empty, new Size(Width - 1, Height - 1)));
}
protected override void OnClick(EventArgs e)
{
MessageBox.Show("You Clicked The Box!");
}
}
创建一个派生自Control
的类。从这里,您可以覆盖一大堆虚拟成员,包括OnPaint
方法,您可以在其中执行所有绘图逻辑。在IntelliSense(DrawRectangle,Draw Line等)的帮助下,它非常直观。
如果你想要,可以像我在这里一样覆盖OnClick
,否则你可以像标准控件一样订阅控件'Click
事件。
您还可以从ContainerControl
派生您的'网格',其行为与Panel或GroupBox控件类似。
这是一个简单的例子,我把它放在一起让你开始。在某些决议中,边界有点小问题,我会将其归结为我糟糕的数学技能。
internal sealed class GameGrid : ContainerControl
{
protected override void OnCreateControl()
{
for (int y = 0; y < 3; y++)
{
for (int x = 0; x < 3; x++)
{
GameButton button = new GameButton
{
Width = Width/3,
Height = Height/3,
};
button.Location = new Point(x*button.Width++, y*button.Height++);
Controls.Add(button);
button.Click += button_Click;
}
}
}
static void button_Click(object sender, EventArgs e)
{
GameButton gameButton = (GameButton)sender;
gameButton.CircleCheck = true;
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(ClientRectangle.Location, new Size(Width - 1, Height - 1)));
}
}
internal sealed class GameButton : Control
{
private bool _cricleCheck;
public bool CircleCheck
{
get
{
return _cricleCheck;
}
set
{
_cricleCheck = value;
Invalidate();
}
}
private readonly Pen circlePen = new Pen(Brushes.Black, 2.0f);
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.SmoothingMode = SmoothingMode.HighQuality;
e.Graphics.DrawRectangle(Pens.Black, new Rectangle(ClientRectangle.Location, new Size(Width - 1, Height - 1)));
if (CircleCheck)
{
e.Graphics.DrawEllipse(circlePen, new Rectangle(ClientRectangle.Location.X + 10, ClientRectangle.Location.Y + 10, Width - 30, Height - 30));
}
}
}
答案 1 :(得分:0)
最常见的可点击广场是button。
如果按钮在当前游戏状态中是可点击的,那么如果点击该按钮,则应该显示哪个图标听起来像是背景逻辑的作业。
答案 2 :(得分:0)
试试这个:
希望这有帮助。
答案 3 :(得分:0)
我在2天前做过类似的练习,
请查看本教程,我想这就足够了:
http://www.codeproject.com/Articles/2400/Tic-Tac-Toe-in-C
对于Square你可以使用按钮,也可以像本教程一样使用PictureBox(尽管他们使用的是vb.net而不是c#,但它很容易翻译):
答案 4 :(得分:0)
我认为最简单的解决方案是使用带背景颜色或图像的简单按钮。 为当前播放的用户设置变量并更改
button.Text
点击活动。 在开头设置“”的所有按钮文本 - 这样您就可以检查是否单击了按钮:
if (button.Text!="")
//it was already clicked