Witam. Mam plik .bmp z zielonym kwadratem w lewym górnym rogu i czerwonym w prawym dolnym. Chcę "połączyć" je losową, czarną linią.
Zaczynam od punktu x=0, y=5.
Losuję liczbę 0-2, gdzie 0 to pixel rysowany o jeden punkt w dół w stosunku do poprzedniego, 1-w lewo, 2-w prawo.
Niestety, generowane są dziwne linie - np. nagle rysowany jest pixel na ukos od poprzedniego, linia nie dochodzi do czerwonego kwadratu...
Proszę o pomoc :/
#include "obraz.h"
#include <QImage>
#include <QMessageBox>
#include <QPoint>
#include <QTime>
obraz::obraz(QWidget *parent) :
QGraphicsView(parent)
{
this->setMouseTracking(true);
this->setVisible(true);
this->setGeometry(0, 80, 353, 493);
this->gra=false; //nie rozpoczeto gry
QTime czas = QTime::currentTime();
qsrand((uint)czas.msec());
this->generujObraz();
}
void obraz::mouseMoveEvent(QMouseEvent *event)
{
this->piksel = this->image.pixel(event->x(), event->y());
QColor kolor(this->piksel); //kolor piksela na ktorym jest kursor myszy
int r, g, b, a; //skladowe
kolor.getRgb(&r, &g, &b, &a); //pobieranie skladowych z koloru piksela
if (r==0 && g==255 && b==0) { //zielony - rozpoczecie gry
if (this->gra==false) {
this->gra=true;
emit naStarcie();
}
} else if (r==255 && g==0 && b==0 && gra==true) { //czerwony - wygrana
this->gra=false;
this->koniecGry();
emit koniec();
} else if (!(r==0 && g==0 && b==0) && gra==true) { //inny niz zielony, czerwony, lub czarny - przegrana
gra=false;
emit pozaMapa();
}
}
void obraz::koniecGry()
{
QMessageBox *wiadomosc = new QMessageBox;
wiadomosc->setText("Wygrales");
wiadomosc->setInformativeText("Projekt");
wiadomosc->show();
}
int obraz::losuj()
{
return qrand() % 3;
}
void obraz::generujObraz()
{
QRgb kolor; //kolor piksela
QPoint punkt; //aktualnie rysowany piksel
this->gra=false;
image.load("c:/j.bmp");
kolor = qRgb(0, 0, 0); //kolor czarny
punkt.setX(0);
punkt.setY(5); //zaczynamy od pierwszego piksela pod zielonym kwadratem
//ktory ma wymiary 5x5 i znajduje sie w punkcie 0.0 obrazka
//wymiary wczytywanego obrazka: 50x80 pikseli
while (punkt.x()<44 && punkt.y()<74) {
image.setPixel(punkt, kolor);
//0-dol, 1-lewo, 2-prawo
if ((losuj()==0) && (punkt.y()<75))
punkt.setY(punkt.y()+1);
if ((losuj()==1) && (punkt.x()>0))
punkt.setX(punkt.x()-1);
if ((losuj()==2) && (punkt.x()<45))
punkt.setX(punkt.x()+1);
}
//powiekszenie obrazka i wyrownanie do lewego gornego rogu
image = image.scaled(350, 490, Qt::IgnoreAspectRatio);
this->setAlignment(Qt::AlignLeft | Qt::AlignTop);
//dodanie obrazka do pixmapy i ustawienie sceny
scena.addPixmap(QPixmap::fromImage(image));
this->setScene(&scena);
}