-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathship.cpp
More file actions
70 lines (64 loc) · 1.91 KB
/
Copy pathship.cpp
File metadata and controls
70 lines (64 loc) · 1.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "ship.h"
Ship::Ship(int hp, QPoint pos, QPoint size, int speed): Object(hp, pos, size)
{
this->speed = speed;
}
QPoint Ship::getMoveStep()
{
return this->moveStep;
}
void Ship::updatePos()
{
setMoveStep();
this->pos+=moveStep;
}
int Ship::moveByDiag()
{
return speed/sqrt(2);
}
void Ship::keepInWindow()
{
int marginX = this->size.x()/2;
int marginY = this->size.y()/2;
QPoint nextPos;
nextPos = moveStep+pos;
if(nextPos.x() <= 0-marginX)
moveStep.setX(0);
if(nextPos.y() <= 0-marginY)
moveStep.setY(0);
if(nextPos.x() >= 1024-marginX)
moveStep.setX(0);
if(nextPos.y() >= 768-marginY)
moveStep.setY(0);
}
void Ship::setMoveStep() {
if (this->keys.contains(Qt::Key_Right) && this->keys.contains(Qt::Key_Up)) {
this->moveStep.setX(moveByDiag());
this->moveStep.setY(-moveByDiag());
} else if (this->keys.contains(Qt::Key_Right) && this->keys.contains(Qt::Key_Down)) {
this->moveStep.setX(moveByDiag());
this->moveStep.setY(moveByDiag());
} else if (this->keys.contains(Qt::Key_Left) && this->keys.contains(Qt::Key_Down)) {
this->moveStep.setX(-moveByDiag());
this->moveStep.setY(moveByDiag());
} else if (this->keys.contains(Qt::Key_Left) && this->keys.contains(Qt::Key_Up)) {
this->moveStep.setX(-moveByDiag());
this->moveStep.setY(-moveByDiag());
} else if (this->keys.contains(Qt::Key_Up)) {
this->moveStep.setX(0);
this->moveStep.setY(-speed);
} else if (this->keys.contains(Qt::Key_Right)) {
this->moveStep.setX(speed);
this->moveStep.setY(0);
} else if (this->keys.contains(Qt::Key_Down)) {
this->moveStep.setX(0);
this->moveStep.setY(speed);
} else if (this->keys.contains(Qt::Key_Left)) {
this->moveStep.setX(-speed);
this->moveStep.setY(0);
}else{
this->moveStep.setX(0);
this->moveStep.setY(0);
}
keepInWindow();
}