Skip to content

Commit a293ee8

Browse files
committed
stack sprite added
1 parent 09ea173 commit a293ee8

File tree

3 files changed

+194
-44
lines changed

3 files changed

+194
-44
lines changed

include/laby/laby.hpp

Lines changed: 45 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@ const std::string LABY_LEVELDIR = LABY_SHAREDIR+"levels";
2020
bool use_inline_svg=true;
2121
std::vector<std::string> svg_images;
2222

23-
bool moonwalk=true;
24-
2523
std::string utf8_substr(const std::string& str, unsigned int start, size_t leng)
2624
{
2725
if (leng==0) { return ""; }
@@ -97,7 +95,6 @@ enum Tile {
9795
// Assumption: fake tiles are rendered as void
9896
std::vector<std::string> tilenames = {
9997
"ant-e", "ant-n", "ant-s", "ant-w", "exit", "nrock", "nweb", "rock", "void", "wall", "web", "void", "void", "void"
100-
,"foot-n","foot-s","foot-e","foot-w"
10198
};
10299
std::vector<std::string> tilechars = {
103100
u8"", u8"", u8"", u8"", "x", "ŕ", "", "r", ".", "o", "w", " ", "R", "W","N","S","E","W"
@@ -244,19 +241,54 @@ class Labyrinth {
244241
return s;
245242
}
246243

247-
std::string html() {
248-
std::string s = "<table style='line-height: 0pt;'>\n";
249-
for ( auto line: view() ) {
244+
std::vector<Tile> tiles_at_position(Position p) {
245+
std::vector<Tile> res = {};
246+
247+
Tile tile = board.get(p);
248+
if(tile != Tile::Void ){
249+
res.push_back(tile);
250+
}
251+
if( p == position){
252+
res.push_back(ant_tiles[int(direction)]);
253+
if(carry != Tile::Void){
254+
res.push_back(carry);
255+
}
256+
}
257+
return res;
258+
}
259+
260+
std::string tiles_to_html(std::vector<Tile> tiles) {
261+
std::string s = "";
262+
263+
s += "<style> .stack { position: absolute; } </style>";
264+
s += " <td>";
265+
for(int i=tiles.size()-1; i>=0; i--) {
266+
if(i > 0){
267+
std::string temp = read_file(LABY_TILEDIR + tilenames[tiles[i]] + ".svg");
268+
int index = temp.find("height=");
269+
temp.insert(index, " class='stack' ");
270+
s += "<div style='position: relative;'> " + temp + " </div>" ;
271+
}
272+
else{
273+
s += " " + svg_image(tiles[i]) + " " ;
274+
}
275+
}
276+
s += " </td>\n";
277+
return s;
278+
}
279+
280+
std::string html(){
281+
//board[position.i][position.j] = ant_tiles[int(direction)];
282+
std::string s = "<table style='line-height: 0pt;'>\n";
283+
for(int i = 0 ; i < board.size() ; i++) {
250284
s += " <tr>\n";
251-
for (int j=0; j<line.size(); j++ ) {
252-
s += " <td>"+svg_image(line[j])+"</td>\n";
285+
for(int j = 0 ; j < board[i].size() ; j++) {
286+
s += tiles_to_html(tiles_at_position(Position(i,j)));
253287
}
254288
s += " </tr>\n";
255289
}
256290
s+="</table>\n";
257291
s+="<pre>";
258-
if ( carry == Tile::Rock )
259-
s += "Je porte un rocher. ";
260292
if ( message.empty() )
261293
s += " ";
262294
s += message;
@@ -365,7 +397,9 @@ class Labyrinth {
365397
tile_devant == Tile::Outside or
366398
tile_devant == Tile::Rock or
367399
tile_devant == Tile::Exit or
368-
tile_devant == Tile::Wall) {
400+
tile_devant == Tile::Wall
401+
//AUTRE SOLUTION FAIRE : tile_devant == Tile::Web
402+
) {
369403
message = "Je ne peux pas avancer.";
370404
return false;
371405
}
@@ -417,20 +451,6 @@ class Labyrinth {
417451
return false;
418452
}
419453

420-
bool sow_steps(){
421-
if(moonwalk){
422-
switch(direction) {
423-
case Direction::North: return sow(Tile::FootN); break;
424-
case Direction::East: return sow(Tile::FootE); break;
425-
case Direction::South: return sow(Tile::FootS); break;
426-
case Direction::West: return sow(Tile::FootW); break;
427-
default : return false;
428-
}
429-
}
430-
else{return sow(Tile::Void);}
431-
return true;
432-
}
433-
434454
bool sow(Tile feet){
435455
Tile tile = board.get(position);
436456
if ( tile == Tile::Exit ) {
@@ -568,20 +588,6 @@ class Player {
568588
time = history.size() - 1;
569589
update();
570590
}
571-
572-
void hide_step() {
573-
present_value = view.value;
574-
if(moonwalk){moonwalk=false;}
575-
else{moonwalk=true;}
576-
auto randomized = present_value;
577-
randomized.randomize();
578-
history[time] = randomized;
579-
//svg_image[]=
580-
update();
581-
std::cout << moonwalk << std::endl;
582-
play_direction = PlayDirection::Forward;
583-
timer.set_fps(play_fps);
584-
}
585591

586592
void step_backward() {
587593
if ( time > 0 ) {

laby-test.cpp

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,140 @@ void testLabyrinth() {
151151
u8"o o o o o o o\n");
152152
}
153153

154+
void testStack(){
155+
// Rendre le labyrinth minimal.
156+
const string stack_test= u8"o . → r . x";
157+
158+
auto l_stack = Labyrinth(stack_test);
159+
use_inline_svg = false;
160+
ASSERTEQ( l_stack.to_string(),
161+
u8"o . → r . x");
162+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
163+
<tr>
164+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
165+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
166+
<td><img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
167+
<td><img src='/nbextensions/laby/rock.svg' width=32 height=32></td>
168+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
169+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
170+
</tr>
171+
</table>
172+
<pre> </pre>
173+
)html");
174+
ASSERT(not l.avance());
175+
ASSERT( l.prend());
176+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
177+
<tr>
178+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
179+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
180+
<td><div style='position: relative; left: 5px; top: 5px;'> <img src='rock.svg' width=20 height=20 class='stack' > </div>
181+
<img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
182+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
183+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
184+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
185+
</tr>
186+
</table>
187+
<pre></pre>
188+
)html");
189+
ASSERT( l.avance());
190+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
191+
<tr>
192+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
193+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
194+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
195+
<td><div style='position: relative; left: 5px; top: 5px;'> <img src='rock.svg' width=20 height=20 class='stack' > </div>
196+
<img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
197+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
198+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
199+
</tr>
200+
</table>
201+
<pre></pre>
202+
)html");
203+
ASSERT( l.avance());
204+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
205+
<tr>
206+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
207+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
208+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
209+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
210+
<td><div style='position: relative; left: 5px; top: 5px;'> <img src='rock.svg' width=20 height=20 class='stack' > </div>
211+
<img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
212+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
213+
</tr>
214+
</table>
215+
<pre></pre>
216+
)html");
217+
ASSERT( l.gauche());
218+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
219+
<tr>
220+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
221+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
222+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
223+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
224+
<td><div style='position: relative; left: 5px; top: 5px;'> <img src='rock.svg' width=20 height=20 class='stack' > </div>
225+
<img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
226+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
227+
</tr>
228+
</table>
229+
<pre></pre>
230+
)html");
231+
ASSERT( l.gauche());
232+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
233+
<tr>
234+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
235+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
236+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
237+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
238+
<td><div style='position: relative; left: 5px; top: 5px;'> <img src='rock.svg' width=20 height=20 class='stack' > </div>
239+
<img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
240+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
241+
</tr>
242+
</table>
243+
<pre></pre>
244+
)html");
245+
ASSERT( l.pose());
246+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
247+
<tr>
248+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
249+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
250+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
251+
<td><img src='/nbextensions/laby/rock.svg' width=32 height=32></td>
252+
<td><img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
253+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
254+
</tr>
255+
</table>
256+
<pre></pre>
257+
)html");
258+
ASSERT( l.gauche());
259+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
260+
<tr>
261+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
262+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
263+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
264+
<td><img src='/nbextensions/laby/rock.svg' width=32 height=32></td>
265+
<td><img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
266+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
267+
</tr>
268+
</table>
269+
<pre></pre>
270+
)html");
271+
ASSERT( l.gauche());
272+
ASSERTEQ(l.html(), R"html(<table style='line-height: 0pt;'>
273+
<tr>
274+
<td><img src='/nbextensions/laby/wall.svg' width=32 height=32></td>
275+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
276+
<td><img src='/nbextensions/laby/void.svg' width=32 height=32></td>
277+
<td><img src='/nbextensions/laby/rock.svg' width=32 height=32></td>
278+
<td><img src='/nbextensions/laby/ant-e.svg' width=32 height=32></td>
279+
<td><img src='/nbextensions/laby/exit.svg' width=32 height=32></td>
280+
</tr>
281+
</table>
282+
<pre></pre>
283+
)html");
284+
ASSERT( l.ouvre());
285+
}
286+
287+
154288
void testSow() {
155289
auto l = Labyrinth(". → w . ");
156290
ASSERT( l.sow() );

solve.hpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,9 @@ int setrock=1;
2020
void BackTracking(bool rck, bool wallL);
2121

2222
/**Show steps on the board and forward.
23-
(NB: if we unactivate the steps widget, they still showed but only void case xD).
23+
(NB: if we unactivate the steps widget, they still showed but only void case).
2424
*/
2525
void Step(){
26-
trace();
2726
avance();
2827
}
2928

@@ -63,10 +62,9 @@ void EndLaby(){
6362
pose();
6463
contient=false;
6564
SetRock(setrock,true);
66-
trace();
6765
ouvre();
6866
}
69-
else{trace();ouvre();}
67+
else{ouvre();}
7068
}
7169

7270
//Keep position of a rock.
@@ -162,7 +160,19 @@ bool WallRight(bool rck, bool wall_left){
162160
case Tile::Void : return true; break;
163161

164162
case Tile::Wall : if(wall_left){droite();}
165-
else{gauche();}
163+
else{
164+
gauche();
165+
if(regarde()==Tile::Web){
166+
BreakNet();
167+
if(wall_left){
168+
if(rck==false){
169+
cptrock--;
170+
if(cptrock==0){rockbf=false; break;}
171+
Gauche2(); return false; break;
172+
}
173+
}
174+
}
175+
}
166176
return true; break;
167177

168178
case Tile::SmallRock : return true; break;

0 commit comments

Comments
 (0)