対戦オセロwebapi その3
概要
対戦オセロwebapiを作ってみる。
人対ai、作ってみた。
ライブラリーは、jquery,tatenoを使う。
写真
サンプルコード
window.onload = function() {
var coma = 'https://camo.qiitausercontent.com/7873b55118f9bac84a20de35c02770aac1d1f02a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f31383130342f33656230653537342d643430362d326537342d663238312d3561663132396130353834362e706e67';
var pl0 = 'anta';
var pl1 = 'ore';
var ban = [];
var flg = 1;
var game = new Game();
game.fps(5);
game.preload([coma]);
game.start();
var aLabel = new Label('白 : ' + pl0 + '<br>黒: ' + pl1, 50, 330);
aLabel.size(20);
ban = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1,
1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
var field = [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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var suji = [0, 7, 56, 63, 18, 21, 42, 45, 2, 16, 5, 23, 40, 58, 47, 61, 3, 4, 11, 12, 19, 20, 24, 25, 26, 32, 33, 34, 29, 30, 31, 37,
38, 39, 43, 44, 51, 52, 59, 60, 1, 8, 9, 10, 17, 6, 13, 14, 15, 22, 41, 48, 49, 50, 57, 46, 53, 54, 55, 62];
function check(put, d) {
var x = put % 8;
var y = Math.floor(put / 8);
var res = 0;
if (x == 0 && (d == -9 || d == -1 || d == 7)) res = 1;
if (x == 7 && (d == -7 || d == 1 || d == 9)) res = 1;
if (y == 0 && (d == -9 || d == -8 || d == -7)) res = 1;
if (y == 7 && (d == 7 || d == 8 || d == 9)) res = 1;
return res;
}
function sasu(ban) {
var res;
var all = 0;
var iro = 2;
var turn = 0;
var dir = Array(-9, 9, -7, 7, -1, 1, -8, 8);
var i;
var j;
var put;
var count;
var put1;
var f1;
for (j = 0; j < 60; j++)
{
put = suji[j];
if (ban[put] == 1)
{
for (i = 0; i < 8; i++)
{
count = 0;
if (check(put, dir[i]) == 0)
{
put1 = put + dir[i];
f1 = 0;
do
{
if (ban[put1] == iro)
{
count++;
if (check(put1, dir[i]) == 0)
{
put1 += dir[i];
}
else
{
f1 = 1;
}
}
else
{
f1 = 1;
}
} while (f1 == 0);
}
if ((count > 0) && (ban[put1] == turn))
{
all += count;
}
}
}
if (all > 0)
{
res = put;
break;
}
}
return res;
}
function oku(put, iro) {
var res = 0;
var turn = 0;
if (iro == 0) turn = 2;
var dir = new Array(-9, -8, -7, -1, 1, 7, 8, 9);
var tugi;
var i;
var count;
if (ban[put] == 1)
{
for (i = 0; i < 8; i++)
{
count = 0;
tugi = put;
do
{
if (check(tugi, dir[i]) == 1) break;
count++;
tugi += dir[i];
}
while (ban[tugi] == turn);
if ((count > 1) && (ban[tugi] == iro))
{
res = -1;
tugi = put;
do
{
ban[tugi] = iro;
tugi += dir[i];
}
while (ban[tugi] == turn);
}
}
}
return res;
}
function test(n) {
var put;
var res;
if (flg > 0)
{
put = n;
res = oku(put, 2);
if (res == -1)
{
put = sasu(ban);
res = oku(put, 0);
var end = -1;
for (var i = 0; i < 64; i++)
{
field[i].frame(ban[i]);
if (ban[i] == 1) end = 0;
}
if (end == -1) alert("game over");
}
}
}
for (var i = 0; i < 64; i++)
{
field[i] = new Sprite(40, 40, coma, 4, 1);
field[i].frame(ban[i]);
field[i].x((i % 8) * 40);
field[i].y(Math.floor(i / 8) * 40);
field[i].jq.click(function() {
var n = this.id;
n = n.replace("tsGameNode", "");
n = n - 2;
test(n);
});
}
};
成果物
window.onload = function() {
var coma = 'https://camo.qiitausercontent.com/7873b55118f9bac84a20de35c02770aac1d1f02a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f31383130342f33656230653537342d643430362d326537342d663238312d3561663132396130353834362e706e67';
var pl0 = 'anta';
var pl1 = 'ore';
var ban = [];
var flg = 1;
var game = new Game();
game.fps(5);
game.preload([coma]);
game.start();
var aLabel = new Label('白 : ' + pl0 + '<br>黒: ' + pl1, 50, 330);
aLabel.size(20);
ban = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 1, 1, 1,
1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1];
var field = [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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
var suji = [0, 7, 56, 63, 18, 21, 42, 45, 2, 16, 5, 23, 40, 58, 47, 61, 3, 4, 11, 12, 19, 20, 24, 25, 26, 32, 33, 34, 29, 30, 31, 37,
38, 39, 43, 44, 51, 52, 59, 60, 1, 8, 9, 10, 17, 6, 13, 14, 15, 22, 41, 48, 49, 50, 57, 46, 53, 54, 55, 62];
function check(put, d) {
var x = put % 8;
var y = Math.floor(put / 8);
var res = 0;
if (x == 0 && (d == -9 || d == -1 || d == 7)) res = 1;
if (x == 7 && (d == -7 || d == 1 || d == 9)) res = 1;
if (y == 0 && (d == -9 || d == -8 || d == -7)) res = 1;
if (y == 7 && (d == 7 || d == 8 || d == 9)) res = 1;
return res;
}
function sasu(ban) {
var res;
var all = 0;
var iro = 2;
var turn = 0;
var dir = Array(-9, 9, -7, 7, -1, 1, -8, 8);
var i;
var j;
var put;
var count;
var put1;
var f1;
for (j = 0; j < 60; j++)
{
put = suji[j];
if (ban[put] == 1)
{
for (i = 0; i < 8; i++)
{
count = 0;
if (check(put, dir[i]) == 0)
{
put1 = put + dir[i];
f1 = 0;
do
{
if (ban[put1] == iro)
{
count++;
if (check(put1, dir[i]) == 0)
{
put1 += dir[i];
}
else
{
f1 = 1;
}
}
else
{
f1 = 1;
}
} while (f1 == 0);
}
if ((count > 0) && (ban[put1] == turn))
{
all += count;
}
}
}
if (all > 0)
{
res = put;
break;
}
}
return res;
}
function oku(put, iro) {
var res = 0;
var turn = 0;
if (iro == 0) turn = 2;
var dir = new Array(-9, -8, -7, -1, 1, 7, 8, 9);
var tugi;
var i;
var count;
if (ban[put] == 1)
{
for (i = 0; i < 8; i++)
{
count = 0;
tugi = put;
do
{
if (check(tugi, dir[i]) == 1) break;
count++;
tugi += dir[i];
}
while (ban[tugi] == turn);
if ((count > 1) && (ban[tugi] == iro))
{
res = -1;
tugi = put;
do
{
ban[tugi] = iro;
tugi += dir[i];
}
while (ban[tugi] == turn);
}
}
}
return res;
}
function test(n) {
var put;
var res;
if (flg > 0)
{
put = n;
res = oku(put, 2);
if (res == -1)
{
put = sasu(ban);
res = oku(put, 0);
var end = -1;
for (var i = 0; i < 64; i++)
{
field[i].frame(ban[i]);
if (ban[i] == 1) end = 0;
}
if (end == -1) alert("game over");
}
}
}
for (var i = 0; i < 64; i++)
{
field[i] = new Sprite(40, 40, coma, 4, 1);
field[i].frame(ban[i]);
field[i].x((i % 8) * 40);
field[i].y(Math.floor(i / 8) * 40);
field[i].jq.click(function() {
var n = this.id;
n = n.replace("tsGameNode", "");
n = n - 2;
test(n);
});
}
};
以上。
Author And Source
この問題について(対戦オセロwebapi その3), 我々は、より多くの情報をここで見つけました https://qiita.com/ohisama@github/items/4835bbf4807637767051著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .