@@ -10,7 +10,6 @@ let [chain_now,chainable]=[false,false];
1010let chain_info = { color : null , count : 0 } ;
1111let chain_yx = new Array ( ) ; //[i].(x | y)
1212let adj_list = new Array ( ) ; //[i].(y | x)
13- let puz_board = new Array ( ) ; // [y][x][Layer].(type | power)
1413//SECTOR_2.5:準const変数群
1514let PUZ_BOARD_BONE = new Array ( ) ;
1615let DATA = { } ;
@@ -31,19 +30,18 @@ const is_adj_break = obj_type => [-2].includes(obj_type);
3130const dest_sync = field_type => [ 1 ] . includes ( field_type ) ;
3231const update_cell = ( y , x ) =>
3332[ PUZ_BOARD_BONE [ y ] [ x ] . querySelector ( "img.object" ) . src , PUZ_BOARD_BONE [ y ] [ x ] . querySelector ( "img.field" ) . src ] =
34- [ `Pictures/Orbs/${ puz_board [ y ] [ x ] [ 0 ] . type } .svg` , `Pictures/Fields/${ puz_board [ y ] [ x ] [ 1 ] . type } .svg` ] ;
33+ [ `Pictures/Orbs/${ DATA . board . obj [ y ] [ x ] [ 0 ] } .svg` , `Pictures/Fields/${ DATA . board . field [ y ] [ x ] [ 1 ] } .svg` ] ;
3534
3635function update_display ( ) {
3736 for ( let i = 0 ; i < DATA . size . Height ; i ++ ) for ( let j = 0 ; j < DATA . size . Width ; j ++ ) update_cell ( i , j ) ;
3837 document . querySelector ( "#puz_info" ) . innerText = `Score : ${ DATA . target . score } Hand : ${ DATA . target . hand } ` ;
3938}
4039function obj_erase ( y , x , isobj = true ) {
41- const TARGET = puz_board [ y ] [ x ] [ isobj ? 0 : 1 ] ;
42- [ TARGET . type , TARGET . power ] = [ 0 , 0 ] ;
40+ const TARGET = isobj ? DATA . board . obj [ y ] [ x ] : DATA . board . field [ y ] [ x ] ;
41+ [ TARGET [ 0 ] , TARGET [ 1 ] ] = [ 0 , 0 ] ;
4342 update_cell ( y , x ) ;
4443}
4544function load_board ( ) {
46- puz_board = new Array ( DATA . size . Height ) . fill ( ) . map ( _ => Array ( DATA . size . Width ) . fill ( ) . map ( _ => ( [ { type : 0 , power : 0 } , { type : 0 , power : 0 } ] ) ) ) ;
4745 PUZ_BOARD_BONE = new Array ( DATA . size . Height ) . fill ( ) . map ( _ => Array ( DATA . size . Width ) ) ;
4846 MAIN_BOARD . innerHTML = null ;
4947 for ( let i = 0 ; i < DATA . size . Height ; i ++ ) {
@@ -61,26 +59,20 @@ function load_board(){
6159 }
6260 MAIN_BOARD . appendChild ( TR ) ;
6361 }
64- for ( let i = 0 ; i < DATA . size . Height ; i ++ ) {
65- for ( let j = 0 ; j < DATA . size . Width ; j ++ ) {
66- [ puz_board [ i ] [ j ] [ 0 ] . type , puz_board [ i ] [ j ] [ 0 ] . power ] = DATA . board . obj [ i ] [ j ] ;
67- [ puz_board [ i ] [ j ] [ 1 ] . type , puz_board [ i ] [ j ] [ 1 ] . power ] = DATA . board . field [ i ] [ j ] ;
68- }
69- }
7062}
7163function break_obj ( y , x , ischain , isobj = true ) {
72- const TARGET = puz_board [ y ] [ x ] [ isobj ? 0 : 1 ] ;
73- TARGET . power -- ;
74- if ( TARGET . power <= 0 || ischain ) {
75- if ( ! isobj && TARGET . type == 1 ) DATA . target . score += BASE_SCORE ;
64+ const TARGET = isobj ? DATA . board . obj [ y ] [ x ] : DATA . board . field [ y ] [ x ] ;
65+ TARGET [ 1 ] -- ;
66+ if ( TARGET [ 1 ] <= 0 || ischain ) {
67+ if ( ! isobj && TARGET [ 0 ] == 1 ) DATA . target . score += BASE_SCORE ;
7668 obj_erase ( y , x , isobj ) ;
77- isobj && dest_sync ( puz_board [ y ] [ x ] [ 1 ] . type ) && break_obj ( y , x , false , false ) ;
69+ isobj && dest_sync ( DATA . board . field [ y ] [ x ] [ 0 ] ) && break_obj ( y , x , false , false ) ;
7870 }
7971}
8072function fall_obj ( yfrom , xfrom , yto , xto ) {
81- const [ OBJ_TO , OBJ_FROM ] = [ puz_board [ yto ] [ xto ] [ 0 ] , puz_board [ yfrom ] [ xfrom ] [ 0 ] ] ;
82- if ( OBJ_TO . type == 0 && fallable ( OBJ_FROM . type ) ) {
83- [ OBJ_TO . type , OBJ_TO . power ] = [ OBJ_FROM . type , OBJ_FROM . power ] ;
73+ const [ OBJ_TO , OBJ_FROM ] = [ DATA . board . obj [ yto ] [ xto ] , DATA . board . obj [ yfrom ] [ xfrom ] ] ;
74+ if ( OBJ_TO [ 0 ] == 0 && fallable ( OBJ_FROM [ 0 ] ) ) {
75+ [ OBJ_TO [ 0 ] , OBJ_TO [ 1 ] ] = [ OBJ_FROM [ 0 ] , OBJ_FROM [ 1 ] ] ;
8476 update_cell ( yto , xto ) ;
8577 obj_erase ( yfrom , xfrom ) ;
8678 return true ;
@@ -98,8 +90,8 @@ function falling_orb(){
9890 for ( let j = 0 ; j < DATA . size . Width - 1 ; j ++ ) refall = fall_obj ( i - 1 , j , i , j + 1 ) || refall ; //R-shift
9991 }
10092 for ( let i = 0 ; i < DATA . size . Width ; i ++ ) {
101- if ( puz_board [ 0 ] [ i ] [ 0 ] . type == 0 ) {
102- puz_board [ 0 ] [ i ] [ 0 ] = { type : ~ ~ ( Math . random ( ) * ORB_COLORS ) + 1 , power : 1 } ;
93+ if ( DATA . board . obj [ 0 ] [ i ] [ 0 ] == 0 ) {
94+ DATA . board . obj [ 0 ] [ i ] = [ ~ ~ ( Math . random ( ) * ORB_COLORS ) + 1 , 1 ] ;
10395 refall = true ;
10496 }
10597 }
@@ -113,7 +105,7 @@ function falling_orb(){
113105}
114106function onmouce_cell ( cell ) {
115107 const [ CELL_Y , CELL_X ] = [ cell . target . parentNode . rowIndex , cell . target . cellIndex ] ;
116- const CELL_COLOR = puz_board [ CELL_Y ] [ CELL_X ] [ 0 ] . type ;
108+ const CELL_COLOR = DATA . board . obj [ CELL_Y ] [ CELL_X ] [ 0 ] ;
117109 if ( chain_now ) {
118110 if ( Math . abs ( chain_yx . at ( - 1 ) . y - CELL_Y ) <= 1 && Math . abs ( chain_yx . at ( - 1 ) . x - CELL_X ) <= 1 ) /*位置チェック*/ {
119111 if ( chain_info . color == CELL_COLOR && ! chain_yx . some ( e => e . x == CELL_X && e . y == CELL_Y ) ) /*条件チェック*/ {
@@ -127,7 +119,7 @@ function onmouce_cell(cell){
127119function chain_toggler ( cell ) {
128120 if ( ! chainable ) return ;
129121 const [ CELL_Y , CELL_X ] = [ cell . target . parentNode . rowIndex , cell . target . cellIndex ] ;
130- const CELL_COLOR = puz_board [ CELL_Y ] [ CELL_X ] [ 0 ] . type ;
122+ const CELL_COLOR = DATA . board . obj [ CELL_Y ] [ CELL_X ] [ 0 ] ;
131123 if ( chain_now ) { //チェイン終了時の処理
132124 chain_now = false ;
133125 if ( ! ( chain_info . count < SHORTEST_CHAIN ) ) {
@@ -139,13 +131,13 @@ function chain_toggler(cell){
139131 const NEWY = pos . y + dy ;
140132 for ( let dx = - 1 ; dx <= 1 ; dx ++ ) {
141133 const NEWX = pos . x + dx ;
142- if ( ! puz_board [ NEWY ] ?. [ NEWX ] ) continue ; //範囲内か?
134+ if ( ! DATA . board . obj [ NEWY ] ?. [ NEWX ] ) continue ; //範囲内か?
143135 if ( ! adj_list . some ( e => e . x == NEWX && e . y == NEWY ) ) adj_list . push ( { y : NEWY , x : NEWX } ) ;
144136 }
145137 }
146138 } ) ;
147139 adj_list . forEach ( function ( pos ) {
148- is_adj_break ( puz_board [ pos . y ] [ pos . x ] [ 0 ] . type ) && break_obj ( pos . y , pos . x , false ) ;
140+ is_adj_break ( DATA . board . obj [ pos . y ] [ pos . x ] [ 0 ] ) && break_obj ( pos . y , pos . x , false ) ;
149141 } ) ;
150142 update_display ( ) ;
151143 falling_orb ( ) ;
0 commit comments