~ubuntu-branches/ubuntu/trusty/kapman/trusty-proposed

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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
 * Copyright 2007-2008 Thomas Gallinari <tg8187@yahoo.fr>
 * Copyright 2007-2008 Alexandre Galinier <alex.galinier@hotmail.com>
 * 
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of 
 * the License, or (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef GHOST_H
#define GHOST_H

#include "character.h"
#include "kapman.h"


/**
 * @brief This class represents a Ghost for kapman.
 */
class Ghost : public Character {

	Q_OBJECT
	
	public:
	
		/** The ghost possible states */
		enum State {
			HUNTER = 0,
			PREY = 1,
			EATEN = 2
		};

        /** The value of an Ghost */
        static const int POINTS;


	private:

		/** Max speed ratio, compared with the initial speed  */
		static const qreal MAX_SPEED_RATIO;

		/** The path to the Ghost image */
		QString m_imageId;
		
		/** The ghost current state */
		State m_state;
		
		/** A list of Cells to go to the camp from the current cell */
		QList<QPoint> m_pathToCamp;

	public:

		/**
		 * Creates a new Ghost instance.
		 * @param p_x the initial x-coordinate
		 * @param p_y the initial y-coordinate
		 * @param p_imageId path to the image of the related item
		 * @param p_maze the Maze the Ghost is on
		 */
		Ghost(qreal p_x, qreal p_y, const QString & p_imageId, Maze* p_maze);

		/**
		 * Deletes the Ghost instance.
		 */
		~Ghost();

		/**
		 * Updates the Ghost move.
		 */
		void updateMove();

		/**
		 * Updates the Ghost with a direction to follow.
		 * @param p_row x coordinate of the cell to reach
		 * @param p_col y coordinate of the cell to reach
		 */
		void updateMove(int p_row, int p_col);
		 
		/**
		 * Gets the path to the Ghost image.
		 * @return the path to the Ghost image
		 */
		QString getImageId() const;
		
		/**
		 * Gets the current state of the Ghost.
		 * @return the Ghost state
		 */
		State getState() const;
		
		/**
		 * Sets the Ghost state to the given value.
		 * @param p_state the new Ghost state
		 */
		void setState(Ghost::State p_state);
		
		 /**
		  * Manages the collison with the Kapman.
		  * @param p_kapman the instance of Kapman which collides with the Ghost
		  */
		 void doActionOnCollision(Kapman* p_kapman);

		/**
		 * Initializes the Ghost speed from the Character speed.
		 */
		void initSpeedInc();

	private:

		/**
		 * Makes the Ghost go up.
		 */
		void goUp();

		/**
		 * Makes the Ghost go down.
		 */
		void goDown();

		/**
		 * Makes the Ghost go to the right.
		 */
		void goRight();

		/**
		 * Makes the Ghost go to the left.
		 */
		void goLeft();

	signals:
	
		/**
		 * Emitted when the Kapman has lost a life.
		 */
		void lifeLost();
		
		/**
		 * Emitted when the Ghost has been eaten.
		 * @param p_ghost the eaten Ghost (this)
		 */
		void ghostEaten(Ghost* p_ghost);
		
		/**
		 * Emitted when the Ghost has changed his state.
		 */
		void stateChanged();
};

#endif