-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathREADME.txt
More file actions
209 lines (162 loc) · 8.13 KB
/
README.txt
File metadata and controls
209 lines (162 loc) · 8.13 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
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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
README: PROJECT
==============================================
Written by:
Ronen Heifetz
Oz Shurki
GENERAL INFORMATION
====================================================
we developed a game with the same rules as Lode Runner.
The game creates a game out of a text file containing the file using pre-defined symbols
to indicate certain objects, such as walls, ladders, poles, player and enemies.
The general idea behind the development is changing the initial text file with the given
information into a matrix of pointers of objects that is the main source if interaction between the
objects of this game.
This way lets us determine adjacant objects to every object we desire - which simplifies calculations of collisions
This way the adjacant objects of every moving object can be addressed directly while they are updated
constantly. This way, we can deduce the surroundings of every object at every time and do operations
accordingly of object and its surroundings.
we decided that upon losing a level, everything is resetted, including the timer, score, life, coins and gifts.
when digging a hole in a floor and there is no floor underneath, the player stays
in the hole as though as there was a floor underneath
DESIGN
=====================================================
We have created the following objects for this program:
BASE OBJECTS:
--------------------
GAME MASTER:
this class ties every single object in this game together. it is responsible for handling the base
of the game - it creates the board, and is responsible for showing the windows and making actions
depending on the current state of the game.
BOARD:
this is the main class that handles directly with everything related to the actual game.
this class creates the necessary objects according to the text file and displays them on the screen,
such as the matrix map, enemies, and the player.
RESOURCES:
this class is responsible for creating every single outside source of information
that the game uses - such as textures and sounds. it is essentially a singleton
so it is possible for other object to access it directly
MENU:
this class is responsible for handling the pre-game menu, it has 3 buttons
available, in order to start game, exit or shut music.
GAME OBJECTS
---------------------
GAME OBJECT:
this is the base class of every single object that is game-related. every property of this object
is a shared property of every single object of the game.
MOVING OBJECT:
this is the base class of every moving object in the game, essentially, this class represents
all characters.
STATIC OBJECT:
this is the base class of all static object. it is the type of the map, so every moving object
can know which static objects are adjacant to it.
PLAYER:
this class represents the player. the player has a certain score and number of lifes left.
the player is a private member of the board, and it gets generated and destroyed at the beginning
and at the end of each level.
ENEMY:
this class represents the enemy. its whole purpose is to kill the enemy. they are stored in the board
as a vector for easy access for all at the same time.
SMART ENEMY:
this class represents the smart enemy. this enemy has an access to the position of the player
and uses an algorithm to set its direction accordingly to get directly to player
CONST ENEMY:
this class represents another type of enemy which moves only left and right, and upon collision
or reaching an edge of the floor, he changes direction.
DUMB ENEMY:
this class represents an enemy that moves in random direction.
WALL:
this is a static object that represents an object which no moving object can be on.
it serves as both a wall and a floor.
all moving object use this object to deduce if they are on a valid location, and act accordingly.
the default of every moving object is if it not on top of a wall, it needs to be dropped
unless he is on another valid location.
the wall can be dug and removed using special operation of the player - in this case
every moving object found inside the generated hole is moved up on top of the returned
floor.
LADDER:
the ladder is the object used by moving object to move up and down. a moving obejct is
considered to be on a valid location if it is on a wall.
POLE:
the pole is the object used by moving objects to move left and right while not being
on top of floor. it is a valid location for every moving object to be on.
COIN:
the coin is the main way the player can increase his score. each coin is assigned with a value
upon creation, and depending on number of level, and upon collision with it, the score
increases accordingly.
when a player dies, if the board resets, all the coins are returned to their original locations
and can be taken again. the score resets as well.
GIFT:
the gift is a base class. it serves as a base for all objects that have an affect on the situation of the
board or player, besides the coin.
GOODGIFT:
this is a base class for all gifts that have an affect on the player.
ADDLIFEGIFT:
this is a class for gifts that add life. they have an associated value of life that the player
collides will it gets this much amount of life.
ADDTIMEGIFT:
essentially the same as ADDLIFEGIFT but adds time instead
ADDSCOREGIFT:
essentially the same as ADDLIFEGIFT but adds score instead
BADGIFT:
this gift is a bad gift, it has a pointer to the board, and upon collision with player - it
calls for a function to the board to create an additional enemy
LEVEL FORMAT
====================================
to add additional levels, you can add another one on Board.txt
in resources directory, and putting in at the desired level.
note you need to put rows, columns, and time at the beginning
with a newline seperating between two levels.
at the end there is supposed to be no newline.
SELF GENERATED FILES
===========================================
all the files below are the code and header for the project.
AddLifeGift.cpp AddLifeGift.h:
AddScoreGift.cpp AddScoreGift.h
AddTimeGift.cpp AddTimeGift.h
BadGift.cpp BadGift.h
Board.cpp Board.h
Button.cpp Button.h
Coin.cpp Coin.h
ConstEnemy.cpp ConstEnemy.h
DumbEnemy.cpp DumbEnemy.h
Enemy.cpp Enemy.h
GameMaster.cpp GameMaster.h
GameObject.cpp GameObject.h
Gift.cpp Gift.h
GoodGift.cpp GoodGift.h
Ladder.cpp Ladder.h
main.cpp
Menu.cpp Menu.h
MovingObject.cpp MovingObject.h
Player.cpp Player.h
Pole.cpp Pole.h
Resources.cpp Resourcrs.h
SmartEnemy.cpp SmartEnemy.h
StaticObject.cpp StaticObject.h
Wall.cpp Wall.h
there are also included all the music and textures used in the game in the Resoureces directory.
DATA STRUCTURES
==============================================
the main data structure used is the matrix of ptrs of GameObject to indicate
the surroundings of every object in the game.
a singleton is also used in order to maintain outside information such as textures and sounds.
NOTEWORTHY ALGORITHMS:
==========================================
SmartEnemyAlgorithm:
the smart enemy uses a special algorithm that go to the player in the x axis,
and once he has reached to the same x axis as the player and is on a ladder, he goes
up or down depending on where the player is relatively to the enemy
Finding Position In Matrix:
each sprite has its own position relatively to the window. we use
the property that every object has the same size to conclude what are the correct row and column
if they were on the matrix of static objects. we find the position in the x/y axis by the height/width
accordingly. this gives us the necessary information, meaning the row and column of the object
had they been inside the matrix. this conclusion lets us know directly what are
the adjacent objects of every given object.
KNOWN BUGS
=======================================
the or enemy are able to climb on coins and gifts after they were taken
when the window of TryAgain shows you need to move the mouse
CHANGES SINCE PRESENTATION
==========================================
the player is now a member of board