[решено] Я пытаюсь смоделировать "игру жизни" как в консоли, так и рисуя ее, но моя форма простая и белая.Как я могу сделать мои методы пригодными для использования?
Я делаю это как свой первый код на C # в VisualStudio 2019, просто чтобы ладить с объектно-ориентированными языками.Я пробовал рисование на основе событий (щелчки мыши, кнопки), и все было в порядке.
Мой класс формы выглядит так:
public partial class Board : Form
{
private int BOARDWIDTH;
private int BOARDHEIGHT;
private int cellSize;
private bool paint = false; //ADDED IN
private World world;
Graphics drawArea;
public Board(World world, int cellsize)
{
this.BOARDHEIGHT = world.getWorldHeight() * cellsize;
this.BOARDWIDTH = world.getWorldWidth() * cellsize;
InitializeComponent();
drawingArea.SetBounds(0, 0, this.BOARDWIDTH, this.BOARDHEIGHT);
drawArea = drawingArea.CreateGraphics();
this.cellSize = cellsize;
this.world = world;
}
public void updateBoard(World world)
{
this.world = world;
}
protected override void OnPaint(PaintEventArgs e) // ADDED IN (Basically previous DrawCell inside)
{
base.OnPaint(e);
if(paint)
{
Rectangle rect = new Rectangle(x*this.cellSize, y*this.cellSize,
this.cellSize, this.cellSize);
if (this.world.getCellState(x, y))
{
rect.Height--;
rect.Width--;
using (Pen wPen = new Pen(Color.Black))
{
e.Graphics.DrawRectangle(wPen, rect);
}
}
else
{
using (SolidBrush bBrush = new SolidBrush(Color.Black))
{
e.Graphics.FillRectangle(bBrush, rect);
}
}
paint = false;
}
}
private void DrawCell(int x, int y) //CHANGED
{
this.x = x;
this.y = y;
paint = true;
}
public void DrawWorld(int refreshRate)
{
for(int i = 0; i < this.world.getWorldHeight(); i++)
{
for(int j = 0; j <this.world.getWorldWidth(); j++)
{
DrawCell(j, i);
}
}
}
}
}
, а мой основной выглядит так:
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
World world = new World(20, 20);
world.createRandomWorld();
Board board = new Board(world, 10);
Application.Run(board);
board.DrawWorld(10);
}
Я хочу получить сетку из черных / белых квадратов, белых с границами.Теперь единственное, что я получаю, это то, что мой код не падает
[Edit] Я добавил OnPaint
и немного изменил свой метод DrawCell
, и у меня есть кое-что сейчас (оно рисует, даааа), но яполучить только одну ячейку, а не всю сетку.Кроме того, мое решение bool paint
похоже на обходной путь, а не на правильный способ сделать это.Во всяком случае, я хотел бы видеть «правильный» рабочий код, потому что я не имею определения / примеры, которые есть в Интернете (страница Microsoft), не показывает мне, как я могу заставить его работать мой путь ^. ^