游戏图片:

源文件下載地址:点击下载源文件


Javascript 部分:

/** chinese chess
*   Author: fdipzone
*   Date:   2012-06-24
*   Ver:    1.0
*/var gameimg = ['images/a1.gif','images/a2.gif','images/a3.gif','images/a4.gif','images/a5.gif','images/a6.gif','images/a7.gif','images/b1.gif','images/b2.gif','images/b3.gif','images/b4.gif','images/b5.gif','images/b6.gif','images/b7.gif','images/bg.gif','images/bg_over.gif','images/bg_sel.gif'];
var chess_obj = new ChessClass();window.onload = function(){$('init_btn').onclick = function(){chess_obj.init();}var callback = function(){chess_obj.init();}img_preload(gameimg, callback);
}// chess class
function ChessClass(){this.chess = [];this.boardrows = 4;this.boardcols = 8;this.area = 82;this.player = 1;    // 1:red 2:greenthis.selected = null;  // selected chessthis.chesstype = ['', 'a', 'b'];this.isover = 0;
}// init
ChessClass.prototype.init = function(){this.reset_grade(); this.create_board();this.create_chess();this.create_event();this.player = 1;this.selected = null;this.isover = 0;disp('init_div','hide');
}// create board
ChessClass.prototype.create_board = function(){var board = '';for(var i=0; i<this.boardrows; i++){for(var j=0; j<this.boardcols; j++){board = board + '<div id="' + i + '_' + j + '"><img src="data:images/chessbg.gif" /></div>';}}$('board').innerHTML = board;$('board').style.width = this.boardcols * (this.area + 2) + 'px';$('board').style.height = this.boardrows * (this.area + 2) + 'px';
}// create random chess
ChessClass.prototype.create_chess = function(){// 32 chessesvar chesses = ['a1','b7','a2','b7','a2','b7','a3','b7','a3','b7','a4','b6','a4','b6','a5','b5','a5','b5','a6','b4','a6','b4','a7','b3','a7','b3','a7','b2','a7','b2','a7','b1'];this.chess = [];while(chesses.length>0){var rnd = Math.floor(Math.random()*chesses.length);var tmpchess = chesses.splice(rnd, 1).toString();this.chess.push({'chess':tmpchess, 'type':tmpchess.substr(0,1), 'val':tmpchess.substr(1,1), 'status':0});}
}// create event
ChessClass.prototype.create_event = function(){var self = this;var chess_area = $_tag('div', 'board');for(var i=0; i<chess_area.length; i++){chess_area[i].onmouseover = function(){  // mouseoverif(this.className!='onsel'){this.className = 'on';}}chess_area[i].onmouseout = function(){   // mouseoutif(this.className!='onsel'){this.className = '';}}chess_area[i].onclick = function(){ // onclickself.action(this);}}
}// id change index
ChessClass.prototype.getindex = function(id){var tid = id.split('_');return parseInt(tid[0])*this.boardcols + parseInt(tid[1]);
}// index change id
ChessClass.prototype.getid = function(index){return parseInt(index/this.boardcols) + '_' + parseInt(index%this.boardcols);
}// action
ChessClass.prototype.action = function(o){if(this.isover==1){    // game overreturn false;}var index = this.getindex(o.id);if(this.selected == null){ // 未选过棋子if(this.chess[index]['status'] == 0){   // not openedthis.show(index);  }else if(this.chess[index]['status'] == 1){ // openedif(this.chess[index]['type'] == this.chesstype[this.player]){this.select(index);}}     }else{  // 已选过棋子if(index != this.selected['index']){             // 與selected不是同一位置if(this.chess[index]['status'] == 0){         // 未打开的棋子this.show(index);}else if(this.chess[index]['status'] == -1){  // 點空白位置this.move(index);}else{                                         // 點其他棋子if(this.chess[index]['type']==this.chesstype[this.player]){this.select(index);}else{            this.kill(index);}}}}
}// show chess
ChessClass.prototype.show = function(index){$(this.getid(index)).innerHTML = '<img src="data:images/' + this.chess[index]['chess'] + '.gif" />';this.chess[index]['status'] = 1;   // openedif(this.selected!=null){          // 清空選中$(this.getid(this.selected.index)).className = '';this.selected = null;} this.change_player();this.gameover();
}// select chess
ChessClass.prototype.select = function(index){if(this.selected!=null){$(this.getid(this.selected['index'])).className = '';}this.selected = {'index':index, 'chess':this.chess[index]};$(this.getid(index)).className = 'onsel';
}// move chess
ChessClass.prototype.move = function(index){if(this.beside(index)){this.chess[index] = {'chess':this.selected['chess']['chess'], 'type':this.selected['chess']['type'], 'val':this.selected['chess']['val'], 'status':this.selected['chess']['status']};this.remove(this.selected['index']);this.show(index);}
}// kill chess
ChessClass.prototype.kill = function(index){if(this.beside(index)==true && this.can_kill(index)==true){this.chess[index] = {'chess':this.selected['chess']['chess'], 'type':this.selected['chess']['type'], 'val':this.selected['chess']['val'], 'status':this.selected['chess']['status']};this.remove(this.selected['index']);var killed = this.player==1? 2 : 1;$('grade_num' + killed).innerHTML = parseInt($('grade_num' + killed).innerHTML)-1; this.show(index);}
}// remove chess
ChessClass.prototype.remove = function(index){this.chess[index]['status'] = -1; // empty$(this.getid(index)).innerHTML = '';$(this.getid(index)).className = '';
}/* check is beside
* @param index     目標棋子index
* @param selindex  执行的棋子index,可为空, 为空则读取选中的棋子
*/
ChessClass.prototype.beside = function(index,selindex){if(typeof(selindex)=='undefined'){if(this.selected!=null){selindex = this.selected['index'];}else{return false;}}if(typeof(this.chess[index])=='undefined'){return false;}var from_info = this.getid(selindex).split('_');var to_info = this.getid(index).split('_');var fw = parseInt(from_info[0]);var fc = parseInt(from_info[1]);var tw = parseInt(to_info[0]);var tc = parseInt(to_info[1]);if(fw==tw && Math.abs(fc-tc)==1 || fc==tc && Math.abs(fw-tw)==1){    // row or colunm is same and interval=1return true;}else{return false;}
}/* check can kill
* @param index     被消灭的棋子index
* @param selindex  执行消灭的棋子index,可为空, 为空则读取选中的棋子
*/
ChessClass.prototype.can_kill = function(index,selindex){if(typeof(selindex)=='undefined'){    // 没有指定执行消灭的棋子if(this.selected!=null){     // 有选中的棋子selindex = this.selected['index'];}else{return false;}}if(this.chess[index]['type']!=this.chesstype[this.player]){if(parseInt(this.chess[selindex]['val'])==7 && parseInt(this.chess[index]['val'])==1){ // 7 can kill 1return true;}else if(parseInt(this.chess[selindex]['val'])==1 && parseInt(this.chess[index]['val'])==7){ // 1 can't kill 7return false;}else if(parseInt(this.chess[selindex]['val']) <= parseInt(this.chess[index]['val'])){   // small kill bigreturn true;}}return false;
}// change player
ChessClass.prototype.change_player = function(){if(this.player == 1){this.player = 2;   // to green$('grade_img2').className = 'img_on';$('grade_img1').className = 'img';}else{this.player = 1; // to red$('grade_img1').className = 'img_on';$('grade_img2').className = 'img';}
}// reset grade
ChessClass.prototype.reset_grade = function(){$('grade_img1').className = 'img_on';$('grade_img2').className = 'img';$('grade_num1').innerHTML = $('grade_num2').innerHTML = 16;$('grade_res1').className = $('grade_res2').className = 'none';$('grade_res1').innerHTML = $('grade_res2').innerHTML = '';
}// game over
ChessClass.prototype.gameover = function(){if($('grade_num1').innerHTML==0 || $('grade_num2').innerHTML==0){   // 任一方棋子为0this.isover = 1;this.show_grade();disp('init_div','show');}else{if(this.can_action()==false){this.isover = 1;this.show_grade();disp('init_div','show');}}
}// show grade
ChessClass.prototype.show_grade = function(){var num1 = parseInt($('grade_num1').innerHTML);var num2 = parseInt($('grade_num2').innerHTML);if(num1>num2){ // 红方胜$('grade_res2').innerHTML = 'LOSS';$('grade_res2').className = 'loss';$('grade_res1').innerHTML = 'WIN';$('grade_res1').className = 'win';}else if(num1<num2){ // 黑方胜$('grade_res1').innerHTML = 'LOSS';$('grade_res1').className = 'loss';$('grade_res2').innerHTML = 'WIN';$('grade_res2').className = 'win';}else{  // 平局$('grade_res1').innerHTML = $('grade_res2').innerHTML = 'DRAW';$('grade_res1').className = $('grade_res2').className = 'draw';}
}// check chess can action
ChessClass.prototype.can_action = function(){var chess = this.chess;for(var i=0,max=chess.length; i<max; i++){if(chess[i].status==0){    // 有未翻开的棋子return true;}else{if(chess[i].status==1 && chess[i].type==this.chesstype[this.player]){   // 己方已翻开的棋子if(this.beside(i-this.boardcols, i) && (chess[i-this.boardcols].status==-1 || this.can_kill(i-this.boardcols,i) )){    // 上return true;}if(this.beside(i+this.boardcols, i) && (chess[i+this.boardcols].status==-1 || this.can_kill(i+this.boardcols,i) )){   // 下return true;}if(this.beside(i-1, i) && (chess[i-1].status==-1 || this.can_kill(i-1,i) )){ // 左return true;}if(this.beside(i+1, i) && (chess[i+1].status==-1 || this.can_kill(i+1,i) )){  // 右return true;}}}}return false;
}/** common function */// get document.getElementBy(id)
function $(id){this.id = id;return document.getElementById(id);
}// get document.getElementsByTagName
function $_tag(name, id){if(typeof(id)!='undefined'){return $(id).getElementsByTagName(name);}else{return document.getElementsByTagName(name);   }
}/* div show and hide
* @param id dom id
* @param handle show or hide
*/
function disp(id, handle){if(handle=='show'){$(id).style.display = 'block';}else{$(id).style.display = 'none';    }
}/* img preload
* @param img       要加载的图片数组
* @param callback  图片加载成功后回调方法
*/
function img_preload(img, callback){var onload_img = 0;var tmp_img = [];for(var i=0,imgnum=img.length; i<imgnum; i++){tmp_img[i] = new Image();tmp_img[i].src = img[i];if(tmp_img[i].complete){onload_img ++;}else{tmp_img[i].onload = function(){onload_img ++;}}}var et = setInterval(function(){if(onload_img==img.length){   // 定时器,判断图片完全加载后调用callbackclearInterval(et);callback();}},200);
}

JS小游戏-象棋暗棋相关推荐

  1. java游戏下载象棋暗棋_JS小游戏之象棋暗棋源码详解

    本文实例讲述了JS小游戏的象棋暗棋源码,分享给大家供大家参考.具体如下: 游戏运行后如下图所示: Javascript 部分: /** chinese chess * Author: fdipzone ...

  2. QT象棋暗棋游戏(一)

    QT象棋暗棋游戏(一) 学习目标: 学习时间: 学习产出: 代码部分 学习目标: 程序使用C/S架构 (1)MFC/Qt编程实现server程序象棋界面: (2)编程实现server端暗棋的初始化随机 ...

  3. QT象棋暗棋游戏(二)

    QT象棋暗棋游戏(二) 本次更新可能是最后更新了,因为这次个人设计项目已经做好提交了,基本实现了如下功能,当然还存在一堆问题,希望有人能够解答: 本人懒,在上面复制一堆代码估计你们也不会看,具体代码文 ...

  4. java游戏下载象棋暗棋_中国暗棋手机游戏下载

    中国暗棋是一款象棋暗玩法,让你感受不一样的象棋玩法,喜欢下象棋的朋友赶紧下载体验吧! 游戏特色 玩法新颖,重重模式让你挑战无极限 操作简单易上手,让你体验不一样的中国象棋 模式多样化.多人.单人模式还 ...

  5. 暗棋单机版_中国象棋暗棋下载_中国象棋暗棋安卓版下载 v1.6.8 安卓单机版_飞飞巴士下载...

    介绍 中国象棋,博大精深,老一代人留下在的文化遗产,它的精髓所在决定了它注定要流芳百世.在中国人的眼里,那就是谁不会玩象棋?你不会玩象棋,你爸妈知道吗? 棋艺没有最好,只有更好,永无止境.想更好的提升 ...

  6. 用c语言编写的打字母游戏,用C语言编写小游戏——“井字棋”

    原标题:用C语言编写小游戏--"井字棋" 作者:Milo Yip 来源:知乎 原文链接:https://zhuanlan.zhihu.com/p/39581573 在 Milo Y ...

  7. js小游戏 (飞行的小鸟--canvas)

    js小游戏 (飞行的小鸟) 这个里面用到的主要是 canvas 绘图 <!DOCTYPE html> <html><head><meta charset=&q ...

  8. 是男人就要坚持30秒:原生JS小游戏

    在继之前完成的数个JavaScript demo后,我发现我还没有写过JS小游戏,这次呢,我就来分享一个,非常经典的"是男人就要坚持30s"的小游戏.当然我肯定 is a man, ...

  9. C语言自制小游戏:三子棋(井字棋)智能下棋补充

    目录 一.前期准备 二.逻辑与程序实现 1.连珠 ①横向连珠 ②纵向连珠 ③斜向连珠 ④函数完善 2.堵棋 ①横向堵棋 ②纵向堵棋 ③斜向堵棋 3.整理函数 ①整理AI_Computer函数 ②修改C ...

最新文章

  1. 全面讲解Python列表数组(三)列表数组类型的内置函数方法
  2. 火狐浏览器 xml 解析错误:文档元素后存有无效内容_五分钟了解浏览器工作原理...
  3. .php y=mp4,PHP输出MP4视频流函数
  4. 用python画风车_python接口自动化()一)(实现一款简单的接口自动化框架)
  5. 日均5亿查询量的京东订单中心,为什么舍MySQL用ElasticSearch?
  6. 001 java_001Java开发环境
  7. delphi webservice 如何 共享 变量_医疗质量|如何实现非药物医嘱闭环管理?
  8. 大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本
  9. 连接mysql的各种方式
  10. c语言更改记事本改为大写,记事本里的字母大写转换成小写怎么弄 编写一个汇编程序要...
  11. 深度学习面试题2018
  12. cube配置定时器ETR2模式测频实验
  13. Python绘制美女乘风破浪词云舞蹈视频
  14. 微信隐藏的功能和技巧
  15. MOS管的finger和multiplier
  16. 完整的PRD文档包含哪些内容?
  17. 关于透明度混合blend
  18. Field restTemplate in com.jack.springcloud.controller.DeptController_Consumer required a bean of typ
  19. 企业是否需要crm系统?crm对企业有什么好处?
  20. 在电脑上体验了 16 款手机 App 后,我很失望

热门文章

  1. 【106个】医院职能科岗位说明书
  2. 软件测试之ios自动化——ios真机命令
  3. 用心前行尚无止境_无止境–跨行业发展中的统一
  4. matlab绘制三维奖杯图,有MATLAB的帮忙运行一下
  5. 弹指间计算机协会 X Five Pines Robomaster实验室 考核题面与题解
  6. 病毒计算机系统还原,有了这款系统还原软件,电脑不再怕病毒来犯
  7. 【JVM进阶之路】二:Java内存区域
  8. Java List Stream 遍历
  9. 学会提问 笔记(一)
  10. r5处理器_火影T5A Pro测评 R5-3500X高性价比证明之作