Greasy Fork is available in English.
棋子棋盘都是纯CSS3画出来
// ==UserScript==
// @name 五子棋脚本原码
// @version 0.1
// @description 棋子棋盘都是纯CSS3画出来
// @namespace bandcamp-random-album
// @license 0BSD
// @match http*://bandcamp.com/*
// @include http*://bandcamp.com/*
// @grant GM_xmlhttpRequest
// ==/UserScript==
// JavaScript Document
var iBox;
var iArray;
var mouseBox;
var map;
var score;
var score2;
function addClass(object,className){
var classString;
if(document.all) classString=object.getAttribute("className");
else classString=object.getAttribute("class");
if(classString==null){
if(document.all) object.setAttribute("className",className);
else object.setAttribute("class",className);
}
else{
classString+=" "+className;
if(document.all) object.setAttribute("className",classString);
else object.setAttribute("class",classString);
}
}
function removeClass(object,className){
var classString;
if(document.all) classString=object.getAttribute("className");
else classString=object.getAttribute("class");
if(classString==null) return false;
var classArray=classString.split(" ");
for(var i=0;i<classArray.length;i++){
if(classArray[i]!=className) continue;
else{
classArray.splice(i,1);
}
}
classString=classArray.join(" ");
if(document.all)object.setAttribute("className",classString);
else object.setAttribute("class",classString);
}
function getElementsByClassName(className,root){
var list=new Array();
var temClass;
if(!root)root=document.body;
var array=root.getElementsByTagName("*");
for(var i=0;i<array.length;i++){
if(document.all) temClass=array[i].getAttribute("className");
else temClass=array[i].getAttribute("class");
if(temClass==null)
continue;
var temList=temClass.split(" ");
for(var j=0;j<temList.length;j++){
if(temList[j]==className){
list.push(array[i]);
}
}
}
return list;
}
function repeatCheck(checkList){
for(var i=0;i<checkList.length;i++)
for(var j=i+1;j<checkList.length;j++)
if(checkList[i]===checkList[j]) checkList.splice(j,1);
return checkList;
}
function getElement(string,rootArray){
if(!rootArray){
rootArray=new Array();
rootArray[0]=document.body;
}
var temArray=string.split(" ");
if(temArray.length==1){
var returnList=new Array();
string=temArray[0];
while(rootArray.length){
if(string.match(/^\#{1}/)){
var temId=string.replace(/^\#{1}/,"");
returnList.push(document.getElementById(temId));
}
else if(string.match(/^\.{1}/)){
var temClass=string.replace(/^\.{1}/,"");
var classList=getElementsByClassName(temClass,rootArray[0]);
for(var i=0;i<classList.length;i++){
returnList.push(classList[i]);
}
}
else{
var obj=rootArray[0].getElementsByTagName(string);
if(obj) for(var i=0;i<obj.length;i++) returnList.push(obj[i]);
}
rootArray.shift();
}
return repeatCheck(returnList);
}
else{
var childArray=new Array();
for(var i=0;i<rootArray.length;i++){
var arr=new Array(rootArray[i]);
childArray=childArray.concat(getElement(temArray[0],arr));
}
if(temArray.length>1){
temArray.shift();
string=temArray.join(" ");
return getElement(string,childArray);
}
}
}
function createMap(){
var chessboard=document.createElement("table");
iArray=new Array();
chessboard.className="chessboard_bg";
chessboard.cellPadding=0;
chessboard.cellSpacing=0;
var row,cell;
for(var i=0;i<14;i++){
row=chessboard.insertRow(-1);
for(var j=0;j<14;j++){
cell=row.insertCell(-1);
cell.innerHTML=i+"*"+j;
}
}
iBox=document.createElement("div");
iBox.className="iBox";
for(var i=0;i<15;i++)
for(var j=0;j<15;j++){
var iObj=document.createElement("i");
iObj.appendChild(document.createTextNode(i*15+j));
iObj.style.left=j*41+1+"px";
iObj.style.top=i*41+1+"px";
iBox.appendChild(iObj);
iArray.push(iObj);
}
chessboardBox.appendChild(chessboard);
chessboardBox.appendChild(iBox);
}
function bindEvent(){
for(var i=0;i<iArray.length;i++){
iArray[i].index=i;
iArray[i].onclick=function(){
createPiece(iArray[this.index],0);
setScore();
playChess();
}
iArray[i].onmouseover=function(){
mouseOverTips(iArray[this.index]);
}
iArray[i].onmouseout=function(){
clearTips(iArray[this.index]);
}
}
}
function createPiece(obj,num){
var objLeft=parseInt(obj.style.left);
var objTop=parseInt(obj.style.top);
var num10=parseInt(obj.innerHTML/15);
var num1=parseInt(obj.innerHTML%15);
var pieceObj=document.createElement("div");
addClass(pieceObj,"piece");
if(num==0){ addClass(pieceObj,"black"); map[num10][num1]=0;}
else if(num==1){ addClass(pieceObj,"white"); map[num10][num1]=1;}
pieceObj.style.left=objLeft+12+"px";
pieceObj.style.top=objTop+12+"px";
pieceObj.appendChild(document.createElement("i"));
chessboardBox.appendChild(pieceObj);
}
function startGame(){
bindEvent();
init();
}
function init(){
map=new Array();
score=new Array();
score2=new Array();
for(var i=0;i<15;i++){
map[i]=new Array();
score[i]=new Array();
score2[i]=new Array();
for(var j=0;j<15;j++){
map[i][j]=-1;
score[i][j]=0;
score2[i][j]=0;
}
}
}
function mouseOverTips(obj){
var objLeft=parseInt(obj.style.left);
var objTop=parseInt(obj.style.top);
if(!mouseBox){
mouseBox=document.createElement("div");
addClass(mouseBox,"mouseBox");
for(var i=0;i<4;i++){
var iObj=document.createElement("i");
addClass(iObj,"mouseP");
switch(i){
case 0: addClass(iObj,"mouseLT"); break;
case 1: addClass(iObj,"mouseRT"); break;
case 2: addClass(iObj,"mouseLB"); break;
case 3: addClass(iObj,"mouseRB"); break;
default: break;
}
mouseBox.appendChild(iObj);
}
chessboardBox.appendChild(mouseBox);
}
mouseBox.style.display="block";
mouseBox.style.left=objLeft+9+"px";
mouseBox.style.top=objTop+9+"px";
}
function clearTips(){
mouseBox.style.display="none";
}
function playChess(){
var num=1;
var ScoreList=new Array();
var ScoreList2=new Array();
ScoreList[0]=0;
ScoreList2[0]=0;
for(var i=0;i<score.length;i++)
for(var j=0;j<score[i].length;j++){
if(ScoreList[0]<score[i][j]){
ScoreList.unshift(score[i][j]);
}
if(ScoreList2[0]<score2[i][j]){
ScoreList2.unshift(score2[i][j]);
}
}
var maxArray=getMaxArray(ScoreList,ScoreList2);
if(maxArray.length==1) createPiece(maxArray[0],num);
else if(maxArray.length>1) createPiece(maxArray[parseInt(Math.random()*maxArray.length)],num);
setScore();
}
// Downloads By http://www.veryhuo.com
function getMaxArray(ScoreList,ScoreList2){
var maxArray=new Array();
for(var i=0;i<score.length;i++)
for(var j=0;j<score[i].length;j++){
if(ScoreList2[0]>=ScoreList[0]){
if(ScoreList2[0]==score2[i][j]){
maxArray.push(iArray[i*15+j]);
}
}
else if(ScoreList2[0]<ScoreList[0]){
if(ScoreList[0]==score[i][j]){
maxArray.push(iArray[i*15+j]);
}
}
}
if(ScoreList2[0]<ScoreList[0])
maxArray=checkArray(maxArray);
if(maxArray.length>0){
return maxArray;}
else {
if(ScoreList2[0]>=ScoreList[0]){
ScoreList2.shift();
return getMaxArray(ScoreList,ScoreList2);
}
else if(ScoreList2[0]<ScoreList[0]){
ScoreList.shift();
return getMaxArray(ScoreList,ScoreList2);
}
}
}
function setScore(){
var num=0;
var defenseCount=0;
var attackCount=0;
if(num==0){ var num2=1;}
else{ var num2=0;}
for(var i=0;i<15;i++)
for(var j=0;j<15;j++){
score[i][j]=0;
score2[i][j]=0;
}
for(var i=0;i<15;i++)
for(var j=0;j<15;j++){//整个棋盘检测
if(map[i][j]==-1){
for(var l=0;l<4;l++){//方向检测
for(var m=-4;m<=0;m++){
defenseCount=0; attackCount=0;
for(var k=m;k<m+5;k++){//同行检测
var k2=k3=k;
if(l%4==0) k2=0;
else if(l%4==2) k3=0;
else if(l%4==3) k3=-k2;
if(map[i+k2]){
if(map[i+k2][j+k3]==num) defenseCount++;
else if(map[i+k2][j+k3]==num2) {attackCount++;}
}
}
switch (defenseCount){
case 0: {if(0>score[i][j]) score[i][j]=0;break;}
case 1: {if(100>score[i][j]) score[i][j]=100;break;}
case 2: {if(200>score[i][j]) score[i][j]=200;break;}
case 3: {if(300>score[i][j]) score[i][j]=300;break;}
case 4: {if(400>score[i][j]) score[i][j]=400;break;}
default:break;
}
switch (attackCount){
case 0: {if(0>score2[i][j]) score2[i][j]=0;break;}
case 1: {if(100>score2[i][j]) score2[i][j]=100;break;}
case 2: {if(200>score2[i][j]) score2[i][j]=200;break;}
case 3: {if(300>score2[i][j]) score2[i][j]=300;break;}
case 4: {if(400>score2[i][j]) score2[i][j]=400;break;}
default:break;
}
}
}
}
}
sideCheck();
}
function checkArray(maxArray){
var num10;
var num1;
var temArray=new Array();
var temArray2=new Array();
var num=0;
if(num==0){var num2=1;}
else var num2=0;
for(var i=0;i<maxArray.length;i++){
num10=parseInt(maxArray[i].innerHTML/15);
num1=maxArray[i].innerHTML%15;
var blackCount=new Array();
var whiteCount=new Array();
for(var j=0;j<9;j++){
blackCount[j]=0;
whiteCount[j]=0;
}
for(var l=0;l<9;l++){
if(l==4) continue;
for(var k=1;k<=4;k++){
var k2=k;
var k3=k;
if(parseInt(l/3)==0) k2=-k;
else if(parseInt(l/3)==1) k2=0;
if(l%3==0) k3=-k;
else if(l%3==1) k3=0;
if(map[num10+k2]){
if(map[num10+k2][num1+k3]==num){
blackCount[l]+=1;
}
else if(map[num10+k2][num1+k3]==num2){
whiteCount[l]+=1;
}
}
}
}
var blackNum=0; var numArray=new Array();
for(var j=0;j<9;j++){
if(blackNum<blackCount[j]){ blackNum=blackCount[j];}
}
for(var j=0;j<9;j++){
if(blackNum==blackCount[j]&&whiteCount[j]==0){ temArray.push(maxArray[i]);}
if(blackNum==blackCount[j]&&whiteCount[j]==1){
for(var l=0;l<9;l++){
if(l==4) continue;
k2=4;
k3=4;
if(parseInt(l/3)==0) k2=-4;
else if(parseInt(l/3)==1) k2=0;
if(l%3==0) k3=-4;
else if(l%3==1) k3=0;
if(map[num10+k2]){
if(map[num10+k2][num1+k3]==num2){
temArray2.push(maxArray[i]);
}
}
}
}
}
}
if(temArray.length==0){
temArray=temArray2;
}
return temArray;
}
function sideCheck(){
var num=0;
if(num==0) var num2=1;
else var num2=0;
for(var i=0;i<15;i++)
for(var j=0;j<15;j++){
if(map[i][j]==num||map[i][j]==num2){
for(var l=0;l<9;l++){
if(l==4) continue;
for(var k=1;k<=4;k++){
var k2=k;
var k3=k;
if(parseInt(l/3)==0) k2=-k;
else if(parseInt(l/3)==1) k2=0;
if(l%3==0) k3=-k;
else if(l%3==1) k3=0;
if(map[i+k2]){
if(map[i+k2][j+k3]==-1){
if(map[i][j]==num)
score[i+k2][j+k3]+=4-k;
else{
score2[i+k2][j+k3]+=4-k;
}
}
}
}
}
}
}
}