28 // shapesからランダムにブロックのパターンを出力し、盤面の一番上へセットする 29 function newShape() { 30 var id = Math.floor( Math.random() * shapes.length ); // ランダムにインデックスを出す 31 var shape = shapes[ id ]; 32 // パターンを操作ブロックへセットする 33 current = []; 34 for ( var y = 0; y < 4; ++y ) { 35 current[ y ] = []; 36 for ( var x = 0; x < 4; ++x ) { 37 var i = 4 * y + x; 38 if ( typeof shape[ i ] != 'undefined' && shape[ i ] ) { 39 current[ y ][ x ] = id + 1; 40 } 41 else { 42 current[ y ][ x ] = 0; 43 } 44 } 45 } 46 // ブロックを盤面の上のほうにセットする 47 currentX = 5; 48 currentY = 0; 49 } 50
51 // 盤面を空にする 52 function init() { 53 for ( var y = 0; y < ROWS; ++y ) { 54 board[ y ] = []; 55 for ( var x = 0; x < COLS; ++x ) { 56 board[ y ][ x ] = 0; 57 } 58 } 59 } 60
83 // 操作ブロックを盤面にセットする関数 84 function freeze() { 85 for ( var y = 0; y < 4; ++y ) { 86 for ( var x = 0; x < 4; ++x ) { 87 if ( current[ y ][ x ] ) { 88 board[ y + currentY ][ x + currentX ] = current[ y ][ x ]; 89 } 90 } 91 } 92 } 93
94 // 操作ブロックを回す処理 95 function rotate( current ) { 96 var newCurrent = []; 97 for ( var y = 0; y < 4; ++y ) { 98 newCurrent[ y ] = []; 99 for ( var x = 0; x < 4; ++x ) { 100 newCurrent[ y ][ x ] = current[ 3 - x ][ y ]; 101 } 102 } 103 return newCurrent; 104 } 105
106 // 一行が揃っているか調べ、揃っていたらそれらを消す 107 function clearLines() { 108 for ( var y = ROWS - 1; y >= 0; --y ) { 109 var rowFilled = true; 110 // 一行が揃っているか調べる 111 for ( var x = 0; x < COLS; ++x ) { 112 if ( board[ y ][ x ] == 0 ) { 113 rowFilled = false; 114 break; 115 } 116 } 117 // もし一行揃っていたら, サウンドを鳴らしてそれらを消す。 118 if ( rowFilled ) { 119 document.getElementById( 'clearsound' ).play(); // 消滅サウンドを鳴らす 120 // その上にあったブロックを一つずつ落としていく 121 for ( var yy = y; yy > 0; --yy ) { 122 for ( var x = 0; x < COLS; ++x ) { 123 board[ yy ][ x ] = board[ yy - 1 ][ x ]; 124 } 125 } 126 ++y; // 一行落としたのでチェック処理を一つ下へ送る 127 } 128 } 129 } 130
131
132 // キーボードが押された時に呼び出される関数 133 function keyPress( key ) { 134 switch ( key ) { 135 case 'left': 136 if ( valid( -1 ) ) { 137 --currentX; // 左に一つずらす 138 } 139 break; 140 case 'right': 141 if ( valid( 1 ) ) { 142 ++currentX; // 右に一つずらす 143 } 144 break; 145 case 'down': 146 if ( valid( 0, 1 ) ) { 147 ++currentY; // 下に一つずらす 148 } 149 break; 150 case 'rotate': 151 // 操作ブロックを回す 152 var rotated = rotate( current ); 153 if ( valid( 0, 0, rotated ) ) { 154 current = rotated; // 回せる場合は回したあとの状態に操作ブロックをセットする 155 } 156 break; 157 } 158 } 159
160 // 指定された方向に、操作ブロックを動かせるかどうかチェックする 161 // ゲームオーバー判定もここで行う 162 function valid( offsetX, offsetY, newCurrent ) { 163 offsetX = offsetX || 0; 164 offsetY = offsetY || 0; 165 offsetX = currentX + offsetX; 166 offsetY = currentY + offsetY; 167 newCurrent = newCurrent || current; 168 for ( var y = 0; y < 4; ++y ) { 169 for ( var x = 0; x < 4; ++x ) { 170 if ( newCurrent[ y ][ x ] ) { 171 if ( typeof board[ y + offsetY ] == 'undefined' 172 || typeof board[ y + offsetY ][ x + offsetX ] == 'undefined' 173 || board[ y + offsetY ][ x + offsetX ] 174 || x + offsetX < 0 175 || y + offsetY >= ROWS 176 || x + offsetX >= COLS ) { 177 if (offsetY == 1 && offsetX-currentX == 0 && offsetY-currentY == 1){ 178 console.log('game over'); 179 lose = true; // もし操作ブロックが盤面の上にあったらゲームオーバーにする 180 } 181 return false; 182 } 183 } 184 } 185 } 186 return true; 187 } 188
기자) 캘리포니아 라디오 방송 진행자 리앤 트위든 씨의 말인데요. 11년 전에 아프가니스탄 주둔 미군을 위한 위문 공연을 준비하던 중 프랑켄 씨가 임의로 대본을 바꾸더니 강제로 입맞춤을 했다는 겁니다. 또 귀국길 비행기 안에서 잠들었을 때 프랑켄 씨가 자신의 가슴을 만졌다며 사진을 공개했는데요. 프랑켄 씨가 잠든 트위든 씨의 가슴에 손을 가져가며 웃고 있는 모습의 사진입니다.
소아 마비(infantile paralysis, 小兒痲痹; commonly polio; poliomyelitis)는 일반인들에게 흔히 알려진 폴리오(Polio) 바이러스에 의한 신경계의 감염으로 발생하며 척수성 소아 마비의 형태로 발병한다. 5세 이하의 아이가 걸리는 경향이 많아 병명에 소아(小兒;infantile)가 들어가지만, 아이만 걸리는 병은 아니다. 다시 설명하겠지만 FDR처럼 성인이 되고 나서도 걸리는 경우가 있다.