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 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...
Ich möchte das Bild nur mit CSS zoomen. Der Code unten zoomiert das Bild, wenn die linke Taste der Maus gedrückt wird, aber ich möchte mit einem Mausklick ein- und auszoomen. Wie kann ich das...