対戦オセロwebapi その3

#概要

対戦オセロwebapiを作ってみる。
人対ai、作ってみた。
ライブラリーは、jquery,tatenoを使う。

#写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/cae2b636-9f31-b1d5-07b9-fa0a3108f968.png)


#サンプルコード


```

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);
		});
	}
};



```

#成果物

https://embed.plnkr.co/plunk/sFmCzoJ8Su342G85

以上。