나는 Game of Life의 복사본을 구현하여 C#을 배우고 있습니다. for 루프를 사용하여 pictureBox
위에 그리드를 성공적으로 그릴 수있었습니다. fill_in
이라는 이름의 부울은 사각형 채우기입니다. 나는 사각형을 클릭 할 수있게 만드는 데 도움을 요청하고 있습니다. pictureBox_MouseClick
을 허용하도록 pictureBox
의 propertite 속성을 설정했습니다. 측면에서 mouseClick 이벤트 좌표를 x
및 y
으로 설정했습니다. 문제는 ==
을 bool 피연산자에 적용 할 수 없기 때문에 해당 이벤트의 if 문이 올바르지 않다는 것입니다.PictureBox- 그리드 및 사각형으로 채우기 (생명의 게임)
bool fill_in
이 true 인 경우 검정색으로 채울 if 조건문을 어떻게 수행 할 수 있습니까? 은 if 문에 대한 변경 후
코드
namespace life
{
public partial class Form1 : Form
{
Graphics paper;
bool[,] fill_in = new bool[450, 450];
public Form1()
{
InitializeComponent();
paper = pictureBox1.CreateGraphics();
}
//makes grid in picture box
private void drawGrid()
{
int numOfCells = 100;
int cellSize = 10;
Pen p = new Pen(Color.Blue);
paper.Clear(Color.White);
for (int i = 0; i < numOfCells; i++)
{
// Vertical
paper.DrawLine(p, i * cellSize, 0, i * cellSize, numOfCells * cellSize);
// Horizontal
paper.DrawLine(p, 0, i * cellSize, numOfCells * cellSize, i * cellSize);
}
}
// populate bool fill_in with true (alive) or false (dead)
private void clearGrid()
{
for (int x = 0; x < 450; x = x + 10)
{
for (int y = 0; y < 450; y = y + 10)
{
fill_in[x, y] = false;
}
}
}
private void button1_Click(object sender, EventArgs e)
{
drawGrid();
clearGrid();
for (int x = 0; x < 440; x = x + 10)
{
for (int y = 0; y < 440; y = y + 10)
{
if (fill_in[x, y] == true)
paper.FillRectangle(Brushes.Black, x, y, 10, 10);
}
}
}
private void pictureBox1_MouseClick(object sender, MouseEventArgs e)
{
int x = e.X;
int y = e.Y;
int i = x/10;
int j = y/10;
fill_in[i, j] = !fill_in[i, j];
if (fill_in[i, j])
{
paper.FillRectangle(Brushes.Black, x, y, 10, 10);
}
else
{
paper.FillRectangle(Brushes.White, x, y, 10, 10);
}
}
}
}
:
1 이것은 거의 완벽합니다. 유일한 문제는 채우기 사각형이 격자 사각형과 일치하지 않는다는 것입니다. 위의 사진을보십시오. – CodingWonders90
사각형이 마우스 클릭 위치에 그려지기 때문에 일치하지 않는 것은 당연합니다. 맞습니까? 그리드의 가장 가까운 셀에 정렬해야합니다. 따라서 int x = cellSize * (e.X/cellSize)와 같은 것을 할 수 있습니다. – Einar
귀하의 질문에 대한 다른 질문 ('if' 문이 작동하지 않음)이 아니라 도면 작성 방법이 필요합니다. 지금 그리드 그리기에 대한 질문이 있으면 별도의 질문이어야합니다. 배경에 대한 링크를 제공 할 수 있습니다. 사람들이 답변을 게시하기 시작한 후에 질문의 요점을 변경하는 것은 적절하지 않습니다. 움직이는 표적을 치는 것이 꽤 어렵습니다. –