首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

无聊用JS写个中国象棋,自娱自乐版 ^解决方案

2012-10-20 
无聊用JS写个中国象棋,自娱自乐版 ^_^最近迷上了象棋,苦于QQ上被高手欺负想练技术,网上下载几个象棋游戏,

无聊用JS写个中国象棋,自娱自乐版 ^_^
最近迷上了象棋,苦于QQ上被高手欺负
想练技术,网上下载几个象棋游戏,居然连电脑也下不过,杯具啊 > <
网上下载的,大多都太专业,不方便吾等小菜鸟研究,看不懂棋谱 0 0 
遂按照自己的想法写了个简单版,潜心修炼。。希望有朝一日能叱咤棋坛 (想多了 ……) 

不敢独享,拿出来让大家一块玩玩

演示地址 http://jtcpp.4.huyi2.com/JScheese/index.html

用到了JQUERY库
代码写的比较随意,大家见谅,欢迎拍砖~

完整代码可以到我的资源中下载 ^_^

JScript code
 // 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;            } 











[解决办法]
最最前排支持~~
[解决办法]
楼主可以考虑哈如何在实现在网页上网络对战,估计很难啊...,
[解决办法]
楼主的代码很不精简啊,拽着下拉框下来一遍,粗略估计至少可以减肥一半,而且还不用那些晦涩的方法。
[解决办法]
这个拍一砖头,以为是智能对战呢。界面看得晕乎,原来是自己对弈。等我的智能对弈象棋写完了也拿出来晒晒,正在完善中。。
[解决办法]
代码还有改进的空间
[解决办法]
楼主太强了,不过我好像发现了一个bug老将对面时不能对杀
[解决办法]
看了下效果,确实惊艳,学习了。虽然,还有“对将”等问题等待改进。
我也曾开发过一个象棋,支持局域网对战的(有兴趣的可以google“象过河趣味象棋”,并提出宝贵意见)
最近正在学习JQuery,看了楼主的程序,更加感觉有好好学习的必要了。向楼主学习了!
[解决办法]
楼主看来还不知道,在n年前单机象棋软件的水平就已经超过特大水平了。

这样你在网上下不过别人很正常,因为别人可能就是用软件辅助的人机联棋模式,遇到这样的对手,即使你是象棋特级大师,光凭你自己也是下不过的
[解决办法]
不错! 界面很漂亮. 如果有智能就更好了. 
我最近也做了一个HTML5加Javascript的六子棋游戏. 
有智能对弈功能, 电脑可以单下黑棋, 白棋, 同时下黑白棋或者都不下, 可以选择难度.
放在这里: http://cssauh.com/sp/cn.html

[解决办法]
很强大,不过好像有个小问题,当車到河界的时候 就消失了。。。。。。

热点排行