Question: I need help fixing my code to what the instructions ask for. Objective In C++ Add some customization and flexibility to the grid's individual cells

I need help fixing my code to what the instructions ask for.

Objective In C++

Add some customization and flexibility to the grid's individual cells in the drawing panel.

Instructions

  1. At this point there should be a series of two loops that iterate from zero to the size of the grid. Inside of each iteration, a rectangleshould be created that is the cell size specified. The location of each rectangleshould be offset by a multiple of the cell size.
  2. If the window started as a 200x200 pixel grid, the grid of rectangles is going to be very small in the window. Try adjusting the size to something larger. Try 20. Try 30.
  3. This method isn't going to work, especially since the window can be resized. The cell size need to be calculated.
  4. The window may not be square, which means that the width and height values may not be the same. They need to be calculated separately.
  5. Create two variables outside the loops, one for cell height and one for cell width. These values will need to be calculated. The width will be the panel width divided by the grid size. Look at the wxWidgets documentation to see how you can get the size of the panel and then find out how to isolate the width and height. The necessary method will come from the panels parent class, which is wxWindow. https://docs.wxwidgets.org/3.0/classwx_window.html

wxBEGIN_EVENT_TABLE(DrawingPanel, wxPanel) EVT_PAINT(DrawingPanel::OnPaint) EVT_LEFT_UP(DrawingPanel::OnMouseUp) wxEND_EVENT_TABLE()

DrawingPanel::DrawingPanel(wxFrame* parent, std::vector>& gameBoard) : wxPanel(parent, wxID_ANY, wxPoint(0, 0), wxSize(200, 200)), _gameBoard(gameBoard) { this->SetBackgroundStyle(wxBG_STYLE_PAINT);

CalculateCellSize(); } DrawingPanel::~DrawingPanel() { }

void DrawingPanel::CalculateCellSize() { wxSize panelSize = GetParent()->GetClientSize(); cellWidth = panelSize.GetWidth() / gridSize; cellHeight = panelSize.GetHeight() / gridSize; }

void DrawingPanel::OnPaint(wxPaintEvent& event) { wxAutoBufferedPaintDC dc(this); dc.Clear();

wxGraphicsContext* context = wxGraphicsContext::Create(dc); if (!context) { return; }

context->SetPen(*wxBLACK); context->SetBrush(*wxWHITE);

for (int row = 0; row < gridSize; row++) { for (int col = 0; col < gridSize; col++) { int x = col * cellWidth; int y = row * cellHeight; // Checks the corresponding bool in the game board if (_gameBoard[row][col]) { context->SetBrush(*wxLIGHT_GREY); // Living cell color } else { context->SetBrush(*wxWHITE); // Dead cell color }

context->DrawRectangle(x, y, cellWidth, cellHeight); } }

} void DrawingPanel::SetGridSize(int size) { gridSize = size; CalculateCellSize(); // Recalculates cell size based on the new grid size }

void DrawingPanel::OnMouseUp(wxMouseEvent& event) { int mouseX = event.GetX(); int mouseY = event.GetY();

int row = mouseY / cellHeight; int col = mouseX / cellWidth;

if (row >= 0 && row < gridSize && col >= 0 && col < gridSize) { // Toggles the state of the clicked cell _gameBoard[row][col] = !_gameBoard[row][col]; Refresh(); } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Algorithms Questions!