-
Notifications
You must be signed in to change notification settings - Fork 1
/
piece.cpp
125 lines (105 loc) · 2.21 KB
/
piece.cpp
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
#include "piece.h"
piece::piece(){
this->posx = 0;
this->posy = 0;
this->img = NULL;
this->direction = 1;
this->die = false;
}
piece::piece(string name){
this->posx = 0;
this->posy = 0;
this->setImg(name);
this->direction = 1;
this->die = false;
}
piece::piece(float px, float py, string name){
this->posx = px;
this->posy = py;
this->setImg(name);
this->direction = 1;
this->die = false;
}
piece::piece(float px, float py, int d, string name){
this->posx = px;
this->posy = py;
this->setImg(name);
if(d>0 && d<5)
this->direction = d;
else
this->direction = 1;
this->die = false;
}
piece::~piece(){
SDL_FreeSurface(this->img);
}
float piece::getPosX() const{
return this->posx;
}
float piece::getPosY() const{
return this->posy;
}
SDL_Surface * piece::getImg() const{
return this->img;
}
int piece::getDirection() const {
return this->direction;
}
bool piece::getDie() const{
return this->die;
}
void piece::setDie(bool d){
this->die = d;
}
void piece::setPosX(float px){
this->posx = px;
}
void piece::setPosY(float py){
this->posy = py;
}
void piece::setImg(string name){
SDL_Surface * oldimg = IMG_Load(name.c_str());
if(oldimg == NULL){
cout << "Errore caricamento immagine : "<<SDL_GetError()<<endl;
}else{
this->img = SDL_DisplayFormat(oldimg);
SDL_FreeSurface(oldimg);
if(this->img == NULL)
cout << "Errore aggiornamento immagine : "<<SDL_GetError()<<endl;
}
}
void piece::setImg(SDL_Surface * sdlimg){
this->img = sdlimg;
}
void piece::setDirection(int d){
if(d>0 && d<5 && this->direction != d){
if( ( (this->direction % 2) == 0 && (d%2)!=0) || ( (this->direction%2) != 0 && (d%2) == 0))
this->direction = d;
}
}
void piece::move(){
switch (this->direction){
case UP:
this->posy -= 16;
break;
case DOWN:
this->posy += 16;
break;
case RIGHT:
this->posx += 16;
break;
case LEFT:
this->posx -= 16;
break;
}
if((this->getPosX() < 0 || this->getPosX() > 640-16) || (this->getPosY() < 0 || this->getPosY() > 480-16))
this->die = true;
}
void piece::draw(SDL_Surface * screen){
SDL_Rect * rect = new SDL_Rect();
rect->x = this->posx;
rect->y = this->posy;
SDL_BlitSurface(this->img, NULL, screen, rect);
delete rect;
SDL_Flip(this->img);
}