という方、初学者向けの解説記事です。
この記事を読めば、下記のようなオセロゲームを作ることができます。
この記事を読んでできること
・オセロの作り方を理解することができる
・簡単なCPUを実装することができる
対象読者様
②コードの意味・作り方を理解したい方
上記のような読者様を想定しております。
当記事では javascriptで初めて何かを作りたい方 を想定している為
4つのパートに分けて解説をしていきます。
今回はテーブルと白黒の石を表示させるところまで解説していきます。
概要説明
ポイントは3つです。
②関数 init()/put() を完成させる
③関数 kousin() を完成させる
関数がたくさんでてきて難しく感じる方もいるかと思いますが
②は当サイトで解説している15パズルの応用で
③にいたってはコピペたった5行の簡単な関数です。
【JavaScript】 15パズルの作り方を初学者向けに1行づつ解説!特別な知識は必要なく、楽しく作ることができます。
順に見ていきましょう。
解説①html/CSSを準備しよう
まず、盤面8×8のマスを作成することを考えましょう。こちらをご覧ください。
画像のように背景(#table)の上にマス目の色(td.masu)を乗せるようにすれば
マス目をきれいに作ることができます。該当コードがこちら
<head>
<meta charset="UTF-8">
<title>オセロ</title>
<script src="main.js"></script>
<style>
body{
background-color: black
}
h3{
color:white;
}
#table{
background-color:#555000;
}
td.masu{
background-color:#54b549;
width:40px;
height:40px;
margin:2px;
font-size:20px;
text-align:center;
}
td.black{
color:black;
}
td.white{
color:white;
}
</style>
</head>
<body>
<h3 class="white">
白(YOU):<span id="countWhite"></span>枚
</h3>
<table id="table"></table>
<h3 class="black">
黒(CPU):<span id="countBlack"></span>枚
</h3>
</body>
</html>
tr.tdはjavascriptで追加しよう
<table id="table">
のみ記載しています。tr.tdはinit()で<table id="table">
子要素として追加します。また、<span id=”
countBlack
“><span id=”countWhite
“>もinit()関数で扱いますのでこちらも後述致します。
解説②init()/kousin() 関数を作成しよう!
まず、init()関数から解説します。
function init() {
let table = document.getElementById("table");
for (let i = 0; i < 8; i++) {
let yokoretu = document.createElement("tr");
data[i] = [0, 0, 0, 0, 0, 0, 0, 0];
for (let j = 0; j < 8; j++) {
let itimasu = document.createElement("td");
itimasu.className = "masu";
itimasu.id = "masu" + i + j;
yokoretu.appendChild(itimasu);}
table.appendChild(yokoretu);
}
//初期配置
put(3, 3, SIRO);
put(4, 4, SIRO);
put(3, 4, KURO);
put(4, 3, KURO);
kousin();
}
init()関数
まずはtr:yokoretu
/td:itimasu
を<table id="table">
の子要素として追加します。
もし、for文の中にfor文がよく分からない方は↓のfor文を使おう!をご参考下さい。
【JavaScript】 15パズルの作り方を初学者向けに1行づつ解説!
続いてdata[i] = [0, 0, 0, 0, 0, 0, 0, 0]
を設定します。
data[i][j]を座標に見立てます。
これすればitimasu.id = "masu" + i + j
で特定の1マスを
data[0][3]やdata[2][6]で表現することができます。
最後にput(3, 3, SIRO)
で初期配置の石を置いて終了です。
※参考画像では黒が置かれていますが、白が置かれます※
put()関数
function put(i, j, color) {
let masu = document.getElementById("masu" + i + j);
masu.textContent = "●";
masu.className = "masu " + (color === SIRO ? "white" : "black" );
data[i][j] = color;
}
このput関数が入る前、全ての座標がdata[0][0]です。
新たに石を置きたい[i][j]を引数に代入します。
まず、変数masu
に"masu" + i + j
を格納して"●"
をtextContentとして代入します。
次にclassNameを設定しますので、置きたい石の色をcolorとして代入します。
白か黒かを(color === SIRO ? "white" : "black" )
で判定します。
ポイントはmasu
にスペースがあること。
最終的なクラス名が”masu black
“か”masu white
“となり、色をつけることができます。
最後にkousin()関数で使う為、data[i][j] = color
を設定し完了です。
解説③update() 関数を作成しよう!
これで最後です!もう少し頑張りましょう!
function kousin() {
//白と黒の数を数えて、表示する
let countBlack = 0;
let countWhite = 0;
for (let x = 0; x < 8; x++) {
for (let y = 0; y < 8; y++) {
if (data[x][y] === SIRO) {
countWhite++;
if (data[x][y] === KURO) {
countBlack++;
}
}
}
}
document.getElementById("countWhite").textContent = countWhite;
document.getElementById("countBlack").textContent = countBlack;
}
この関数を作成する意味はこちら
・白/黒のあるマスを数える
・↓の画像に数えた数を代入する
赤色部分は見覚えがあると思います。
そうです。マス目を作成するためにfor文でi/jを8回まわしたからです。
for文で同じように回せば、結果としてマス目すべてを参照できます。
data[x][y] = color の使いどころ
続いてif文を見てみましょう。
data[x][y] === KURO
とdata[x][y] === SIRO
に一致したら
countBlack++
とcountWhite++
それぞれでカウントしなさいという意味です。
これはput()関数の最後に設定したdata[i][j] = color
を参照します。
このKUROとSIRO、元をたどるとput(i,j,color)で代入されたcolorです。
つまり、置きたい色の石を代入した瞬間にカウントされるということです。
document.getElementById(“●●”).textContent
この部分、初見の方はビックリすると思いますが、、、
let ●● = document.getElementById("countBlack")
●●.textContent = countBlack;
document.getElementById("countBlack").textContent = countBlack;
覚えておくと、コード量を削減できるのでおすすめです。
まとめ
ここまででテーブルと白黒の石を表示させる編終了です!
お疲れさまでした!
難しく感じる方も多いと思いますが、できるだけ分かりやすく解説できればと思います。
次も頑張りましょう!
次:【JavaScript】リバーシ(オセロ)の作り方を初学者向けに1行づつ解説!②