Skip to content
GitLab
Explore
Projects
Groups
Topics
Snippets
Projects
Groups
Topics
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
labs
Laba_3
pacman
Commits
b09b172d
Commit
b09b172d
authored
1 month ago
by
Авдеев Евгений Владимирович
Browse files
Options
Download
Patches
Plain Diff
created teleport betwen walls
parent
e0d11226
main
No related merge requests found
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
source/Builder/Builders.cpp
+79
-22
source/Builder/Builders.cpp
source/Config/Config.h
+1
-0
source/Config/Config.h
source/Context/Context.cpp
+0
-2
source/Context/Context.cpp
source/Maze/Maze.cpp
+29
-0
source/Maze/Maze.cpp
source/Maze/Maze.h
+13
-0
source/Maze/Maze.h
with
122 additions
and
24 deletions
+122
-24
source/Builder/Builders.cpp
+
79
−
22
View file @
b09b172d
...
...
@@ -121,9 +121,19 @@ void SimpleBuilder::set_rooms_sides() {
}
if
(
j
==
0
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
if
(
i
==
m_rooms_in_col
/
2
)
{
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
m_rooms_in_row
-
1
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
m_rooms_in_row
-
1
));
m_rooms
.
at
(
i
).
at
(
m_rooms_in_row
-
1
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
m_rooms_in_row
-
1
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
}
else
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
}
}
else
{
side
=
std
::
make_shared
<
Pass
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
j
-
1
));
...
...
@@ -131,9 +141,14 @@ void SimpleBuilder::set_rooms_sides() {
}
if
(
j
==
m_rooms_in_row
-
1
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
if
(
i
==
m_rooms_in_col
/
2
){
continue
;
}
else
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
}
}
else
{
side
=
std
::
make_shared
<
Pass
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
j
+
1
));
...
...
@@ -243,9 +258,11 @@ void ComplexBuilder::create_rooms() {
void
ComplexBuilder
::
set_rooms_sides
()
{
std
::
shared_ptr
<
IRoomSide
>
side
;
size_t
counter
=
0
;
for
(
size_t
i
=
0
;
i
<
m_rooms_in_col
;
++
i
)
{
std
::
cout
<<
"rows = "
<<
m_rooms_in_col
<<
"; cols = "
<<
m_rooms
.
at
(
i
).
size
()
<<
"; in_row = "
<<
m_rooms_in_row
<<
'\n'
;
for
(
size_t
j
=
0
;
j
<
m_rooms
.
at
(
i
).
size
();
++
j
)
{
std
::
cout
<<
" i = "
<<
i
<<
"; j = "
<<
j
<<
'\n'
;
if
(
i
%
2
==
1
)
{
//
if
(
j
%
2
==
0
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
...
...
@@ -262,18 +279,34 @@ void ComplexBuilder::set_rooms_sides() {
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
DOWN
,
side
);
}
if
(
j
==
0
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
if
(
i
==
m_rooms_in_col
/
2
)
{
std
::
cout
<<
"WOOOOOOOOOOOOOOOOOOOOOOORK
\n
"
;
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
back
());
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
back
());
m_rooms
.
at
(
i
).
back
()
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
back
()
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
}
else
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
}
}
else
{
side
=
std
::
make_shared
<
Pass
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
j
-
1
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
}
if
(
j
==
m_rooms_in_row
-
1
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
if
(
i
==
m_rooms_in_col
/
2
)
{
continue
;
}
else
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
}
}
else
{
side
=
std
::
make_shared
<
Pass
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
j
+
1
));
...
...
@@ -281,15 +314,39 @@ void ComplexBuilder::set_rooms_sides() {
}
}
else
{
//if (j % 2 == 0) { continue; }
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
if
((
j
==
0
||
j
==
(
m_rooms
.
at
(
i
).
size
()
-
1
))
&&
i
==
m_rooms_in_col
/
2
)
{
if
(
counter
!=
0
)
{
++
counter
;
}
else
{
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Teleport
>
(
*
m_rooms
.
at
(
i
).
at
(
j
),
*
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
));
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
));
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
m_rooms
.
at
(
i
).
size
()
-
1
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
++
counter
;
}
}
else
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
RIGHT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
RIGHT
)
->
prepare_for_drawing
();
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
LEFT
,
side
);
m_rooms
.
at
(
i
).
at
(
j
)
->
get_side
(
Room
::
Direction
::
LEFT
)
->
prepare_for_drawing
();
}
if
(
i
==
0
)
{
side
=
std
::
make_shared
<
Wall
>
(
*
m_rooms
.
at
(
i
).
at
(
j
));
m_rooms
.
at
(
i
).
at
(
j
)
->
set_side
(
Room
::
Direction
::
UP
,
side
);
...
...
This diff is collapsed.
Click to expand it.
source/Config/Config.h
+
1
−
0
View file @
b09b172d
...
...
@@ -44,6 +44,7 @@ namespace config {
const
sf
::
Color
GAME_COLOR_PACMAN
{
250
,
150
,
0
};
const
sf
::
Color
GAME_COLOR_ROOM
{
0
,
0
,
0
};
const
sf
::
Color
GAME_COLOR_WALL
{
80
,
190
,
255
};
const
sf
::
Color
GAME_COLOR_TELEPORT
{
255
,
0
,
0
};
const
sf
::
Color
GAME_FOOD_COLOR
{
0
,
200
,
100
};
const
sf
::
Color
GAME_ENEMY_COLOR
{
255
,
50
,
0
};
}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
source/Context/Context.cpp
+
0
−
2
View file @
b09b172d
...
...
@@ -8,8 +8,6 @@ GameContext GameContext::clone() {
for
(
auto
&
dyn
:
dynamic_obj
)
{
context
.
dynamic_obj
.
emplace_back
(
dyn
->
clone
());
}
for
(
auto
&
stat
:
static_obj
)
{
context
.
static_obj
.
emplace_back
(
stat
->
clone
());
}
...
...
This diff is collapsed.
Click to expand it.
source/Maze/Maze.cpp
+
29
−
0
View file @
b09b172d
...
...
@@ -63,6 +63,35 @@ void Pass::enter(IEntity* entity) {
}
}
Teleport
::
Teleport
(
Room
&
room1
,
Room
&
room2
)
:
m_room_left
(
room1
),
m_room_right
(
room2
)
{}
void
Teleport
::
draw_into
(
sf
::
RenderWindow
&
window
)
const
{
window
.
draw
(
m_line_left
,
2
,
sf
::
Lines
);
window
.
draw
(
m_line_right
,
2
,
sf
::
Lines
);
};
void
Teleport
::
prepare_for_drawing
()
{
sf
::
Vector2f
pos_left
=
m_room_left
.
get_position
();
sf
::
Vector2f
pos_right
=
m_room_right
.
get_position
();
float
size
=
config
::
ROOM_SIZE
;
m_line_left
[
0
]
=
sf
::
Vertex
({
pos_left
.
x
-
size
/
2
,
pos_left
.
y
+
size
/
2
},
config
::
GAME_COLOR_TELEPORT
);
m_line_left
[
1
]
=
sf
::
Vertex
({
pos_left
.
x
-
size
/
2
,
pos_left
.
y
-
size
/
2
},
config
::
GAME_COLOR_TELEPORT
);
m_line_right
[
0
]
=
sf
::
Vertex
({
pos_right
.
x
+
size
/
2
,
pos_right
.
y
-
size
/
2
},
config
::
GAME_COLOR_TELEPORT
);
m_line_right
[
1
]
=
sf
::
Vertex
({
pos_right
.
x
+
size
/
2
,
pos_right
.
y
+
size
/
2
},
config
::
GAME_COLOR_TELEPORT
);
};
void
Teleport
::
enter
(
IEntity
*
entity
)
{
if
(
entity
->
get_location
()
==
&
m_room_left
)
{
entity
->
set_location
(
&
m_room_right
);
}
else
{
entity
->
set_location
(
&
m_room_left
);
}
}
Wall
::
Wall
(
Room
&
room
)
:
m_room
(
room
)
{}
void
Wall
::
draw_into
(
sf
::
RenderWindow
&
window
)
const
{
...
...
This diff is collapsed.
Click to expand it.
source/Maze/Maze.h
+
13
−
0
View file @
b09b172d
...
...
@@ -62,3 +62,16 @@ public:
void
draw_into
(
sf
::
RenderWindow
&
window
)
const
override
;
};
class
Teleport
:
public
IRoomSide
{
private:
Room
&
m_room_right
;
Room
&
m_room_left
;
sf
::
Vertex
m_line_left
[
2
];
sf
::
Vertex
m_line_right
[
2
];
public:
Teleport
(
Room
&
room1
,
Room
&
room2
);
void
enter
(
IEntity
*
entity
)
override
;
void
prepare_for_drawing
()
override
;
void
draw_into
(
sf
::
RenderWindow
&
window
)
const
override
;
};
\ No newline at end of file
This diff is collapsed.
Click to expand it.
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment
Menu
Explore
Projects
Groups
Topics
Snippets