|
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 } |