javascriptで作るオセロ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ksk0629
記事: 16
登録日時: 10年前

javascriptで作るオセロ

#1

投稿記事 by ksk0629 » 10年前

今monacaを使ってjavascriptでオセロを作っています。
ですが問題点があり、それが何故起こってしまうのかがわからないので、教えていただきたく掲示板を立てさせていただきました。
どうかよろしくお願いします。

問題点1.
htmlのコード97行目にてonclickでpassの関数を使用するようにしているのですが、押しても全く反応がありません。pass関数最初の数行の、turnの入れ替えさえ行えません。

問題点2.
基本は大丈夫なのですが、ゲームが進んでくると空きマスを押したときになぜかフリーズします。いつも決まった場所ではないと思います。
フリーズの際に読み込んでいる行は
68,98,130,165,200,235,269,303,340,370,402,436,471,505,539,573
といった、for文の行です。
どの行で止まるかはまちまちです。


分かる方よろしくお願いします。


htmlのコード↓(行数を表示させるためC++のコードとして貼り付けます。)

コード:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <script src="game2.js"></script>
    <link rel="stylesheet" href="components/loader.css">
    <script>
        // Set virtual screen width size to 640 pixels
        monaca.viewport({width: 640});      
    </script>
    <style>
        table{       
            margin:auto;
        }
    </style>
</head>
<body>
    <table>
        <tr>
            <td><img id="a1" src="image/blank.png" width="100%" height="100%" onclick="main(0)"></td>
            <td><img id="b1" src="image/blank.png" width="100%" height="100%" onclick="main(1)"></td>
            <td><img id="c1" src="image/blank.png" width="100%" height="100%" onclick="main(2)"></td>
            <td><img id="d1" src="image/blank.png" width="100%" height="100%" onclick="main(3)"></td>
            <td><img id="e1" src="image/blank.png" width="100%" height="100%" onclick="main(4)"></td>
            <td><img id="f1" src="image/blank.png" width="100%" height="100%" onclick="main(5)"></td>
            <td><img id="g1" src="image/blank.png" width="100%" height="100%" onclick="main(6)"></td>
            <td><img id="h1" src="image/blank.png" width="100%" height="100%" onclick="main(7)"></td>
        </tr>
            <td><img id="a2" src="image/blank.png" width="100%" height="100%" onclick="main(8)"></td>
            <td><img id="b2" src="image/blank.png" width="100%" height="100%" onclick="main(9)"></td>
            <td><img id="c2" src="image/blank.png" width="100%" height="100%" onclick="main(10)"></td>
            <td><img id="d2" src="image/blank.png" width="100%" height="100%" onclick="main(11)"></td>
            <td><img id="e2" src="image/blank.png" width="100%" height="100%" onclick="main(12)"></td>
            <td><img id="f2" src="image/blank.png" width="100%" height="100%" onclick="main(13)"></td>
            <td><img id="g2" src="image/blank.png" width="100%" height="100%" onclick="main(14)"></td>
            <td><img id="h2" src="image/blank.png" width="100%" height="100%" onclick="main(15)"></td>
        <tr>
            <td><img id="a3" src="image/blank.png" width="100%" height="100%" onclick="main(16)"></td>
            <td><img id="b3" src="image/blank.png" width="100%" height="100%" onclick="main(17)"></td>
            <td><img id="c3" src="image/blank.png" width="100%" height="100%" onclick="main(18)"></td>
            <td><img id="d3" src="image/blank.png" width="100%" height="100%" onclick="main(19)"></td>
            <td><img id="e3" src="image/blank.png" width="100%" height="100%" onclick="main(20)"></td>
            <td><img id="f3" src="image/blank.png" width="100%" height="100%" onclick="main(21)"></td>
            <td><img id="g3" src="image/blank.png" width="100%" height="100%" onclick="main(22)"></td>
            <td><img id="h3" src="image/blank.png" width="100%" height="100%" onclick="main(23)"></td>
        </tr>
            <td><img id="a4" src="image/blank.png" width="100%" height="100%" onclick="main(24)"></td>
            <td><img id="b4" src="image/blank.png" width="100%" height="100%" onclick="main(25)"></td>
            <td><img id="c4" src="image/blank.png" width="100%" height="100%" onclick="main(26)"></td>
            <td><img id="d4" src="image/siro.png" width="100%" height="100%" onclick="main(27)"></td>
            <td><img id="e4" src="image/kuro.png" width="100%" height="100%" onclick="main(28)"></td>
            <td><img id="f4" src="image/blank.png" width="100%" height="100%" onclick="main(29)"></td>
            <td><img id="g4" src="image/blank.png" width="100%" height="100%" onclick="main(30)"></td>
            <td><img id="h4" src="image/blank.png" width="100%" height="100%" onclick="main(31)"></td>
        <tr>
            <td><img id="a5" src="image/blank.png" width="100%" height="100%" onclick="main(32)"></td>
            <td><img id="b5" src="image/blank.png" width="100%" height="100%" onclick="main(33)"></td>
            <td><img id="c5" src="image/blank.png" width="100%" height="100%" onclick="main(34)"></td>
            <td><img id="d5" src="image/kuro.png" width="100%" height="100%" onclick="main(35)"></td>
            <td><img id="e5" src="image/siro.png" width="100%" height="100%" onclick="main(36)"></td>
            <td><img id="f5" src="image/blank.png" width="100%" height="100%" onclick="main(37)"></td>
            <td><img id="g5" src="image/blank.png" width="100%" height="100%" onclick="main(38)"></td>
            <td><img id="h5" src="image/blank.png" width="100%" height="100%" onclick="main(39)"></td>
        </tr>
        <tr>
            <td><img id="a6" src="image/blank.png" width="100%" height="100%" onclick="main(40)"></td>
            <td><img id="b6" src="image/blank.png" width="100%" height="100%" onclick="main(41)"></td>
            <td><img id="c6" src="image/blank.png" width="100%" height="100%" onclick="main(42)"></td>
            <td><img id="d6" src="image/blank.png" width="100%" height="100%" onclick="main(43)"></td>
            <td><img id="e6" src="image/blank.png" width="100%" height="100%" onclick="main(44)"></td>
            <td><img id="f6" src="image/blank.png" width="100%" height="100%" onclick="main(45)"></td>
            <td><img id="g6" src="image/blank.png" width="100%" height="100%" onclick="main(46)"></td>
            <td><img id="h6" src="image/blank.png" width="100%" height="100%" onclick="main(47)"></td>
        </tr>
        <tr>
            <td><img id="a7" src="image/blank.png" width="100%" height="100%" onclick="main(48)"></td>
            <td><img id="b7" src="image/blank.png" width="100%" height="100%" onclick="main(49)"></td>
            <td><img id="c7" src="image/blank.png" width="100%" height="100%" onclick="main(50)"></td>
            <td><img id="d7" src="image/blank.png" width="100%" height="100%" onclick="main(51)"></td>
            <td><img id="e7" src="image/blank.png" width="100%" height="100%" onclick="main(52)"></td>
            <td><img id="f7" src="image/blank.png" width="100%" height="100%" onclick="main(53)"></td>
            <td><img id="g7" src="image/blank.png" width="100%" height="100%" onclick="main(54)"></td>
            <td><img id="h7" src="image/blank.png" width="100%" height="100%" onclick="main(55)"></td>
        </tr>
        <tr>
            <td><img id="a8" src="image/blank.png" width="100%" height="100%" onclick="main(56)"></td>
            <td><img id="b8" src="image/blank.png" width="100%" height="100%" onclick="main(57)"></td>
            <td><img id="c8" src="image/blank.png" width="100%" height="100%" onclick="main(58)"></td>
            <td><img id="d8" src="image/blank.png" width="100%" height="100%" onclick="main(59)"></td>
            <td><img id="e8" src="image/blank.png" width="100%" height="100%" onclick="main(60)"></td>
            <td><img id="f8" src="image/blank.png" width="100%" height="100%" onclick="main(61)"></td>
            <td><img id="g8" src="image/blank.png" width="100%" height="100%" onclick="main(62)"></td>
            <td><img id="h8" src="image/blank.png" width="100%" height="100%" onclick="main(63)"></td>
        </tr>
     </table>
     
    <img id="pass" src="image/pass.png" width="100%" height="100%" onclick="pass(0)">
     


</body>
</html>
[codeJScript]
// This is a JavaScript file
// 0:blank, 1:black, 2:white
// 0:black turn, 1:white turn

var putok; //put判定
var passnum = 0; //pass回数判別
var turn = 0; //
var board = [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,2,1,0,0,0,
0,0,0,1,2,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];

var id = ["a1","b1","c1","d1","e1","f1","g1","h1",
"a2","b2","c2","d2","e2","f2","g2","h2",
"a3","b3","c3","d3","e3","f3","g3","h3",
"a4","b4","c4","d4","e4","f4","g4","h4",
"a5","b5","c5","d5","e5","f5","g5","h5",
"a6","b6","c6","d6","e6","f6","g6","h6",
"a7","b7","c7","d7","e7","f7","g7","h7",
"a8","b8","c8","d8","e8","f8","g8","h8"];




//元の関数
function main(arg) {

if(board[arg] == 0)
check(arg);

if(putok == 0)
turn = 1;

else if(putok == 1)
turn = 0;

searchblank(arg);
}

//チェック関数
function check(arg) {

var r = 1; //右
var l = -1; //左
var u = 8; //下
var o = -8; //上
var or = -7; // 右上
var ol = -9; //左上
var ur = 9; //右下
var ul = 7; //左下
var j;
var end;

//黒のターン
if(turn == 0) {

//右を調べる
if(arg % 8 != 7) { //右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 1) {} //右が黒 or 空き

else if (board[arg+r] == 2) { //右が白

for(r = 2, end = 0; end == 0; r++) { //右の方を調べる

if((arg+r) % 8 != 7) {

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 1) { //右の方が黒
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}

//左を調べる
if(arg % 8 != 0 || arg == 0) {//左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 1){} //左が黒 or 空き

else if (board[arg+l] == 2) { //左が白

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if(arg % 8 != 0 || arg == 0) {

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 1) { //左の方が黒
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;

}
}
}

//下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0 || board[arg+u] == 1) {}//下が黒 or 空き

else if (board[arg+u] == 2) { //下が白

for(u = 16, end = 0; end == 0; u += 8) { //下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 1) { //下の方が黒
for(j = 0; j < u; j += 8)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0 || board[arg+o] == 1) {} //上が黒 or 空

else if (board[arg+o] == 2) { //上が白

for(o = -16, end = 0; end == 0; o -= 8) { //上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 1) { //上の方が黒
for(j = 0; j > o; j -= 8)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//右上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0 || board[arg+or] == 1) {} //右上が黒 or 空き

else if (board[arg+or] == 2) { //右上が白

for(or = -14, end = 0; end == 0; or -= 7) { //右上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 1) { //右上の方が黒
for(j = 0; j > or; j -= 7)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}

//左上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0 || board[arg+ol] == 1) {} //左上が黒 or 空き

else if (board[arg+ol] == 2) { //左上が白

for(ol = -9, end = 0; end == 0; ol -= 9) { //左上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 1) { //左上の方が黒
for(j = 0; j > ol; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;
}
}
}

//右下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0 || board[arg+ur] == 1) {}//右下が黒 or 空き

else if (board[arg+ur] == 2) { //右下が白

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 1) { //右下の方が黒
for(j = 0; j < ur; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;
}
}
}

//左下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0 || board[arg+ul] == 1) {}//左下が黒 or 空き

else if (board[arg+ul] == 2) { //左下が白

for(ul = 7, end = 0; end == 0; ul += 7) { //左下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 1) { //左下の方が黒
for(j = 0; j < ul; j += 7)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く

}
else
end = 1;
}
}
}
}

//白のターン
else if(turn == 1) {

//右を調べる
if(arg % 8 != 7) {//右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 2) {}//右が白 or 空き

else if (board[arg+r] == 1) { //右が黒

for(r = 2, end = 0; end == 0; r++ ) { //右の方を調べる

if((arg+r) % 8 != 7) {

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 2) { //右の方が白
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//左を調べる
if(arg % 8 != 0 || arg == 0) { //左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 2) {} //左が白 or

else if (board[arg+l] == 1) { //左が黒

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if(arg % 8 != 0 || arg == 0) {

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 2) { //左の方が白
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0 || board[arg+u] == 2) {} //下が白 or 空き

else if (board[arg+u] == 1) { //下が黒

for(u = 16, end = 0; end == 0; u += 8) { //下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 2) { //下の方が白
for(j = 0; j < u; j += 8)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0 || board[arg+o] == 2) {} //上が白 or 空

else if (board[arg+o] == 1) { //上が黒

for(o = -16, end = 0; end == 0; o -= 8) { //上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 2) { //上の方が白
for(j = 0; j > o; j -= 8)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//右上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0 || board[arg+or] == 2) {}//右上が白 or 空き

else if (board[arg+or] == 1) { //右上が黒

for(or = -14, end = 0; end == 0; l -= 7) { //右上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 2) { //右上の方が白
for(j = 0; j > or; j -= 7)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}

//左上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0 || board[arg+ol] == 2) {}//左上が白 or 空き

else if (board[arg+ol] == 1) { //左上が黒

for(ol = -9, end = 0; end == 0; ol -= 9) { //左上の方を調べる

if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 2) { //左上の方が白
for(j = 0; j > ol; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}

//右下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0 || board[arg+ur] == 2) {}//右下が白 or 空き

else if (board[arg+ur] == 1) { //右下が黒

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 2) { //右下の方が白
for(j = 0; j < ur; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end =1;
}
}
}

//左下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0 || board[arg+ul] == 2) {}//左下が白 or 空き

else if (board[arg+ul] == 1) { //左下が黒

for(ul = 7, end = 0; end == 0; ul += 7 ) { //左下の方を調べる

if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 2) { //左下の方が白
for(j = 0; j < ul; j += 7)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}
}
}

//空白を探す関数
function searchblank(arg) {

for(j = 0; j < 64; j++)
if(board[j] == 0)
return;
judge(arg);
}

//置く関数
function put(arg) {

var t = id[arg];
var elem = document.getElementById(t);

if(turn == 0) {
board[arg] = 1;
elem.src = "image/kuro.png";

passnum = 0;

return(0);
}

else if(turn == 1) {
board[arg] = 2;
elem.src = "image/siro.png";

passnum = 0;

return(1);
}
}

//パス数え用
function pass(arg) {

if (turn == 0)
turn = 1;

else if(turn == 1)
turn = 0;

passnum++;

if (passnum == 2)
judge(0);
}

//ジャッジ関数
function judge(arg) {

var j;
var black = 0;
var white = 0;

for(j = 0; j < 64; j++) {
if(board[j] == 1)
black++;

else if(board[j] == 2)
white++;
}

if(black > white)
alert("黒の勝利です");

else if (black < white)
alert("白の勝利です");

else
alert("引き分けです");
}
[/code]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javascriptで作るオセロ

#2

投稿記事 by みけCAT » 10年前

JavaScriptのコードの204行目に全角スペースがあるので、消してください。
ksk0629 さんが書きました:問題点1.
htmlのコード97行目にてonclickでpassの関数を使用するようにしているのですが、押しても全く反応がありません。pass関数最初の数行の、turnの入れ替えさえ行えません。
その行でid="pass"と指定されているため、識別子passが関数ではなくそのimg要素を指しているようです。idまたは関数名を変えてください。
ksk0629 さんが書きました:問題点2.
基本は大丈夫なのですが、ゲームが進んでくると空きマスを押したときになぜかフリーズします。いつも決まった場所ではないと思います。
フリーズの際に読み込んでいる行は
68,98,130,165,200,235,269,303,340,370,402,436,471,505,539,573
といった、for文の行です。
どの行で止まるかはまちまちです。
盤面の外を見てしまっているようです。添字が意図した範囲内に収まっているかのチェックをしてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ksk0629
記事: 16
登録日時: 10年前

Re: javascriptで作るオセロ

#3

投稿記事 by ksk0629 » 10年前

みけCATさんありがとうございます。
問題点2は解決することが出来ました。
みけCTAさんのアドバイスどおり
止まってしまう行の下にその横の横が盤から出てしまわないかのコードを入れたつもりなのですが、未だに止まってしまいます。
なぜでしょうか?
新しく書き直したコードを張ります。
アドバイスお願いします。

[codeJScript]
// This is a JavaScript file
// 0:blank, 1:black, 2:white
// 0:black turn, 1:white turn

var putok; //put判定
var passnum = 0; //pass回数判別
var turn = 0; //
var board = [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,2,1,0,0,0,
0,0,0,1,2,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];

var id = ["a1","b1","c1","d1","e1","f1","g1","h1",
"a2","b2","c2","d2","e2","f2","g2","h2",
"a3","b3","c3","d3","e3","f3","g3","h3",
"a4","b4","c4","d4","e4","f4","g4","h4",
"a5","b5","c5","d5","e5","f5","g5","h5",
"a6","b6","c6","d6","e6","f6","g6","h6",
"a7","b7","c7","d7","e7","f7","g7","h7",
"a8","b8","c8","d8","e8","f8","g8","h8"];




//元の関数
function main(arg) {

if(board[arg] == 0)
check(arg);

if(putok == 0)
turn = 1;

else if(putok == 1)
turn = 0;

searchblank(arg);
}

//チェック関数
function check(arg) {

var r = 1; //右
var l = -1; //左
var u = 8; //下
var o = -8; //上
var or = -7; // 右上
var ol = -9; //左上
var ur = 9; //右下
var ul = 7; //左下
var j;
var end;

//黒のターン
if(turn == 0) {

//右を調べる
if(arg % 8 != 7) { //右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 1) {} //右が黒 or 空き

else if (board[arg+r] == 2) { //右が白

for(r = 2, end = 0; end == 0; r++) { //右の方を調べる

if((arg+r+1) % 8 != 7) {

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 1) { //右の方が黒
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}

//左を調べる
if(arg % 8 != 0 || arg == 0) {//左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 1){} //左が黒 or 空き

else if (board[arg+l] == 2) { //左が白

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if((arg+l-1) % 8 != 0 || arg == 0) {

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 1) { //左の方が黒
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;

}
}
}

//下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0 || board[arg+u] == 1) {}//下が黒 or 空き

else if (board[arg+u] == 2) { //下が白

for(u = 16, end = 0; end == 0; u += 8) { //下の方を調べる

if((arg+u+8) != 56 && (arg+u+8) != 57 && (arg+u+8) != 58 &&
(arg+u+8) != 59 && (arg+u+8) != 60 && (arg+u+8) != 61 &&
(arg+u+8) != 62 && (arg+u+8) != 63 ) {

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 1) { //下の方が黒
for(j = 0; j < u; j += 8)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0 || board[arg+o] == 1) {} //上が黒 or 空

else if (board[arg+o] == 2) { //上が白

for(o = -16, end = 0; end == 0; o -= 8) { //上の方を調べる

if((arg+o-8) != 0 && (arg+o-8) != 1 && (arg+o-8) != 2 &&
(arg+o-8) != 3 && (arg+o-8) != 4 && (arg+o-8) != 5 &&
(arg+o-8) != 6 && (arg+o-8) != 7 ) {

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 1) { //上の方が黒
for(j = 0; j > o; j -= 8)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//右上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0 || board[arg+or] == 1) {} //右上が黒 or 空き

else if (board[arg+or] == 2) { //右上が白

for(or = -14, end = 0; end == 0; or -= 7) { //右上の方を調べる

if((arg+or-7) != 0 && (arg+or-7) != 1 && (arg+or-7) != 2 &&
(arg+or-7) != 3 && (arg+or-7) != 4 && (arg+or-7) != 5 &&
(arg+or-7) != 6 && (arg+or-7) != 7 && (arg+or-7) % 8 != 7) {

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 1) { //右上の方が黒
for(j = 0; j > or; j -= 7)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}

else
end = 1;
}
}
}

//左上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0 || board[arg+ol] == 1) {} //左上が黒 or 空き

else if (board[arg+ol] == 2) { //左上が白

for(ol = -9, end = 0; end == 0; ol -= 9) { //左上の方を調べる

if((arg+ol-9) != 0 && (arg+ol-9) != 1 && (arg+ol-9) != 2 &&
(arg+ol-9) != 3 && (arg+ol-9) != 4 && (arg+ol-9) != 5 &&
(arg+ol-9) != 6 && (arg+ol-9) != 7 &&
((arg+ol-9) % 8 != 0 || (arg+ol-9) == 0)) {

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 1) { //左上の方が黒
for(j = 0; j > ol; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;
}
}
}

//右下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0 || board[arg+ur] == 1) {}//右下が黒 or 空き

else if (board[arg+ur] == 2) { //右下が白

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる

if((arg+ur+9) != 56 && (arg+ur+9) != 57 && (arg+ur+9) != 58 &&
(arg+ur+9) != 59 && (arg+ur+9) != 60 && (arg+ur+9) != 61 &&
(arg+ur+9) != 62 && (arg+ur+9) != 63 && (arg+ur+9) % 8 != 7) {

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 1) { //右下の方が黒
for(j = 0; j < ur; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
else
end = 1;
}
}
}

//左下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0 || board[arg+ul] == 1) {}//左下が黒 or 空き

else if (board[arg+ul] == 2) { //左下が白

for(ul = 7, end = 0; end == 0; ul += 7) { //左下の方を調べる

if((arg+ul+7) != 56 && (arg+ul+7) != 57 && (arg+ul+7) != 58 &&
(arg+ul+7) != 59 && (arg+ul+7) != 60 && (arg+ul+7) != 61 &&
(arg+ul+7) != 62 && (arg+ul+7) != 63 &&
((arg+ul+7) % 8 != 0 || (arg+ul+7) == 0)) {

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 1) { //左下の方が黒
for(j = 0; j < ul; j += 7)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く

}
else
end = 1;
}
}
}
}

//白のターン
else if(turn == 1) {

//右を調べる
if(arg % 8 != 7) {//右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 2) {}//右が白 or 空き

else if (board[arg+r] == 1) { //右が黒

for(r = 2, end = 0; end == 0; r++ ) { //右の方を調べる

if((arg+r+1) % 8 != 7) {

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 2) { //右の方が白
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//左を調べる
if(arg % 8 != 0 || arg == 0) { //左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 2) {} //左が白 or

else if (board[arg+l] == 1) { //左が黒

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if((arg+l-1) % 8 != 0 || arg == 0) {

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 2) { //左の方が白
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 ) {

if(board[arg+u] == 0 || board[arg+u] == 2) {} //下が白 or 空き

else if (board[arg+u] == 1) { //下が黒

for(u = 16, end = 0; end == 0; u += 8) { //下の方を調べる

if((arg+u+8) != 56 && (arg+u+8) != 57 && (arg+u+8) != 58 &&
(arg+u+8) != 59 && (arg+u+8) != 60 && (arg+u+8) != 61 &&
(arg+u+8) != 62 && (arg+u+8) != 63 ) {

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 2) { //下の方が白
for(j = 0; j < u; j += 8)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}

else
end = 1;
}
}
}

//上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 ) {

if(board[arg+o] == 0 || board[arg+o] == 2) {} //上が白 or 空

else if (board[arg+o] == 1) { //上が黒

for(o = -16, end = 0; end == 0; o -= 8) { //上の方を調べる

if((arg+o-8) != 0 && (arg+o-8) != 1 && (arg+o-8) != 2 &&
(arg+o-8) != 3 && (arg+o-8) != 4 && (arg+o-8) != 5 &&
(arg+o-8) != 6 && (arg+o-8) != 7 ) {

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 2) { //上の方が白
for(j = 0; j > o; j -= 8)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしないでループが続く
}

else
end = 1;
}
}
}


//右上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 && arg % 8 != 7) {

if(board[arg+or] == 0 || board[arg+or] == 2) {}//右上が白 or 空き

else if (board[arg+or] == 1) { //右上が黒

for(or = -14, end = 0; end == 0; l -= 7) { //右上の方を調べる

if((arg+or-7) != 0 && (arg+or-7) != 1 && (arg+or-7) != 2 &&
(arg+or-7) != 3 && (arg+or-7) != 4 && (arg+or-7) != 5 &&
(arg+or-7) != 6 && (arg+or-7) != 7 && (arg+or-7) % 8 != 7) {

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 2) { //右上の方が白
for(j = 0; j > or; j -= 7)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}

//左上を調べる
if(arg != 0 && arg != 1 && arg != 2 &&
arg != 3 && arg != 4 && arg != 5 &&
arg != 6 && arg != 7 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ol] == 0 || board[arg+ol] == 2) {}//左上が白 or 空き

else if (board[arg+ol] == 1) { //左上が黒

for(ol = -9, end = 0; end == 0; ol -= 9) { //左上の方を調べる

if((arg+ol-9) != 0 && (arg+ol-9) != 1 && (arg+ol-9) != 2 &&
(arg+ol-9) != 3 && (arg+ol-9) != 4 && (arg+ol-9) != 5 &&
(arg+ol-9) != 6 && (arg+ol-9) != 7 &&
((arg+ol-9) % 8 != 0 || (arg+ol-9) == 0)) {

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 2) { //左上の方が白
for(j = 0; j > ol; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}

//右下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 && arg % 8 != 7) {

if(board[arg+ur] == 0 || board[arg+ur] == 2) {}//右下が白 or 空き

else if (board[arg+ur] == 1) { //右下が黒

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる

if((arg+ur+9) != 56 && (arg+ur+9) != 57 && (arg+ur+9) != 58 &&
(arg+ur+9) != 59 && (arg+ur+9) != 60 && (arg+ur+9) != 61 &&
(arg+ur+9) != 62 && (arg+ur+9) != 63 && (arg+ur+9) % 8 != 7) {

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 2) { //右下の方が白
for(j = 0; j < ur; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end =1;
}
}
}

//左下を調べる
if(arg != 56 && arg != 57 && arg != 58 &&
arg != 59 && arg != 60 && arg != 61 &&
arg != 62 && arg != 63 &&
(arg % 8 != 0 || arg == 0)) {

if(board[arg+ul] == 0 || board[arg+ul] == 2) {}//左下が白 or 空き

else if (board[arg+ul] == 1) { //左下が黒

for(ul = 7, end = 0; end == 0; ul += 7 ) { //左下の方を調べる

if((arg+ul+7) != 56 && (arg+ul+7) != 57 && (arg+ul+7) != 58 &&
(arg+ul+7) != 59 && (arg+ul+7) != 60 && (arg+ul+7) != 61 &&
(arg+ul+7) != 62 && (arg+ul+7) != 63 &&
((arg+ul+7) % 8 != 0 || (arg+ul+7) == 0)) {

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 2) { //左下の方が白
for(j = 0; j < ul; j += 7)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
else
end = 1;
}
}
}
}
}

//空白を探す関数
function searchblank(arg) {

for(j = 0; j < 64; j++)
if(board[j] == 0)
return;
judge(arg);
}

//置く関数
function put(arg) {

var t = id[arg];
var elem = document.getElementById(t);

if(turn == 0) {
board[arg] = 1;
elem.src = "image/kuro.png";

passnum = 0;

return(0);
}

else if(turn == 1) {
board[arg] = 2;
elem.src = "image/siro.png";

passnum = 0;

return(1);
}
}

//パス数え用
function pass(arg) {

if (turn == 0)
turn = 1;

else if(turn == 1)
turn = 0;

passnum++;

if (passnum == 2)
judge(0);
}

//ジャッジ関数
function judge(arg) {

var j;
var black = 0;
var white = 0;

for(j = 0; j < 64; j++) {
if(board[j] == 1)
black++;

else if(board[j] == 2)
white++;
}

if(black > white)
alert("黒の勝利です");

else if (black < white)
alert("白の勝利です");

else
alert("引き分けです");
}
[/code]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javascriptで作るオセロ

#4

投稿記事 by みけCAT » 10年前

なんというか…申し訳ないですがひどいですね。

例えば
ksk0629 さんが書きました:

コード:

    //下を調べる
        if(arg != 56 && arg != 57 && arg != 58 &&
           arg != 59 && arg != 60 && arg != 61 &&
           arg != 62 && arg != 63 ) {
こういう場所では、本当に全部並べる必要があるのでしょうか?
意味は少し変わりますが、例えば

コード:

if(arg<56 || 63<arg) {
と書いてはいけないのでしょうか?
他の同じように並んでいる部分も同様です。
ksk0629 さんが書きました: 止まってしまう行の下にその横の横が盤から出てしまわないかのコードを入れたつもりなのですが、未だに止まってしまいます。
なぜでしょうか?
判定が甘いです。
例えばこの部分について考えます
ksk0629 さんが書きました:

コード:

    //上を調べる
        if(arg != 0 && arg != 1 && arg != 2 &&
           arg != 3 && arg != 4 && arg != 5 &&
           arg != 6 && arg != 7 ) {
    
            if(board[arg+o] == 0 || board[arg+o] == 1) {} //上が黒 or 空
            
            else if (board[arg+o] == 2) { //上が白
                
                for(o = -16, end = 0; end == 0; o -= 8) { //上の方を調べる
                
                    if((arg+o-8) != 0 && (arg+o-8) != 1 && (arg+o-8) != 2 &&
                       (arg+o-8) != 3 && (arg+o-8) != 4 && (arg+o-8) != 5 &&
                       (arg+o-8) != 6 && (arg+o-8) != 7 ) {
                
                        if(board[arg+o] == 0) //上の方が空き
                            end = 1;  
                        
                        else if (board[arg+o] == 1) { //上の方が黒
                            for(j = 0; j > o; j -= 8)
                                putok = put(arg+j);
                                break;
                        }  
            
                        else
                            end = 0; //白ならば何もしないでループが続く
                    }
                    
                    else
                        end = 1;
                }
            }
           }
例えばarg = 8でここに来たとします。
すると、o = -16のときarg+o-8 == -16になります。
oの値は小さくなる一方なので、(デバッガで値を書き換えるなどしない限り)
(arg+o-8)は永遠に0にも1にも2にも3にも4にも5にも6にも7にもならないはずです。
よって、この判定は無効です。
無駄に複雑に考えず、場外は空きマスとみなすようにするといいでしょう。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ksk0629
記事: 16
登録日時: 10年前

Re: javascriptで作るオセロ

#5

投稿記事 by ksk0629 » 10年前

配列のマスを増やし、checkの関数も直しました。

コード:

<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <script src="game.js"></script>
    <link rel="stylesheet" href="components/loader.css">
    <script>
        // Set virtual screen width size to 640 pixels
        monaca.viewport({width: 640});      
    </script>
    <style>
        table{       
            margin:auto;
        }
    </style>
</head>
<body>
    <table>
        <tr>
            <td><img id="a1" src="image/blank.png" width="100%" height="100%" onclick="main(11)"></td>
            <td><img id="b1" src="image/blank.png" width="100%" height="100%" onclick="main(12)"></td>
            <td><img id="c1" src="image/blank.png" width="100%" height="100%" onclick="main(13)"></td>
            <td><img id="d1" src="image/blank.png" width="100%" height="100%" onclick="main(14)"></td>
            <td><img id="e1" src="image/blank.png" width="100%" height="100%" onclick="main(15)"></td>
            <td><img id="f1" src="image/blank.png" width="100%" height="100%" onclick="main(16)"></td>
            <td><img id="g1" src="image/blank.png" width="100%" height="100%" onclick="main(17)"></td>
            <td><img id="h1" src="image/blank.png" width="100%" height="100%" onclick="main(18)"></td>
        </tr>
            <td><img id="a2" src="image/blank.png" width="100%" height="100%" onclick="main(21)"></td>
            <td><img id="b2" src="image/blank.png" width="100%" height="100%" onclick="main(22)"></td>
            <td><img id="c2" src="image/blank.png" width="100%" height="100%" onclick="main(23)"></td>
            <td><img id="d2" src="image/blank.png" width="100%" height="100%" onclick="main(24)"></td>
            <td><img id="e2" src="image/blank.png" width="100%" height="100%" onclick="main(25)"></td>
            <td><img id="f2" src="image/blank.png" width="100%" height="100%" onclick="main(26)"></td>
            <td><img id="g2" src="image/blank.png" width="100%" height="100%" onclick="main(27)"></td>
            <td><img id="h2" src="image/blank.png" width="100%" height="100%" onclick="main(28)"></td>
        <tr>
            <td><img id="a3" src="image/blank.png" width="100%" height="100%" onclick="main(31)"></td>
            <td><img id="b3" src="image/blank.png" width="100%" height="100%" onclick="main(32)"></td>
            <td><img id="c3" src="image/blank.png" width="100%" height="100%" onclick="main(33)"></td>
            <td><img id="d3" src="image/blank.png" width="100%" height="100%" onclick="main(34)"></td>
            <td><img id="e3" src="image/blank.png" width="100%" height="100%" onclick="main(35)"></td>
            <td><img id="f3" src="image/blank.png" width="100%" height="100%" onclick="main(36)"></td>
            <td><img id="g3" src="image/blank.png" width="100%" height="100%" onclick="main(37)"></td>
            <td><img id="h3" src="image/blank.png" width="100%" height="100%" onclick="main(38)"></td>
        </tr>
            <td><img id="a4" src="image/blank.png" width="100%" height="100%" onclick="main(41)"></td>
            <td><img id="b4" src="image/blank.png" width="100%" height="100%" onclick="main(42)"></td>
            <td><img id="c4" src="image/blank.png" width="100%" height="100%" onclick="main(43)"></td>
            <td><img id="d4" src="image/siro.png" width="100%" height="100%" onclick="main(44)"></td>
            <td><img id="e4" src="image/kuro.png" width="100%" height="100%" onclick="main(45)"></td>
            <td><img id="f4" src="image/blank.png" width="100%" height="100%" onclick="main(46)"></td>
            <td><img id="g4" src="image/blank.png" width="100%" height="100%" onclick="main(47)"></td>
            <td><img id="h4" src="image/blank.png" width="100%" height="100%" onclick="main(48)"></td>
        <tr>
            <td><img id="a5" src="image/blank.png" width="100%" height="100%" onclick="main(51)"></td>
            <td><img id="b5" src="image/blank.png" width="100%" height="100%" onclick="main(52)"></td>
            <td><img id="c5" src="image/blank.png" width="100%" height="100%" onclick="main(53)"></td>
            <td><img id="d5" src="image/kuro.png" width="100%" height="100%" onclick="main(54)"></td>
            <td><img id="e5" src="image/siro.png" width="100%" height="100%" onclick="main(55)"></td>
            <td><img id="f5" src="image/blank.png" width="100%" height="100%" onclick="main(56)"></td>
            <td><img id="g5" src="image/blank.png" width="100%" height="100%" onclick="main(57)"></td>
            <td><img id="h5" src="image/blank.png" width="100%" height="100%" onclick="main(58)"></td>
        </tr>
        <tr>
            <td><img id="a6" src="image/blank.png" width="100%" height="100%" onclick="main(61)"></td>
            <td><img id="b6" src="image/blank.png" width="100%" height="100%" onclick="main(62)"></td>
            <td><img id="c6" src="image/blank.png" width="100%" height="100%" onclick="main(63)"></td>
            <td><img id="d6" src="image/blank.png" width="100%" height="100%" onclick="main(64)"></td>
            <td><img id="e6" src="image/blank.png" width="100%" height="100%" onclick="main(65)"></td>
            <td><img id="f6" src="image/blank.png" width="100%" height="100%" onclick="main(66)"></td>
            <td><img id="g6" src="image/blank.png" width="100%" height="100%" onclick="main(67)"></td>
            <td><img id="h6" src="image/blank.png" width="100%" height="100%" onclick="main(68)"></td>
        </tr>
        <tr>
            <td><img id="a7" src="image/blank.png" width="100%" height="100%" onclick="main(71)"></td>
            <td><img id="b7" src="image/blank.png" width="100%" height="100%" onclick="main(72)"></td>
            <td><img id="c7" src="image/blank.png" width="100%" height="100%" onclick="main(73)"></td>
            <td><img id="d7" src="image/blank.png" width="100%" height="100%" onclick="main(74)"></td>
            <td><img id="e7" src="image/blank.png" width="100%" height="100%" onclick="main(75)"></td>
            <td><img id="f7" src="image/blank.png" width="100%" height="100%" onclick="main(76)"></td>
            <td><img id="g7" src="image/blank.png" width="100%" height="100%" onclick="main(77)"></td>
            <td><img id="h7" src="image/blank.png" width="100%" height="100%" onclick="main(78)"></td>
        </tr>
        <tr>
            <td><img id="a8" src="image/blank.png" width="100%" height="100%" onclick="main(81)"></td>
            <td><img id="b8" src="image/blank.png" width="100%" height="100%" onclick="main(82)"></td>
            <td><img id="c8" src="image/blank.png" width="100%" height="100%" onclick="main(83)"></td>
            <td><img id="d8" src="image/blank.png" width="100%" height="100%" onclick="main(84)"></td>
            <td><img id="e8" src="image/blank.png" width="100%" height="100%" onclick="main(85)"></td>
            <td><img id="f8" src="image/blank.png" width="100%" height="100%" onclick="main(86)"></td>
            <td><img id="g8" src="image/blank.png" width="100%" height="100%" onclick="main(87)"></td>
            <td><img id="h8" src="image/blank.png" width="100%" height="100%" onclick="main(88)"></td>
        </tr>
     </table>
     
    <img id="pa" src="image/pass.png" width="100%" height="100%" onclick="pass(0)">
     


</body>
</html>
[codeJScript]
// This is a JavaScript file
// 0:blank, 1:black, 2:white
// 0:black turn, 1:white turn

var putok; //put判定
var passnum = 0; //pass回数判別
var turn = 0; //
var board = [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,2,1,0,0,0,0,
0,0,0,0,1,2,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];

var id = ["a1","b1","c1","d1","e1","f1","g1","h1",
"a2","b2","c2","d2","e2","f2","g2","h2",
"a3","b3","c3","d3","e3","f3","g3","h3",
"a4","b4","c4","d4","e4","f4","g4","h4",
"a5","b5","c5","d5","e5","f5","g5","h5",
"a6","b6","c6","d6","e6","f6","g6","h6",
"a7","b7","c7","d7","e7","f7","g7","h7",
"a8","b8","c8","d8","e8","f8","g8","h8"];




//元の関数
function main(arg) {

if(board[arg] == 0)
check(arg);

if(putok == 0)
turn = 1;

else if(putok == 1)
turn = 0;

searchblank(arg);
}

//チェック関数
function check(arg) {

var r = 1; //右
var l = -1; //左
var u = 10; //下
var o = -10; //上
var or = -9; // 右上
var ol = -11; //左上
var ur = 11; //右下
var ul = 9; //左下
var j;
var end;

//黒のターン
if(turn == 0) {

//右を調べる
if(arg % 10 != 8) { //右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 1) {} //右が黒 or 空き

else if (board[arg+r] == 2) { //右が白

for(r = 2, end = 0; end == 0; r++) { //右の方を調べる

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 1) { //右の方が黒
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}

//左を調べる
if(arg % 10 != 1) {//左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 1){} //左が黒 or 空き

else if (board[arg+l] == 2) { //左が白

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 1) { //左の方が黒
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}

//下を調べる
if(arg < 81) {

if(board[arg+u] == 0 || board[arg+u] == 1) {}//下が黒 or 空き

else if (board[arg+u] == 2) { //下が白

for(u = 20, end = 0; end == 0; u += 10) { //下の方を調べる

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 1) { //下の方が黒
for(j = 0; j < u; j += 10)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}


//上を調べる
if(arg > 18) {

if(board[arg+o] == 0 || board[arg+o] == 1) {} //上が黒 or 空

else if (board[arg+o] == 2) { //上が白

for(o = -20, end = 0; end == 0; o -= 10) { //上の方を調べる

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 1) { //上の方が黒
for(j = 0; j > o; j -= 10)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}


//右上を調べる
if(arg > 18 || arg % 10 != 8) {

if(board[arg+or] == 0 || board[arg+or] == 1) {} //右上が黒 or 空き

else if (board[arg+or] == 2) { //右上が白

for(or = -18, end = 0; end == 0; or -= 9) { //右上の方を調べる

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 1) { //右上の方が黒
for(j = 0; j > or; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}

//左上を調べる
if(arg > 18 && arg % 10 != 1) {

if(board[arg+ol] == 0 || board[arg+ol] == 1) {} //左上が黒 or 空き

else if (board[arg+ol] == 2) { //左上が白

for(ol = -22, end = 0; end == 0; ol -= 11) { //左上の方を調べる

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 1) { //左上の方が黒
for(j = 0; j > ol; j -= 11)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}

//右下を調べる
if(arg < 81 && arg % 10 != 8) {

if(board[arg+ur] == 0 || board[arg+ur] == 1) {}//右下が黒 or 空き

else if (board[arg+ur] == 2) { //右下が白

for(ur = 22, end = 0; end == 0; ur += 11) { //右下の方を調べる

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 1) { //右下の方が黒
for(j = 0; j < ur; j += 11)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}

//左下を調べる
if(arg < 81 && arg % 10 != 1) {

if(board[arg+ul] == 0 || board[arg+ul] == 1) {}//左下が黒 or 空き

else if (board[arg+ul] == 2) { //左下が白

for(ul = 18, end = 0; end == 0; ul += 9) { //左下の方を調べる

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 1) { //左下の方が黒
for(j = 0; j < ul; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //白ならば何もしないでループが続く
}
}
}
}

//白のターン
else if(turn == 1) {

//右を調べる
if(arg % 10 != 8) {//右端ならば終了

if(board[arg+r] == 0 || board[arg+r] == 2) {}//右が白 or 空き

else if (board[arg+r] == 1) { //右が黒

for(r = 2, end = 0; end == 0; r++ ) { //右の方を調べる

if(board[arg+r] == 0) //右の方が空き
end = 1;

else if (board[arg+r] == 2) { //右の方が白
for(j = 0; j < r; j++)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//左を調べる
if(arg % 10 != 1) { //左端ならば終了

if(board[arg+l] == 0 || board[arg+l] == 2) {} //左が白 or

else if (board[arg+l] == 1) { //左が黒

for(l = -2, end = 0; end == 0; l--) { //左の方を調べる

if(board[arg+l] == 0) //左の方が空き
end = 1;

else if (board[arg+l] == 2) { //左の方が白
for(j = 0; j > l; j--)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//下を調べる
if(arg < 81) {

if(board[arg+u] == 0 || board[arg+u] == 2) {} //下が白 or 空き

else if (board[arg+u] == 1) { //下が黒

for(u = 20, end = 0; end == 0; u += 10) { //下の方を調べる

if(board[arg+u] == 0) //下の方が空き
end = 1;

else if (board[arg+u] == 2) { //下の方が白
for(j = 0; j < u; j += 10)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//上を調べる
if(arg > 18) {

if(board[arg+o] == 0 || board[arg+o] == 2) {} //上が白 or 空

else if (board[arg+o] == 1) { //上が黒

for(o = -20, end = 0; end == 0; o -= 10) { //上の方を調べる

if(board[arg+o] == 0) //上の方が空き
end = 1;

else if (board[arg+o] == 2) { //上の方が白
for(j = 0; j > o; j -= 10)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしないでループが続く
}
}
}


//右上を調べる
if(arg > 18 && arg % 10 != 8) {

if(board[arg+or] == 0 || board[arg+or] == 2) {}//右上が白 or 空き

else if (board[arg+or] == 1) { //右上が黒

for(or = -18, end = 0; end == 0; l -= 9) { //右上の方を調べる

if(board[arg+or] == 0) //右上の方が空き
end = 1;

else if (board[arg+or] == 2) { //右上の方が白
for(j = 0; j > or; j -= 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//左上を調べる
if(arg > 18 && arg % 10 != 1) {

if(board[arg+ol] == 0 || board[arg+ol] == 2) {}//左上が白 or 空き

else if (board[arg+ol] == 1) { //左上が黒

for(ol = -22, end = 0; end == 0; ol -= 11) { //左上の方を調べる

if(board[arg+ol] == 0) //左上の方が空き
end = 1;

else if (board[arg+ol] == 2) { //左上の方が白
for(j = 0; j > ol; j -= 11)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//右下を調べる
if(arg < 81 && arg % 10 != 8) {

if(board[arg+ur] == 0 || board[arg+ur] == 2) {}//右下が白 or 空き

else if (board[arg+ur] == 1) { //右下が黒

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる

if(board[arg+ur] == 0) //右下の方が空き
end = 1;

else if (board[arg+ur] == 2) { //右下の方が白
for(j = 0; j < ur; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}

//左下を調べる
if(arg < 81 && arg % 10 != 1) {

if(board[arg+ul] == 0 || board[arg+ul] == 2) {}//左下が白 or 空き

else if (board[arg+ul] == 1) { //左下が黒

for(ul = 18, end = 0; end == 0; ul += 9) { //左下の方を調べる

if(board[arg+ul] == 0) //左下の方が空き
end = 1;

else if (board[arg+ul] == 2) { //左下の方が白
for(j = 0; j < ul; j += 9)
putok = put(arg+j);
break;
}

else
end = 0; //黒ならば何もしない
}
}
}
}
}

//空白を探す関数
function searchblank(arg) {

for(j = 0; j < 100; j++)
if(board[j] == 0)
return;
judge(arg);
}

//置く関数
function put(arg) {

var t = id[arg];
var elem = document.getElementById(t);

if(turn == 0) {
board[arg] = 1;
elem.src = "image/kuro.png";

passnum = 0;

return(0);
}

else if(turn == 1) {
board[arg] = 2;
elem.src = "image/siro.png";

passnum = 0;

return(1);
}
}

//パス数え用
function pass(arg) {

if (turn == 0)
turn = 1;

else if(turn == 1)
turn = 0;

passnum++;

if (passnum == 2)
judge(0);
}

//ジャッジ関数
function judge(arg) {

var j;
var black = 0;
var white = 0;

for(j = 0; j < 100; j++) {
if(board[j] == 1)
black++;

else if(board[j] == 2)
white++;
}

if(black > white)
alert("黒の勝利です");

else if (black < white)
alert("白の勝利です");

else
alert("引き分けです");
}
[/code]

この状態を初期の状態として
arg = 66としたら
配列の78番目と81番目が黒になりました。
どこが悪いのか見てみましたが見つかりません。
どうすればよいでしょうか?

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javascriptで作るオセロ

#6

投稿記事 by みけCAT » 10年前

ksk0629 さんが書きました:この状態を初期の状態として
arg = 66としたら
配列の78番目と81番目が黒になりました。
どこが悪いのか見てみましたが見つかりません。
どうすればよいでしょうか?
どの関数かわからないのでとりあえずmain(66)を実行してみましたが、配列board, idともに変化せず、再現できませんでした。
ボードを適当にクリックすると変な所に色が生えたので、調べてみます。

※monacaを使わず、直接Firefox上でテストしています
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javascriptで作るオセロ

#7

投稿記事 by みけCAT » 10年前

とりあえず初期状態からf5に黒の石を置いてみました。
このとき、boardの内容は正常のようですが、配列boardが拡張された分を配列idおよびput関数が考慮していないため、表示がずれてしまっているようです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ksk0629
記事: 16
登録日時: 10年前

Re: javascriptで作るオセロ

#8

投稿記事 by ksk0629 » 10年前

今idの配列も直しましたが、やはり止まってしまいます。
これではいけないのでしょうか?

[codeJScript]
var board = [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,2,1,0,0,0,0,
0,0,0,0,1,2,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];

var id = ["00","a0","b0","c0","d0","e0","f0","g0","h0","09",
"10","a1","b1","c1","d1","e1","f1","g1","h1","19",
"20","a2","b2","c2","d2","e2","f2","g2","h2","29",
"30","a3","b3","c3","d3","e3","f3","g3","h3","39",
"40","a4","b4","c4","d4","e4","f4","g4","h4","49",
"50","a5","b5","c5","d5","e5","f5","g5","h5","59",
"60","a6","b6","c6","d6","e6","f6","g6","h6","69",
"70","a7","b7","c7","d7","e7","f7","g7","h7","79",
"80","a8","b8","c8","d8","e8","f8","g8","h8","89",
"90","a9","b9","c9","d9","e9","f9","g9","h9","99"];
[/code]

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: javascriptで作るオセロ

#9

投稿記事 by みけCAT » 10年前

「右上を調べる」から7行下の処理が、黒の処理では

コード:

for(or = -18, end = 0; end == 0; or -= 9) { //右上の方を調べる
となっているのに対し、白の処理では

コード:

for(or = -18, end = 0; end == 0; l -= 9) { //右上の方を調べる
となっており、引く対象の変数が違うので怪しいです。

また、「右下を調べる」から7行下の処理が、黒の処理では

コード:

for(ur = 22, end = 0; end == 0; ur += 11) { //右下の方を調べる
となっているのに対し、白の処理では

コード:

for(ur = 9, end = 0; end == 0; ur += 9) { //右下の方を調べる
となっており、urの初期値と差分が違うので怪しいです。

(そもそも似た処理が2本書かれている時点でコードの臭いですが)
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

ksk0629
記事: 16
登録日時: 10年前

Re: javascriptで作るオセロ

#10

投稿記事 by ksk0629 » 10年前

ありがとうございます。
みけCATさんの言われたところを直したらうまく起動しました。

閉鎖

“C言語何でも質問掲示板” へ戻る