五子棋脚本原码

棋子棋盘都是纯CSS3画出来

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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;
								}
							}
						}
					}
				}
			}
			
			
		}
		
		
}