Литература
подскажите прогу как самому сделать пазл пол дня в инете копался ни че не нашел ))
#include <cstdlib>#include <qapplication.h>#include <qwidget.h>#include <qpainter.h>#include <qpixmap.h>#include <vector>#include <algorithm>class Piece{ private: int x_,y_; QPixmap piece_; public: Piece(int x, int y, const QPixmap& pm): x_ (x), y_ (y), piece_ (pm) {} void draw(QPainter& p) const { p.drawPixmap(x_,y_,piece_); } bool is_it(int x, int y) const { return true && x >= x_ && x < x_+piece_.width() && y >= y_ && y < y_+piece_.height() ; } void move(int dx, int dy) { x_+= dx; y_ += dy; }};class Puzzle : public QWidget{ private: typedef std::vector<piece*> piece_cont; piece_cont pieces; piece_cont::iterator current; bool drag_on; int x,y; public: Puzzle(); ~Puzzle(); void paintEvent(QPaintEvent*); void mousePressEvent(QMouseEvent*); void mouseReleaseEvent(QMouseEvent*); void mouseMoveEvent(QMouseEvent*);};int main(int ac, char** av){ QApplication a(ac,av); Puzzle p; a.setMainWidget(&p); p.show(); return a.exec();}struct DrawPiece{ QPainter& painter; DrawPiece(QPainter& p):painter(p){} void operator()(const Piece* p) const {p->draw(painter);}};void Puzzle::paintEvent(QPaintEvent*){ QPixmap tmp(width(),height()); tmp.fill(Qt::white); QPainter p(&tmp); std::for_each(pieces.begin(),pieces.end(),DrawPiece(p)); bitBlt(this,0,0,&tmp);}struct IsIt{ int x,y; IsIt(int x_, int y_):x(x_),y(y_){} bool operator()(const Piece* p) const { return p->is_it(x,y); }};void Puzzle::mousePressEvent(QMouseEvent* e){ piece_cont::iterator it = std::find_if(pieces.begin(),pieces.end(),IsIt(e->x(),e->y())); if(it != pieces.end()) { drag_on = true; current = it; x = e->x(); y = e->y(); }}void Puzzle::mouseReleaseEvent(QMouseEvent*){ drag_on = false; current = pieces.end();}void Puzzle::mouseMoveEvent(QMouseEvent* e){ if(drag_on) { (*current)->move(e->x()-x,e->y()-y); x = e->x(); y = e->y(); update(); }}struct Delete{ void operator()(Piece* p ) const { delete p; }};Puzzle::~Puzzle(){ std::for_each(pieces.begin(),pieces.end(),Delete());}#include "puzzle.xpm"Puzzle::Puzzle() : QWidget(0){ setWFlags(Qt::WRepaintNoErase); QPixmap whole(puzzle_xpm); for(int x = 0; x < 6; ++x) for(int y = 0; y < 4; ++y) { QPixmap piece(100,100); QPainter p(&piece); p.drawPixmap(0,0,whole,100*x,100*y,100,100); p.end(); pieces.push_back(new Piece(rand()`0,rand()@0,piece)); } drag_on = false; current = pieces.end(); setFixedSize(700,450);}
Похожие вопросы
- Люди не подскажите где взять в нете желательно бесплатно книги серии Аниморфы читал одну понравилась но найти не
- Подскажите где можно скачать криминальные мелодрамы Юлии Шиловой? Или инет-магазин
- Роль пейзажа в характеристике героев романа "Преступление и наказание". ПЖЛСТ ПОМОГИТЕ В ГУГЛЕ ИСКАЛ НИ ЧЁ НЕ НАШЕЛ!?!?
- Друзья оцените)) сделал другу на день рождения))) жду комментариев
- Анализ стихотворения А.А. Блока " На поле Куликовом" 5 часть. Очень нужно, помогите пожалуйста найти!!
- Подскажите стихи о Второй Мировой войне и о блокаде Ленинграда. И сайт, где их найти. Спасибо
- Подскажите пж, есть ли у Крылова басня "Лев да Осел" ? А то не могу найти ее.. Или по другому именуется?
- Подскажите, по мотивам какой повести снимался фильм "Матрица". Очень хочется прочитать, а не могу найти информации.
- Подскажите, пожалуйста, фабулу и событийный ряд романа "Бурный поток" Е. Сазонова! Нигде не могу найти, а завтра по
- подскажите какой ни будь хороший стих о войне (просто в интернете ни чего хорошего найти не могу )