MixedView/mainwindow.cpp
changeset 0 061910b224a4
child 1 3e3364c5ae1c
equal deleted inserted replaced
-1:000000000000 0:061910b224a4
       
     1 #include "mainwindow.h"
       
     2 #include "ui_mainwindow.h"
       
     3 #include <QGraphicsProxyWidget>
       
     4 #include <QFormLayout>
       
     5 #include <QHBoxLayout>
       
     6 #include <QLineEdit>
       
     7 #include <QGroupBox>
       
     8 #include <QResizeEvent>
       
     9 #include <QFile>
       
    10 #include <QStringList>
       
    11 #include <QSound>
       
    12 
       
    13 
       
    14 MainWindow::MainWindow(QWidget *parent) :
       
    15     QMainWindow(parent),
       
    16     ui(new Ui::MainWindow)
       
    17 {
       
    18     this->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);
       
    19     ui->setupUi(this);
       
    20     mPacState = 0;
       
    21     bIsMoving = true;
       
    22     xAxis = yAxis = 0;
       
    23     mLastPt.setX(0);
       
    24     mLastPt.setY(0);
       
    25     mPause = false;
       
    26 
       
    27     // declare the accelerometer
       
    28     mAccelerometer = new QAccelerometer(this);
       
    29     mAccelerometer->start();
       
    30 
       
    31     QSize screenSize = this->size();
       
    32     mScene = new QGraphicsScene();
       
    33 
       
    34     QRect sceneRect = ui->mainGraphicsView->rect();
       
    35     mScene->setSceneRect(sceneRect);
       
    36    // scene->setBackgroundBrush (QBrush(Qt::blue));
       
    37 
       
    38     QPixmap mazeImage(":/media/maze.jpg");
       
    39     int width = screenSize.width();
       
    40     mazeImage = mazeImage.scaledToWidth(width);
       
    41     QGraphicsPixmapItem *backGround = mScene->addPixmap(mazeImage);
       
    42     backGround->setPos(-140,-200);
       
    43 
       
    44     mPacman = new QGraphicsEllipseItem(0, 0, 18, 18);
       
    45     mPacman->setBrush(QBrush(Qt::yellow));
       
    46     mPacman->setSpanAngle(4500);
       
    47     mScene->addItem(mPacman);
       
    48 
       
    49     // lets place a pause button in the view
       
    50     pauseButton = new QPushButton("Pause");
       
    51     connect(pauseButton, SIGNAL(clicked()), this, SLOT(pause()));
       
    52     pauseButton->setMaximumHeight(40);
       
    53     pauseButton->setMaximumWidth(300);
       
    54     QGraphicsProxyWidget *buttonProxy = mScene->addWidget(pauseButton);
       
    55     buttonProxy->setPos(0, -220);
       
    56 
       
    57     // now set up the boundries
       
    58     setupBoundries();
       
    59 
       
    60     ui->mainGraphicsView->setScene(mScene);
       
    61     ui->mainGraphicsView->show();
       
    62 
       
    63     mPacman->setPos(20,-8);
       
    64 
       
    65     // declare our update timer
       
    66     mUpdateTimer = new QTimer(this);
       
    67     connect(mUpdateTimer, SIGNAL(timeout()), this, SLOT(updateGraphics()));
       
    68     mUpdateTimer->start(250);
       
    69 
       
    70     // connect the accelerometer to the readingChanged signal
       
    71     connect(mAccelerometer, SIGNAL(readingChanged()), this, SLOT(updateReading()));
       
    72 
       
    73     //mPlayer = new QMediaPlayer;
       
    74     QMediaResource res(QUrl::fromLocalFile(":/media/pacman_intro.wav"));
       
    75     QString codec = res.audioCodec();
       
    76     QAudioFormat format;
       
    77     // Set up the format, eg.
       
    78     format.setFrequency(8000);
       
    79     format.setChannels(1);
       
    80     format.setSampleSize(8);
       
    81     format.setCodec("audio/pcm");
       
    82     format.setByteOrder(QAudioFormat::LittleEndian);
       
    83     format.setSampleType(QAudioFormat::UnSignedInt);
       
    84 
       
    85     QAudioDeviceInfo info(QAudioDeviceInfo::defaultOutputDevice());
       
    86     if (!info.isFormatSupported(format)) {
       
    87         //qWarning()<<"raw audio format not supported by backend, cannot play audio.";
       
    88         return;
       
    89     }
       
    90       // file.setFileName(":/media/pacman_intro.wav");
       
    91       //  file.open(QIODevice::ReadOnly);
       
    92 
       
    93 
       
    94       //  int size = file.size();
       
    95 
       
    96        // mAudio = new QAudioOutput(format, this);
       
    97       //  file.setParent(mAudio);
       
    98 
       
    99       //  mAudio->start(&file);
       
   100        // QSound::play(":/media/pacman_intro.wav");
       
   101 
       
   102        // mPlayer->setMedia(QUrl::fromLocalFile(":/media/intro.mp3"));
       
   103         //int leg = mPlayer->duration();
       
   104        // mPlayer->setVolume(100);
       
   105         //mPlayer->play();
       
   106 
       
   107 
       
   108     mNumHits = 1;
       
   109 }
       
   110 
       
   111 MainWindow::~MainWindow()
       
   112 {
       
   113     delete ui;
       
   114 }
       
   115 
       
   116 void MainWindow::updateGraphics() {
       
   117     if (mPause || mNumHits > 1)
       
   118         return;
       
   119 
       
   120     if (!bIsMoving)
       
   121         return;
       
   122     switch (mPacState) {
       
   123     case 0:
       
   124         mPacman->setSpanAngle(5700);
       
   125         break;
       
   126     case 1:
       
   127         mPacman->setSpanAngle(4500);
       
   128         break;
       
   129     case 2:
       
   130         mPacman->setSpanAngle(4000);
       
   131         break;
       
   132     default:
       
   133         break;
       
   134     }
       
   135 
       
   136     mPacState += 1;
       
   137     if (mPacState == 2)
       
   138         mPacState = 0;
       
   139 }
       
   140 
       
   141 void MainWindow::updateReading() {
       
   142     if (mPause)
       
   143         return;
       
   144     mNumHits = mPacman->collidingItems().count();
       
   145     if (mNumHits == 1)
       
   146         mLastPt = mPacman->pos();
       
   147     xAxis = (xAxis + mAccelerometer->reading()->x()) / 2;
       
   148     yAxis = (yAxis + mAccelerometer->reading()->y()) / 2;
       
   149 
       
   150     QPointF pt =  mPacman->pos();
       
   151 
       
   152     pt.setX(pt.x()-xAxis);
       
   153     pt.setY(pt.y()+yAxis);    
       
   154 
       
   155     if (pt.x()<-103)
       
   156         pt.setX(-103);
       
   157     else if (pt.x()>180)
       
   158         pt.setX(180);
       
   159 
       
   160     if (pt.y()<-156)
       
   161         pt.setY(-156);
       
   162     else if (pt.y()>145)
       
   163         pt.setY(145);
       
   164 
       
   165 
       
   166     QList<QGraphicsItem*> itemList = mScene->items();
       
   167     int itemCount = itemList.count();
       
   168     bool contains = false;
       
   169     for (int i=0;i < itemCount; i++) {
       
   170         QGraphicsItem *item = itemList.at(i);
       
   171         if (item->contains(pt))
       
   172             contains = true;
       
   173     }
       
   174     if (mNumHits == 1) {
       
   175         mPacman->setPos(pt);
       
   176 
       
   177     }
       
   178     else
       
   179         mPacman->setPos(mLastPt);
       
   180 
       
   181 
       
   182 }
       
   183 
       
   184 void MainWindow::pause() {
       
   185     mPause = !mPause;
       
   186     if (mPause)
       
   187         pauseButton->setText("Play");
       
   188     else
       
   189         pauseButton->setText("Pause");
       
   190 }
       
   191 
       
   192 
       
   193 void MainWindow::statusChanged(QMediaPlayer::MediaStatus status) {
       
   194     switch (status) {
       
   195     case QMediaPlayer::LoadedMedia:
       
   196         mPlayer->play();
       
   197         break;
       
   198     default:
       
   199         break;
       
   200     }
       
   201 }
       
   202 
       
   203 void MainWindow::setupBoundries() {
       
   204     // borders
       
   205     QGraphicsRectItem *mRect1 = new QGraphicsRectItem(0,0,82,11);
       
   206     mRect1->setBrush(QBrush(Qt::transparent));
       
   207     mScene->addItem(mRect1);
       
   208     mRect1->setPos(5,14);
       
   209 
       
   210     mRect1 = new QGraphicsRectItem(0,0,11,46);
       
   211     mRect1->setBrush(QBrush(Qt::transparent));
       
   212     mScene->addItem(mRect1);
       
   213     mRect1->setPos(40,15);
       
   214 
       
   215     mRect1 = new QGraphicsRectItem(0,0,82,11);
       
   216     mRect1->setBrush(QBrush(Qt::transparent));
       
   217     mScene->addItem(mRect1);
       
   218     mRect1->setPos(5,91);
       
   219 
       
   220     mRect1 = new QGraphicsRectItem(0,0,11,46);
       
   221     mRect1->setBrush(QBrush(Qt::transparent));
       
   222     mScene->addItem(mRect1);
       
   223     mRect1->setPos(40,92);
       
   224 
       
   225     //
       
   226     mRect1 = new QGraphicsRectItem(0,0,47,11);
       
   227     mRect1->setBrush(QBrush(Qt::transparent));
       
   228     mScene->addItem(mRect1);
       
   229     mRect1->setPos(-47,-136);
       
   230 
       
   231     mRect1 = new QGraphicsRectItem(0,0,50,11);
       
   232     mRect1->setBrush(QBrush(Qt::transparent));
       
   233     mScene->addItem(mRect1);
       
   234     mRect1->setPos(88,-136);
       
   235 
       
   236     // center square
       
   237     mRect1 = new QGraphicsRectItem(0,0,57,35);
       
   238     mRect1->setBrush(QBrush(Qt::transparent));
       
   239     mScene->addItem(mRect1);
       
   240     mRect1->setPos(17,-46);
       
   241 
       
   242     mRect1 = new QGraphicsRectItem(0,0,11,55);
       
   243     mRect1->setBrush(QBrush(Qt::transparent));
       
   244     mScene->addItem(mRect1);
       
   245     mRect1->setPos(40,-160);
       
   246 
       
   247     mRect1 = new QGraphicsRectItem(0,0,11,46);
       
   248     mRect1->setBrush(QBrush(Qt::transparent));
       
   249     mScene->addItem(mRect1);
       
   250     mRect1->setPos(-82,-131);
       
   251 
       
   252     mRect1 = new QGraphicsRectItem(0,0,11,46);
       
   253     mRect1->setBrush(QBrush(Qt::transparent));
       
   254     mScene->addItem(mRect1);
       
   255     mRect1->setPos(160,-131);
       
   256 
       
   257     mRect1 = new QGraphicsRectItem(0,0,11,64);
       
   258     mRect1->setBrush(QBrush(Qt::transparent));
       
   259     mScene->addItem(mRect1);
       
   260     mRect1->setPos(-67,-60);
       
   261 
       
   262     mRect1 = new QGraphicsRectItem(0,0,11,64);
       
   263     mRect1->setBrush(QBrush(Qt::transparent));
       
   264     mScene->addItem(mRect1);
       
   265     mRect1->setPos(153,-60);
       
   266 
       
   267     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   268     mRect1->setBrush(QBrush(Qt::transparent));
       
   269     mScene->addItem(mRect1);
       
   270     mRect1->setPos(-22,-85);
       
   271 
       
   272     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   273     mRect1->setBrush(QBrush(Qt::transparent));
       
   274     mScene->addItem(mRect1);
       
   275     mRect1->setPos(103,-85);
       
   276 
       
   277     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   278     mRect1->setBrush(QBrush(Qt::transparent));
       
   279     mScene->addItem(mRect1);
       
   280     mRect1->setPos(-27,45);
       
   281 
       
   282     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   283     mRect1->setBrush(QBrush(Qt::transparent));
       
   284     mScene->addItem(mRect1);
       
   285     mRect1->setPos(108,45);
       
   286 
       
   287     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   288     mRect1->setBrush(QBrush(Qt::transparent));
       
   289     mScene->addItem(mRect1);
       
   290     mRect1->setPos(-71,93);
       
   291 
       
   292     mRect1 = new QGraphicsRectItem(0,0,11,48);
       
   293     mRect1->setBrush(QBrush(Qt::transparent));
       
   294     mScene->addItem(mRect1);
       
   295     mRect1->setPos(158,95);
       
   296 
       
   297     mRect1 = new QGraphicsRectItem(0,0,47,11);
       
   298     mRect1->setBrush(QBrush(Qt::transparent));
       
   299     mScene->addItem(mRect1);
       
   300     mRect1->setPos(-63,43);
       
   301 
       
   302     mRect1 = new QGraphicsRectItem(0,0,47,11);
       
   303     mRect1->setBrush(QBrush(Qt::transparent));
       
   304     mScene->addItem(mRect1);
       
   305     mRect1->setPos(108,45);
       
   306 
       
   307     mRect1 = new QGraphicsRectItem(0,0,47,12);
       
   308     mRect1->setBrush(QBrush(Qt::transparent));
       
   309     mScene->addItem(mRect1);
       
   310     mRect1->setPos(-70,128);
       
   311 
       
   312     mRect1 = new QGraphicsRectItem(0,0,47,11);
       
   313     mRect1->setBrush(QBrush(Qt::transparent));
       
   314     mScene->addItem(mRect1);
       
   315     mRect1->setPos(122,132);
       
   316 
       
   317     mRect1 = new QGraphicsRectItem(0,0,47,12);
       
   318     mRect1->setBrush(QBrush(Qt::transparent));
       
   319     mScene->addItem(mRect1);
       
   320     mRect1->setPos(-23,-85);
       
   321 
       
   322     mRect1 = new QGraphicsRectItem(0,0,47,12);
       
   323     mRect1->setBrush(QBrush(Qt::transparent));
       
   324     mScene->addItem(mRect1);
       
   325     mRect1->setPos(67,-85);
       
   326 
       
   327 }