@@ -4,28 +4,23 @@ export default () => {
44 const [ BASE_SCORE , SCORE_EXPONENT ] = [ 100 , 1.5 ] ;
55 const ANIM_SPEED = 100 ;
66 const SHORTEST_CHAIN = 3 ;
7+ const CONTINUE_BONUS = 5 ;
78 const MAIN_BOARD = document . getElementById ( 'puz_board' ) ;
89 const DIV_PUZ_DISPLAY = document . getElementById ( 'puz_display' ) ;
910 const DIV_PUZ_INFO = document . getElementById ( 'puz_info' ) ;
1011 const DIV_TARGET_INFO = document . getElementById ( 'target_info' ) ;
1112 const [ ALT_ORB , ALT_OBJECT , ALT_FIELD ] = [ "□🔴🔵🟢🟡🟣" , "□🧱🌸" , "□🥬" ] ;
12- const ENUM_STATUS = Object . freeze ( {
13- CHAINING : 0 ,
14- IDLE : 1 ,
15- ANIMATION : 2
16- } ) ;
13+ const ENUM_STATUS = Object . freeze ( { CHAINING : 0 , IDLE : 1 , ANIMATION : 2 } ) ;
1714 // SECTOR_2:変数群
1815 let game_state = ENUM_STATUS . CHAINING ;
1916 let chain_color = null ;
20- let chain_yx = new Array ( ) ; //[i].(x | y)
21- let adj_list = new Array ( ) ; //[i].(y | x)
17+ let chain_yx = [ ] ; //[i].(x | y)
2218 //SECTOR_2.5:準const変数群
23- let PUZ_BOARD_BONE = new Array ( ) ;
19+ let PUZ_BOARD_BONE = [ ] ;
2420 let DATA = { } ;
2521 // SECTOR 3 : 関数群
2622 /**@todo Dateオブジェクトなど、一部のオブジェクトがコピーできないのでその対策。 */
2723 const object_copy = obj => JSON . parse ( JSON . stringify ( obj ) ) ;
28-
2924 /**
3025 * Array.everyのobject版です。
3126 * @param {object } obj
@@ -54,6 +49,7 @@ export default () => {
5449 const is_adj_break = obj => [ - 2 ] . includes ( getType ( obj ) ) ;
5550 const dest_sync = field => [ 1 ] . includes ( getType ( field ) ) ;
5651 const alt_text = ( type , isobj ) => isobj ?( type < 0 ?ALT_OBJECT [ - type ] :ALT_ORB [ type ] ) :ALT_FIELD [ type ] ;
52+ const get_img = ( type , isobj ) => `<img src="Pictures/${ isobj ?"Orbs" :"Fields" } /${ type } .svg",width="40" height="40" alt="${ alt_text ( type , isobj ) } ">` ;
5753 const update_cell = ( y , x ) => {
5854 const CELL = PUZ_BOARD_BONE [ y ] [ x ] ;
5955 [ CELL . querySelector ( "img.object" ) . src , CELL . querySelector ( "img.field" ) . src ,
@@ -66,8 +62,9 @@ export default () => {
6662 DIV_PUZ_INFO . innerText = `Score : ${ DATA . target . score } Hand : ${ DATA . target . hand } ` ;
6763 }
6864 /** @todo 文字サイズ */
69- const updateTarget = ( ) => DIV_TARGET_INFO . innerHTML = Object . keys ( DATA . target . obj ) . map ( str => Number ( str ) ) . map ( type => `<img src="Pictures/Orbs/${ type } .svg",width="40" height="40" alt="${ alt_text ( type , true ) } ">` + "x" + String ( DATA . target . obj [ type ] ) ) . toString ( ) + "," +
70- Object . keys ( DATA . target . field ) . map ( str => Number ( str ) ) . map ( type => `<img src="Pictures/Fields/${ type } .svg",width="40" height="40" alt="${ alt_text ( type , false ) } ">` + "x" + String ( DATA . target . field [ type ] ) ) . toString ( ) ;
65+ const updateTarget = ( ) => DIV_TARGET_INFO . innerHTML =
66+ Object . keys ( DATA . target . obj ) . map ( Number ) . map ( type => get_img ( type , true ) + "x" + String ( DATA . target . obj [ type ] ) ) . toString ( ) + "," +
67+ Object . keys ( DATA . target . field ) . map ( Number ) . map ( type => get_img ( type , false ) + "x" + String ( DATA . target . field [ type ] ) ) . toString ( ) ;
7168
7269 const obj_erase = obj => [ obj [ 0 ] , obj [ 1 ] ] = [ 0 , 0 ] ;
7370 const break_obj = ( y , x , ischain , isobj = true ) => {
@@ -119,6 +116,7 @@ export default () => {
119116 chain_yx . push ( { x : CELL_X , y : CELL_Y } ) ;
120117 }
121118 const chain_over = ( ) => {
119+ let adj_list = [ ] ;
122120 if ( ! ( chain_yx . length < SHORTEST_CHAIN ) ) {
123121 addScore ( chain_yx . length ** SCORE_EXPONENT ) ;
124122 DATA . target . hand -- ;
@@ -139,8 +137,12 @@ export default () => {
139137 game_state = ENUM_STATUS . IDLE ;
140138 chain_yx . forEach ( pos => PUZ_BOARD_BONE [ pos . y ] [ pos . x ] . querySelector ( "img" ) . classList . remove ( "chaining" ) ) ;
141139 chain_color = null ;
142- adj_list = chain_yx = [ ] ;
140+ chain_yx = [ ] ;
143141 if ( DATA . target . hand <= 0 ) {
142+ if ( confirm ( `コンテニューしますか?(手数+${ CONTINUE_BONUS } )` ) ) {
143+ DATA . target . hand += CONTINUE_BONUS ;
144+ return ;
145+ }
144146 alert ( `ゲームオーバー! スコアは${ DATA . target . score } でした!` ) ;
145147 endscene ( ) ;
146148 }
@@ -187,7 +189,7 @@ export default () => {
187189 const board_init = ( ) => {
188190 load_board ( ) ;
189191 falling_orb ( ) ;
190- adj_list = chain_yx = [ ] ;
192+ chain_yx = [ ] ;
191193 update_display ( ) ;
192194 updateTarget ( ) ;
193195 }
@@ -196,8 +198,7 @@ export default () => {
196198 if ( isNaN ( StageID ) ) endscene ( TypeError ( `GUARD! StageID ${ StageID } is NaN` ) ) ;
197199 const DATALINK = "../Data/Stage/" + StageID + ".js" ;
198200 DIV_PUZ_DISPLAY . style . display = "block" ;
199- import ( DATALINK )
200- . then ( x => { DATA = object_copy ( x . default ) ; board_init ( ) } ) . catch ( x => endscene ( x ) ) ;
201+ import ( DATALINK ) . then ( x => { DATA = object_copy ( x . default ) ; board_init ( ) } ) . catch ( endscene ) ;
201202 }
202203 document . getElementById ( 'move_GAME' ) . onclick = startgame ;
203204}
0 commit comments