所以,我试图在屏幕上创建一个网格,为此,我实现了一个矩形的多维数组。
当程序启动时,我使用for循环来增加x和y坐标以形成网格。
public Form1() {
InitializeComponent();
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 12; y++) {
recArray[x, y] = new Rectangle(y * 50, x * 50, 100, 100);
}
Application.DoEvents();
}
}
我的问题是试图找出用户何时点击了一个矩形,以及他/她点击过的数组中的哪个矩形。正如我给出正确的矩形时,我会将边框更改为红色。
我正在使用Visual Studio 2008,到目前为止这是我的代码。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Quoridor {
public partial class Form1 : Form {
private Pen pen = Pens.Black;
Rectangle[,] recArray = new Rectangle[12, 12];
public Form1() {
InitializeComponent();
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 12; y++) {
recArray[x, y] = new Rectangle(y * 50, x * 50, 100, 100);
}
Application.DoEvents();
}
}
protected override void OnPaint(PaintEventArgs e) {
base.OnPaint(e);
for (int x = 0; x < 12; x++) {
for (int y = 0; y < 12; y++) {
e.Graphics.DrawRectangle(pen, recArray[x, y]);
Application.DoEvents();
}
}
}
private void Form1_Click(object sender, EventArgs e) {
Point cursor = this.PointToClient(Cursor.Position);
Refresh();
}
}
}
我正在把它变成一个真正的游戏,包括所有类。但请记住,这是我的第二个月编程,所以不要苛刻^ _ ^
答案 0 :(得分:0)
首先,提出几点建议:
MouseEventArgs
,其中包含相对于Form
的点击坐标。Rectangle
的宽度和高度。然后,您可以按如下方式确定点击的Rectangle
:
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
Rectangle clickedRectangle = FindClickedRectangle(e.Location);
if (!clickedRectangle.IsEmpty)
Console.WriteLine("X: {0} Y: {1}", clickedRectangle.X, clickedRectangle.Y);
}
private Rectangle FindClickedRectangle(Point point)
{
// Calculate the x and y indices in the grid the user clicked
int x = point.X / 50;
int y = point.Y / 50;
// Check if the x and y indices are valid
if (x < recArray.GetLength(0) && y < recArray.GetLength(1))
return recArray[x, y];
return Rectangle.Empty;
}
请注意,我使用简单的计算确定单击的矩形,这是可能的,因为矩形位于网格中。如果您打算偏离网格布局,则循环遍历所有矩形并使用Rectangle.Contains(Point)进行测试是另一种解决方案。