javaScriptで作成中のオセロゲームがうまく動作しない
現在javascriptで簡単なオセロゲームを作っています。
駒の置き合いはできて、駒の数を集計し勝敗を決めるシステムを作ろうとしたところ、今まで表示されていた画像諸々消えてしまいボタンだけが残ってしまいました。
発生している問題・エラーメッセージ
Uncaught SyntaxError: Invalid or unexpected token Uncaught ReferenceError: init is not defined
該当のソースコード
<!DOCTYPE HTML> <html> <head> <script type="text/javascript"> var Flag=true; // 白黒手番フラグ var M=[[0,0,0,0,0,0,0,0,0,0], // 盤面情報配列 [0,0,0,0,0,0,0,0,0,0], // 0:駒無し [0,0,0,0,0,0,0,0,0,0], // 1:白駒 [0,0,0,0,0,0,0,0,0,0], // 2:黒駒 [0,0,0,0,1,2,0,0,0,0], [0,0,0,0,2,1,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0]]; function ok(y,x) // 置けるか調べる関数 { var ry,rx,dy,dx; if (Flag) M[y][x]=2; // 黒を置く else M[y][x]=1; // 白を置く for (dx=-1;dx<=1;dx++){ for (dy=-1;dy<=1;dy++){ if (!(dx==0 && dy==0) && M[y][x]!=[y+dy][x+dx]){ rx=x;ry=y; while (1<=rx && rx<=8 && 1<=ry && ry<=8 && M[ry][rx]!=0 ){ rx+=dx;ry+=dy; if (M[y][x]==M[ry][rx]){ return true; } } } } } M[y][x]=0; // 駒のない状態に戻す return false; } function yx(event) //クリックイベント処理関数 { var y,x,n,obj,ban; y=Math.floor(event.clientY/50); x=Math.floor(event.clientX/50); n=(y-1)*8+(x-1); obj=document.getElementById("img"+n); ban=document.getElementById("img64"); if (M[y][x]==0 && ok(y,x)) { obj.src="black.jpg"; M[y][x]=2; reverse(y,x); Flag=!Flag; ban.src="white.jpg"; setTimeout("computer()",3000); // コンピュータの手 } else if (M[y][x]==1){ // 白駒 obj.src="black.jpg"; M[y][x]=2; } else if (M[y][x]==2){ // 黒駒 obj.src="white.jpg"; M[y][x]=1; } } function init() // 盤面初期化関数 { var y,x,img,n=0,tag=""; for (y=50;y<=50*8;y+=50){ for (x=50;x<=50*8;x+=50){ if (n==27 || n==36){ // 白い駒 img="<img src='white.jpg'"; } else if (n==28 || n==35){ // 黒い駒 img="<img src='black.jpg'"; } else { // 駒無し img="<img src='green.jpg'"; } tag+=img+" id='img"+n+"' style='position:absolute;left:"+x+"px;top:"+y+"px' onClick='yx(event)' />"; n++; } } tag+="<img id='img64' src='black.jpg' style='position:absolute;left:500px;top:50px' />"; document.getElementById("canvas").innerHTML=tag; } function reverse(y,x) // 自動反転関数 { var ry,rx,dy,dx,n,obj; for (dx=-1;dx<=1;dx++){ for (dy=-1;dy<=1;dy++){ if (!(dx==0 && dy==0) && M[y][x]!=M[y+dy][x+dx]){ ry=y;rx=x; while (1<=rx && rx<=8 && 1<=ry && ry<=8 && M[ry][rx]!=0){ ry+=dy;rx+=dx; if (M[y][x]==M[ry][rx]){ // 同じ色の駒 ry-=dy;rx-=dx; // 1つ戻す while (!(x==rx && y==ry)){ n=(ry-1)*8+(rx-1); obj=document.getElementById("img"+n); if (M[ry][rx]==1){ // 白なら黒に obj.src="black.jpg"; M[ry][rx]=2; } else { // 黒なら白に obj.src="white.jpg"; M[ry][rx]=1; } ry-=dy;rx-=dx; // 逆戻り } break; } } } } } } function computer() // コンピュータの手関数 { var i,y,x,n,obj,ban,max=0; for (y=1;y<=8;y++){ for (x=1;x<=8;x++){ if (M[y][x]==0 && ok(y,x)){ M[y][x]=1; // 仮に置く n=check(y,x); if (n>max){ max=n; yy=y;xx=x; } M[y][x]=0; // 戻す } } } if (max!=0){ n=(yy-1)*8+(xx-1); obj=document.getElementById("img"+n); obj.src="white.jpg"; M[yy][xx]=1; reverse(yy,xx); } ban=document.getElementById("img64"); ban.src="black.jpg"; Flag=!Flag; } function check(y,x) // y,x位置に置いたときにひっくり返せる数を求める関数 { var dy,dx,ry,rx,n=0; for (dx=-1;dx<=1;dx++){ for (dy=-1;dy<=1;dy++){ if (!(dx==0 && dy==0) && M[y][x]!=M[y+dy][x+dx]){ ry=y;rx=x; while (1<=rx && rx<=8 && 1<=ry && ry<=8 && M[ry][rx]!=0){ ry+=dy;rx+=dx; if (M[y][x]==M[ry][rx]){ // 同じ色の駒 ry-=dy;rx-=dx; // 1つ戻す while (!(x==rx && y==ry)){ n++; ry-=dy;rx-=dx; // 逆戻り } break; } } } } } return n; } function judge(){ var x,y,white=0,black=0; for(y=1;y<=8;y++){ for(x=1;x<=8;x++){ if (M[y][x].equals("1")) white++; else if (M[y][x].equals("2")) black++; } } if (black == white) { document.getElementById("draw").src="DRAW.jpg"; draw.style.visibility="visible"; } else if (black > white) { document.getElementById("winblack").src="winnerBLACK.jpg"; black.style.visibility="visible"; } else { document.getElementById("winwhite").src="winnerWHITE.jpg"; white.style.visibility="visible"; } } </script> </head> <body> <input type="button" value="GAMESET" onClick="judge()" style="position:absolute;left:210px;top:460px" /> <div id="canvas"> </div> <img id="winwhite" src="winnerWHITE.jpg" style="position:absolute;left:150px;top:200px;visibility:hidden" /> <img id="draw" src="DRAW.jpg" style="position:absolute;left:150px;top:200px;visibility:hidden" /> <img id="winblack" src="winnerBLACK.jpg" style="position:absolute;left:150px;top:200px;visibility:hidden" /> <script type="text/javascript"> init(); </script> </body> </html>
試したこと
画像のコードで問題になりうるところは見受けられませんでした。
補足情報(FW/ツールのバージョンなど)
MonacaCloudIDEで作成しています。プレビュータブの機種はAndroidのGalaxyS8(1440×2960)です。
回答2件
あなたの回答
tips
プレビュー