@@ -128,7 +128,7 @@ <h4 class="title">Maze Layout</h4>
128128 < div class ="row mb-5 ">
129129 < div class ="col ">
130130 < h4 class ="title "> Maze Array</ h4 >
131- < textarea name ="maze-array " id ="maze-array " rows ="4 " class ="form-control p-4 " readonly > </ textarea >
131+ < textarea name ="maze-array " id ="maze-array " rows ="4 " class ="form-control bg-light p-4 "> </ textarea >
132132 </ div >
133133 </ div >
134134
@@ -530,7 +530,7 @@ <h4 class="title">Maze Array</h4>
530530
531531 let pos = 0 ;
532532
533- for ( let row = rows - 1 ; row >= 0 ; row -- ) {
533+ for ( let row = rows - 1 ; row >= 0 ; row -- ) {
534534 for ( let col = 0 ; col < cols ; col ++ ) {
535535 let cell = maze_table . rows [ row ] . cells [ col ] ;
536536 let cell_value = 0 ;
@@ -550,13 +550,63 @@ <h4 class="title">Maze Array</h4>
550550 pos ++ ;
551551 }
552552 }
553- for ( let i = pos ; i < 16 * 16 ; i ++ ) {
553+ for ( let i = pos ; i < 16 * 16 ; i ++ ) {
554554 maze_array [ i ] = 0 ;
555555 }
556556
557557 document . getElementById ( "maze-array" ) . value = JSON . stringify ( maze_array ) ;
558558 } ;
559559
560+ let updateBordersFromArray = function ( maze_array ) {
561+ let maze_table = document . getElementById ( "maze-table" ) ;
562+ let rows = maze_table . rows . length ;
563+ let cols = maze_table . rows [ 0 ] . cells . length ;
564+
565+ const VISITED_BIT = 1 ;
566+ const EAST_BIT = 2 ;
567+ const SOUTH_BIT = 4 ;
568+ const WEST_BIT = 8 ;
569+ const NORTH_BIT = 16 ;
570+
571+ let pos = 0 ;
572+ try {
573+ for ( let row = rows - 1 ; row >= 0 ; row -- ) {
574+ for ( let col = 0 ; col < cols ; col ++ ) {
575+ let cell = maze_table . rows [ row ] . cells [ col ] ;
576+ let cell_value = maze_array [ pos ] ;
577+
578+ if ( cell_value & NORTH_BIT ) {
579+ cell . classList . add ( "border-top" ) ;
580+ } else {
581+ cell . classList . remove ( "border-top" ) ;
582+ }
583+ if ( cell_value & SOUTH_BIT ) {
584+ cell . classList . add ( "border-bottom" ) ;
585+ } else {
586+ cell . classList . remove ( "border-bottom" ) ;
587+ }
588+ if ( cell_value & WEST_BIT ) {
589+ cell . classList . add ( "border-left" ) ;
590+ } else {
591+ cell . classList . remove ( "border-left" ) ;
592+ }
593+ if ( cell_value & EAST_BIT ) {
594+ cell . classList . add ( "border-right" ) ;
595+ } else {
596+ cell . classList . remove ( "border-right" ) ;
597+ }
598+ pos ++ ;
599+ }
600+ }
601+ } catch ( e ) {
602+ let rows = document . getElementById ( "rows" ) . value ;
603+ let cols = document . getElementById ( "cols" ) . value ;
604+ drawMaze ( rows , cols ) ;
605+ }
606+
607+
608+ } ;
609+
560610
561611 ( function ( ) {
562612
@@ -572,6 +622,18 @@ <h4 class="title">Maze Array</h4>
572622 drawMaze ( rows , cols ) ;
573623 } ) ;
574624
625+ document . getElementById ( "maze-array" ) . addEventListener ( "change" , function ( e ) {
626+ let value = e . target . value ;
627+ try {
628+ updateBordersFromArray ( JSON . parse ( value . trim ( ) ) ) ;
629+ } catch ( e ) {
630+ alert ( e . message ) ;
631+ let rows = document . getElementById ( "rows" ) . value ;
632+ let cols = document . getElementById ( "cols" ) . value ;
633+ drawMaze ( rows , cols ) ;
634+ }
635+ } ) ;
636+
575637
576638 } ) ( ) ;
577639 </ script >
0 commit comments