87,907
社区成员
发帖
与我相关
我的任务
分享
// author:小弟
// MY QQ : 285037039
// PLAY FOR FUN
// OH i love POINT :-)
// 如果您对该CODE有什么建议和意见,请MAIL:285037039@qq.com
// 功能简单,支持下棋、悔棋和棋盘翻转
function Character() {
this.x = 0;
this.y = 0;
this.width = 0;
this.height = 0;
/**0普通1DEAD*/
this.state = 0;
this.id = "";
/** 1车2马3相4士5帅6炮7卒子*/
this.type = 0;
/**方向,为卒子准备的 1↓走 2↑ - -。。*/
this.dir = 1;
this.boardpos = 0;
this.instance = {};
this.prepare = 0;
this.aniTime = 500;
this.show = function() {
$("#"+this.id).css("left",this.x);
$("#"+this.id).css("top",this.y);
};
this.init = function() {
var _this = this;
$("#"+this.id).bind("click",function(){
_this.updateShow();
});
$("#"+this.id).show();
}
this.aniMove = function(despos) {
var _this = this;
var _srcpos = this.boardpos;
$("#"+this.id).animate({left:this.instance.board[despos].x,top:this.instance.board[despos].y},200,"swing",function(){
_this.aniEat(_srcpos,despos);
});
}
this.aniEat = function(_srcpos,despos) {
var hasindex = this.hasChessIndex(this.id,despos);
if(hasindex != 0) {
this.deleteChess(hasindex);
var posstr = this.id + "|" + _srcpos + "|" + despos + "|" + this.instance.chessman[hasindex].id;
this.instance.history.push(posstr);
} else {
var posstr = this.id + "|" + _srcpos + "|" + despos + "|" + "";
this.instance.history.push(posstr);
}
//alert(this.boardpos);
this.instance.filp();
}
this.deleteChess = function(index) {
if(index != 0) {
$("#" + this.instance.chessman[index].id).hide();
this.instance.chessman[index].boardpos = 0;
if(this.instance.chessman[index].id == "a5"
|| this.instance.chessman[index].id == "b5"
) {
alert("GAME OVER!");
}
}
}
this.hasChessIndex = function(exceptid,pos) {
for( var ic = 1;ic <= 32; ic++) {
if(this.instance.chessman[ic].boardpos == pos && this.instance.chessman[ic].id != exceptid) {
return ic;
}
}
return 0;
}
this.updateShow = function() {
var id = (this.id.substring(0,1));
//alert(this.dir + " " + this.instance.turn);
if(id == "a" && this.instance.turn == 1) {
//alert(this.prepare);
if(this.prepare == 0) {
this.prepare0();
this.prepare = 1;
} else {
if(this.instance.indacatorsrcPos == this.boardpos) {
return false;
}
if(!this.validation(this.boardpos,this.instance.indacatorsrcPos)) {
return false;
}
this.prepare1();
this.instance.turn = 2;
}
} else if( id == "b" && this.instance.turn == 2) {
if(this.prepare == 0) {
this.prepare0();
this.prepare = 1;
} else {
if(this.instance.indacatorsrcPos == this.boardpos) {
return false;
}
if(!this.validation(this.boardpos,this.instance.indacatorsrcPos)) {
return false;
}
this.prepare1();
this.instance.turn = 1;
}
}
}
this.prepare0 = function() {
$("#indacatordir").css("left",this.instance.board[this.boardpos].x);
$("#indacatordir").css("top",this.instance.board[this.boardpos].y);
$("#indacatordir").show();
for( var i=1 ;i <=32;i++ ) {
this.instance.chessman[i].prepare = 0;
}
this.prepare = 1;
return 1;
}
this.prepare1 = function() {
this.prepare = 0;
$("#indacatordir").hide();
this.aniMove(this.instance.indacatorsrcPos);
this.boardpos = this.instance.indacatorsrcPos;
return 1;
}
this.validation = function(srcpos,despos) {
var chessindex = 0;
var chesstype = 0;
var chesscolor = 1;
var isValidation = true;
for( var ic = 1;ic <= 32;ic++) {
if(this.instance.chessman[ic].boardpos == srcpos) {
chessindex = ic;
chesstype = this.instance.chessman[ic].type;
chesscolor = this.dir;
break;
}
}
if(chessindex == 0) {
return false;
}
switch(chesstype) {
case 1:
isValidation = this.validChe(chessindex,srcpos,despos);
break;
case 2:
isValidation = this.validMa(chessindex,srcpos,despos);
break;
case 3:
isValidation = this.validXiang(chessindex,srcpos,despos);
break;
case 4:
isValidation = this.validShi(chessindex,srcpos,despos);
break;
case 5:
isValidation = this.validJiang(chessindex,srcpos,despos);
break;
case 6:
isValidation = this.validPao(chessindex,srcpos,despos);
break;
case 7:
isValidation = this.validBing(chessindex,srcpos,despos);
break;
default:
isValidation = false;
break;
}
return isValidation;
}
this.getColumn = function(pos) {
if(pos < 0 || pos > 90) {
return 0;
}
return parseInt((pos-1)%9+1);
}
this.getRow = function(pos) {
if(pos < 0 || pos > 90) {
return 0;
}
return parseInt((pos-1)/9+1);
}
this.getPos = function(row,col) {
if(row < 1 || row > 10) {
return 0;
}
if(col < 1 || col > 9) {
return 0;
}
return parseInt( (row-1)*9 + Number(col) );
}
/**0空1红2黑*/
this.hasChess = function(pos) {
for(var i=1;i<=32;i++) {
if(this.instance.chessman[i].boardpos == pos) {
return this.instance.chessman[i].dir;
}
}
return 0;
}
this.validChe = function(chessindex,srcpos,despos) {
var srccol = this.getColumn(srcpos);
var srcrow = this.getRow(srcpos);
var descol = this.getColumn(despos);
var desrow = this.getRow(despos);
var ishor = false;
var isver = false;
if(srccol == descol) {
isver = true;
}
if(srcrow == desrow) {
ishor = true;
}
if(!isver && !ishor) {
return false;
}
if(srcrow != desrow && srccol != descol) {
return false;
}
if(this.hasChess(despos) == this.dir) {
return false;
}
var begin = 0;
var end = 0;
var chessCount = 0;
if( ishor ) {
if(srccol < descol) {
begin = srccol;
end = descol;
} else {
begin = descol;
end = srccol;
}
for(var i = Number(begin)+1;i < end;i++) {
if(this.hasChess(this.getPos(srcrow,i)) > 0) {
return false;
}
}
} else if(isver) {
if(srcrow < desrow) {
begin = srcrow;
end = desrow;
} else {
begin = desrow;
end = srcrow;
}
for(var i = Number(begin)+1;i < end;i++) {
if(this.hasChess(this.getPos(i,srccol)) > 0) {
return false;
}
}
}
return true;
}