Ich habe eine Realisierung des Prim-Algorithmus geschrieben, der ein Labyrinth in QT erstellt (verwendet C++, QGraphicView + QGraphicScene, mein Labyrinth ist eine Matrix aus 0 und 1) und der nächste Schritt meines Projekts ist – der Benutzer kann auf eine beliebige Zelle des Labyrinths klicken und Start und Ende für die Suche nach Durchlaufalgorithmen wählen.
Hat jemand Ideen für die Umsetzung des Festlegens von Start-/Endpositionen mit Hilfe einer Maus?
mein Labyrinth-Erstellungscode -
Ich habe eine Realisierung des Prim-Algorithmus geschrieben, der ein Labyrinth in QT erstellt (verwendet C++, QGraphicView + QGraphicScene, mein Labyrinth ist eine Matrix aus 0 und 1) und der nächste Schritt meines Projekts ist – der Benutzer kann auf eine beliebige Zelle des Labyrinths klicken und Start und Ende für die Suche nach Durchlaufalgorithmen wählen. [img]https://i.sstatic.net/3GUvMjcl.png[/img]
Hat jemand Ideen für die Umsetzung des Festlegens von Start-/Endpositionen mit Hilfe einer Maus? mein Labyrinth-Erstellungscode - [code]#include "mazegenerator.h"
// лямда для пошуку та занесення крайових клітин в вектор borders // лямда виконує такі дії: // 1. Перевіряє чи координати точки не виходять за межі лабіринту // 2. Перевіряє чи координати точки не є межами(кордонами) лабіринту // 3. Перевіряє унікальність даної точки для уникнення повторного занесення // 4. Якщо умови пройдені - додає координати точки до borders auto isBorder = [this,&borders](int x,int y) { if(x+2 > 0 && x+2 < m_maze->getColumns()-1 && y > 0 && y < m_maze->getRows()-1 && m_maze->getValue(x+2,y) == 1) {
// лямда для пошуку та занесення клітин-проходів в вектор borders // лямда виконує такі дії: // 1. Перевіряє чи координати точки не виходять за межі лабіринту // 2. Якщо умови пройдені - додає координати точки до passes
auto isPass = [this,&passes](int x,int y) { if( x+2 < m_maze->getColumns() && y >=0 && y < m_maze->getRows() && m_maze->getValue(x+2,y) == 0) { passes.push_back({x+2,y}); } if( x-2>=0 && x-2 < m_maze->getColumns() && y >=0 && y < m_maze->getRows() && m_maze->getValue(x-2,y) == 0) { passes.push_back({x-2,y}); } if( x >= 0 && x < m_maze->getColumns() && y+2 < m_maze->getRows() && m_maze->getValue(x,y+2) == 0) { passes.push_back({x,y+2}); } if( x >= 0 && x < m_maze->getColumns() && y-2 >=0 && y-2 < m_maze->getRows() && m_maze->getValue(x,y-2) == 0) { passes.push_back({x,y-2}); } };
// 1.Генеруємо випадкову не парну клітинку і перетворюємо її на прохід QRandomGenerator generator; int x = generator.bounded(1,(m_maze->getColumns()-2) ); if(x % 2 == 0) { x -= 1; } int y = generator.bounded(1,(m_maze->getRows()-2) ); if(y % 2 == 0) { y -= 1; } m_maze->setValue(x,y,0); emit cellChanged(x,y,0); // 2. Шукаємо крайові клітинки і заносимо їх до вектора borders isBorder(x,y);
while(borders.size() != 0) { int randBord = generator.bounded(0,static_cast(borders.size())); int xBord = borders[randBord].first; int yBord = borders[randBord].second; borders.erase(borders.begin() + randBord); m_maze->setValue(xBord,yBord,0); emit cellChanged(xBord,yBord,0); isBorder(xBord,yBord);
isPass(xBord,yBord);
bool ok = true; if (!passes.empty()) { while(ok) { int randPas = generator.bounded(0,static_cast(passes.size()) ); if( (passes[randPas].first + xBord)%2 == 0 && (passes[randPas].second + yBord)%2 == 0) { int betweenX = (passes[randPas].first + xBord)/2; int betweenY = (passes[randPas].second + yBord)/2;
m_maze->setValue(betweenX,betweenY,0); emit cellChanged(betweenX,betweenY,0); ok = false; break; }
} } passes.clear(); } } [/code] [list] [*]Funktion der Rect-Initialisierung und -Färbung: [/list] [code] void Mazerenderer::mazeInitalization(int rows, int columns) { for(int y = 0; y < rows; y++) { for(int x = 0; x < columns; x++) {
auto* item = m_scene->addRect(x * m_cellSize , y * m_cellSize, m_cellSize, m_cellSize, QPen(Qt::darkYellow), QBrush(wallColor)); rec_matrix[y][x] = item; } } } void Mazerenderer::changeCell(int x, int y, int signal)// responds to a signal from Mazegenerator::primsAlgorithm() { if(signal == 0) { rec_matrix[x][y]->setBrush(QBrush(passColor)); } else if(signal == 2) { rec_matrix[x][y]->setBrush(QBrush(borderColor)); } }
Ich möchte mit openpyxl ein 2D-Array (z. B. einen Pandas-DataFrame) an einer bestimmten Position (z. B. beginnend bei Zelle M8) in ein vorhandenes Excel-Arbeitsblatt einfügen.
Gibt es eine...
Ich habe eine Zufallszahl aus der Datenbank. /> Schreiben Sie immer die ersten 3 Zahlen zuerst, dann alle 2 Zahlen, gefolgt von einem Punkt. 13 - Ziffern
Mein idee ist ersetzt.
$show =...
Ich verwende zwei industrielle Pi-Plattformen, um mehr über eingebettete C-Codierung unter Linux zu erfahren. Ich verwende Visual Studio zum plattformübergreifenden Kompilieren und Debuggen.
Ich habe...
Ich zeige ein unendliches Gitter (Gleichung y = 0). Ich möchte, dass der Benutzer auf das Netz klickt und (x, y) der Maus auf das Netz klickt, das natürlich (x, 0, z) wäre. Ich konnte den folgenden...