Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> переставление двух цифр 
:(
    Опции темы
Alenka1993
  Дата 6.3.2013, 06:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.7.2012

Репутация: нет
Всего: нет



Доброе утро! 
Помогите реализовать игру с пятнашки. В консоли она реализована, управление стрелками. Допустим посередине нолик и с ним можно менять любую другую цифру. А нужно чтобы тоже самое было реализовано с картинкой. Ну допустим у нас есть картинка ее нужно порезать на 9 частей и также при нажатии пользователем определенной клавиши (вверх,вниз, влево, вправо). Это отображалось на картинке. Понимаю, что задача не сложная, но у самой возникают глупые ошибки. Никак не могу доделать до конца. Заранее спасибо, тому кто откликнется!
Код

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

class CPuzzleArrangement {
    char puzzleBoard[ 9 ];
public:
    enum movements{ left, right, up, down };
    CPuzzleArrangement( char* arrangement ) {
        for( int i = 0; i < 9; i++ ) {
            puzzleBoard[ i ] = arrangement[ i ] >= '0' ? arrangement[ i ] - '0' : arrangement[ i ];
        }
    }
    void display( void ) {
        for( int i = 0; i < 9; i++ ) {
            cout << ( int )puzzleBoard[ i ];
            if( ( i + 1 ) % 3 == 0 ) cout << endl;
        }
        cout << "----------" << endl;
    }
    bool move( movements direction ) {
        int targetIndex, zeroIndex = 0;
        while( puzzleBoard[ zeroIndex ] != 0 ) zeroIndex++;
        switch( direction ) {
        case left: targetIndex = zeroIndex - 1; break;
        case right: targetIndex = zeroIndex + 1; break;
        case up: targetIndex = zeroIndex - 3; break;
        case down: targetIndex = zeroIndex + 3; break;
        default: targetIndex = zeroIndex; break;
        }
        if( targetIndex < 0 || targetIndex > 8 || targetIndex == zeroIndex ) return false;
        if( ( zeroIndex / 3 != targetIndex / 3 ) && ( targetIndex % 3 != zeroIndex % 3 ) ) return false;
        swap( puzzleBoard[ zeroIndex ], puzzleBoard[ targetIndex ] );
        return true;
    }
};

int main( int argc, char* argv[] ) {
    if( argc != 2 ) {
        cerr << "Wrong parameters" << endl;
        return -1;
    }
    Mat image = imread( argv[1] );
    if( !image.data ) {
        cerr << "Can't load image" << endl;
        return -1;
    }
    resize( image, image, Size( 300, 300 ) );
//    Mat imageROI = image( Rect( 0, 0, 100, 100 ) );
//    Mat imageROI2 = image( Rect( 100, 100, 100, 100 ) );
//    imageROI.copyTo( newImage );
//    imageROI = Mat( imageROI.size(), imageROI.type(), Scalar( 0 ) );
    imshow( "Image", image );

    CPuzzleArrangement puzzle( "012345678" );
    char key = 0;
    while( ( key = waitKey() ) != 27 ) {
        bool flag;
        switch( key ) {
        case 81: flag = puzzle.move( CPuzzleArrangement::left ); break;
        case 82: flag = puzzle.move( CPuzzleArrangement::up ); break;
        case 83: flag = puzzle.move( CPuzzleArrangement::right ); break;
        case 84: flag = puzzle.move( CPuzzleArrangement::down ); break;
        default: flag = false; break;
        }
        if( flag ) puzzle.display();
    }
    puzzle.display();
    return 0;
}

PM MAIL   Вверх
volatile
Дата 6.3.2013, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Alenka1993 @  6.3.2013,  06:17 Найти цитируемый пост)
нужно чтобы тоже самое было реализовано с картинкой

Alenka1993, вы в консольном приложении хотите картинки лицезреть?


PM MAIL   Вверх
Alenka1993
Дата 6.3.2013, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.7.2012

Репутация: нет
Всего: нет



volatile, нет, у меня же есть окно imshow для картинки, вот там и хочу лицезреть
PM MAIL   Вверх
volatile
Дата 7.3.2013, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 16
Всего: 85



Цитата(Alenka1993 @  6.3.2013,  18:34 Найти цитируемый пост)
есть окно imshow 

А.., так у вас это окно opencv.
Тестил когда-то эту либу, и ... не срослось.
Может кто с ней работает, подскажет...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.