Javascriptでオセロをつくる 第1回
オセロ盤と石をつくる
まずオセロ盤と石をHTMLとCSSでつくります。オセロ盤はtableで、石は角を丸めたdivでつくってみます。
othello1.htmlのソース
<!DOCTYPE html> <html> <head> <style type='text/css'><!-- table#board { background-color: black; } table#board td { width: 30px; height: 30px; background-color: green; padding: 5px; } div.black { background-color: black; width: 30px; height: 30px; border-radius: 50%; } div.white { background-color: white; width: 30px; height: 30px; border-radius: 50%; } --></style> </head> <body> <table id='board'> <tr> <td><div></div></td> <td><div></div></td> </tr> <tr> <td><div class='black'></div></td> <td><div class='white'></div></td> </tr> </table> <div id='status'></div> </body> </html>
othello1.htmlの実行結果
下に表示されないときはここをクリック(別ウィンドウが開きます)
8×8に拡張
オセロ盤は8×8で、これを全部書くのは面倒なので、Javascriptでマス目も書くようにします。HTMLの要素を楽に扱うためにjquery.jsを導入します。
othello2.htmlのソース
<!DOCTYPE html> <html> <head> <style type='text/css'><!-- table#board { background-color: black; } table#board td { width: 30px; height: 30px; background-color: green; padding: 5px; } div.black { background-color: black; width: 30px; height: 30px; border-radius: 50%; } div.white { background-color: white; width: 30px; height: 30px; border-radius: 50%; } --></style> <!-- 追加 ここから --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type='text/javascript'><!-- jQuery(function (){ for(var r = 0 ; r < 8 ; r ++){ var tr = $("<tr>"); // tr要素をつくる for(var c = 0 ; c < 8 ; c ++){ tr.append($('<td><div class="none"></div></td>')); // td要素をつくってtr要素に追加する } $('table#board').append(tr); // tr要素をtableに追加する } }); --></script> <!-- 追加 ここまで --> </head> <body> <table id='board'> </table> <div id='status'></div> </body> </html>
othello2.htmlの実行結果
下に表示されないときはここをクリック(別ウィンドウが開きます)
石を置く、ひっくり返す
オセロ盤をクリックすることで、白黒の石をおいたりひっくり返したりできるようにします。
まだ石が置かれていないマスをクリックすると、石が置かれます。置いたあとで、挟んだ石をクリックしてひっくり返します。全てひっくり返したあとで次の手を置きます。
ちゃんと操作方法を理解していれば遊べますが、間違えたときに戻せないので慎重に遊ぶ必要があります。
othello3.htmlのソース
<!DOCTYPE html> <html> <head> <style type='text/css'><!-- table#board { background-color: black; } table#board td { width: 30px; height: 30px; background-color: green; padding: 5px; } div.black { background-color: black; width: 30px; height: 30px; border-radius: 50%; } div.white { background-color: white; width: 30px; height: 30px; border-radius: 50%; } --></style> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script type='text/javascript'><!-- var turn = 1; // 石の白黒 jQuery(function (){ for(var r = 0 ; r < 8 ; r ++){ var tr = $("<tr>"); for(var c = 0 ; c < 8 ; c ++){ tr.append($('<td><div class="none"></div></td>') .click(function (e){ // tdがクリックされたときの動作 var disc = $('div', this); // クラスを変更するdiv要素を取得 if(disc.hasClass('none')){ // 石が置かれていないとき disc.removeClass('none'); disc.addClass(turn == 1 ? 'black' : 'white'); turn *= -1; // 白黒を逆にする $('div#status').html((turn == 1 ? '黒' : '白') + 'の番'); // 挟んだ石をひっくり返す }else{ disc.removeClass(turn == 1 ? 'black' : 'white'); disc.addClass(turn == 1 ? 'white' : 'black'); } }) ); } $('table#board').append(tr); } // 初期配置 $('table#board').find('tr').eq(3).find('td').eq(3).click(); // trの3番目のtdの3番目をクリック $('table#board').find('tr').eq(3).find('td').eq(4).click(); $('table#board').find('tr').eq(4).find('td').eq(4).click(); $('table#board').find('tr').eq(4).find('td').eq(3).click(); }); --></script> </head> <body> <table id='board'> </table> <div id='status'></div> </body> </html>
othello3.htmlの実行結果
下に表示されないときはここをクリック(別ウィンドウが開きます)
自動的に石を返す
次回に続く。