Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Introduction to Algorithms

Authors: Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest

3rd edition

978-0262033848

More Books

Students also viewed these Algorithms questions