中国象棋(人机)

news2024/9/24 5:32:37

欢迎来到程序小院

中国象棋

玩法:
鼠标左键点击选中棋子,再点击位置进行下棋,可以进行悔棋,重新开始操作,棋盘右侧有AI分析,帮助你进一步提升棋艺,快去下棋吧^^。

开始游戏icon-default.png?t=N7T8https://www.ormcc.com/play/gameStart/181

图片

html

<div class="box" id="box">
            <div class="chess_left">
                <audio src="audio/select.wav" id="selectAudio" preload="auto"></audio>
                <audio src="audio/click.wav" id="clickAudio" preload="auto"></audio>
                <div  class="game-side">
                    <div class="bn_box" id="bnBox">
                        <input type="button" name="offensivePlay" id="tyroPlay" class="button game-side-span" value="初级" />
                        <input type="button" name="offensivePlay" id="superPlay" class="button game-side-span" value="高级" />
                        <input type="button" name="regret" id="regretBn" class="button game-side-span" value="悔棋" />
                        <input type="button" name="billBn" id="billBn" value="重新开始" class="button game-side-span" class="bn_box" />
                    </div>
                </div>
                <div id="moveInfo" class="move_info"> </div>
                <canvas id="chess"></canvas>

            </div>
            <div class="chess_right" id="chessRight">

            </div>
        </div>

css

.game-side{
    margin: 20px auto;
    text-align: center;
}
.game-side button{
    margin:0 20px;
}
.game-side-span{
    border: 1px solid #eee;
    padding: 2px 5px;
    border-radius: 3px;
    font-size: 12px;
    margin:0 10px;
    background:#eee;
    cursor:pointer;
}
#box,#chess{
    margin: 0 auto;
}
#moveInfo{
    position: absolute;
    margin-left: 530px;
    margin-top: -20px;
    color: #4a4a4a;
}
#moveInfo h3{
    font-size: 18px;
    font-weight: bold;
}

js

//悔棋
play.regret = function (){
 var map  = com.arr2Clone(com.initMap);
 //初始化所有棋子
 for (var i=0; i<map.length; i++){
  for (var n=0; n<map[i].length; n++){
   var key = map[i][n];
   if (key){
    com.mans[key].x=n;
    com.mans[key].y=i;
    com.mans[key].isShow = true;
   }
  }
 }
 var pace= play.pace;
 pace.pop();
 pace.pop();
 
 for (var i=0; i<pace.length; i++){
  var p= pace[i].split("")
  var x = parseInt(p[0], 10);
  var y = parseInt(p[1], 10);
  var newX = parseInt(p[2], 10);
  var newY = parseInt(p[3], 10);
  var key=map[y][x];
  //try{
  
  var cMan=map[newY][newX];
  if (cMan) com.mans[map[newY][newX]].isShow = false;
  com.mans[key].x = newX;
  com.mans[key].y = newY;
  map[newY][newX] = key;
  delete map[y][x];
  if (i==pace.length-1){
   com.showPane(newX ,newY,x,y) 
  }
  //} catch (e){
  // com.show()
  // z([key,p,pace,map])
   
  // }
 }
 play.map = map;
 play.my=1;
 play.isPlay=true;
 com.show();
}



//点击棋盘事件
play.clickCanvas = function (e){
 if (!play.isPlay) return false;
 var key = play.getClickMan(e);
 var point = play.getClickPoint(e);
 
 var x = point.x;
 var y = point.y;
 
 if (key){
  play.clickMan(key,x,y); 
 }else {
  play.clickPoint(x,y); 
 }
 play.isFoul = play.checkFoul();//检测是不是长将
}

//点击棋子,两种情况,选中或者吃子
play.clickMan = function (key,x,y){
 var man = com.mans[key];
 //吃子
 if (play.nowManKey&&play.nowManKey != key && man.my != com.mans[play.nowManKey ].my){
  //man为被吃掉的棋子
  if (play.indexOfPs(com.mans[play.nowManKey].ps,[x,y])){
   man.isShow = false;
   var pace=com.mans[play.nowManKey].x+""+com.mans[play.nowManKey].y
   //z(bill.createMove(play.map,man.x,man.y,x,y))
   delete play.map[com.mans[play.nowManKey].y][com.mans[play.nowManKey].x];
   play.map[y][x] = play.nowManKey;
   com.showPane(com.mans[play.nowManKey].x ,com.mans[play.nowManKey].y,x,y)
   com.mans[play.nowManKey].x = x;
   com.mans[play.nowManKey].y = y;
   com.mans[play.nowManKey].alpha = 1
   
   play.pace.push(pace+x+y);
   play.nowManKey = false;
   com.pane.isShow = false;
   com.dot.dots = [];
   com.show()
   com.get("clickAudio").play();
   setTimeout("play.AIPlay()",500);
   if (key == "j0") play.showWin (-1);
   if (key == "J0") play.showWin (1);
  }
 // 选中棋子
 }else{
  if (man.my===1){
   if (com.mans[play.nowManKey]) com.mans[play.nowManKey].alpha = 1 ;
   man.alpha = 0.6;
   com.pane.isShow = false;
   play.nowManKey = key;
   com.mans[key].ps = com.mans[key].bl(); //获得所有能着点
   com.dot.dots = com.mans[key].ps
   com.show();
   //com.get("selectAudio").start(0);
   console.log(com.get("selectAudio"))
   //com.get("selectAudio").play();
  }
 }
}

//点击着点
play.clickPoint = function (x,y){
 var key=play.nowManKey;
 var man=com.mans[key];
 if (play.nowManKey){
  if (play.indexOfPs(com.mans[key].ps,[x,y])){
   var pace=man.x+""+man.y
   //z(bill.createMove(play.map,man.x,man.y,x,y))
   delete play.map[man.y][man.x];
   play.map[y][x] = key;
   com.showPane(man.x ,man.y,x,y)
   man.x = x;
   man.y = y;
   man.alpha = 1;
   play.pace.push(pace+x+y);
   play.nowManKey = false;
   com.dot.dots = [];
   com.show();
   console.log(com.get("selectAudio"))
   //com.get("clickAudio").play();
   setTimeout("play.AIPlay()",500);
  }else{
   //alert("不能这么走哦!") 
  }
 }
 
}

源码

需要源码请关注添加好友哦^ ^

转载:欢迎来到本站,转载请注明文章出处https://ormcc.com/

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1079616.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

服务器数据恢复-DS5300存储raid5硬盘出现坏道离线的数据恢复案例

服务器数据恢复环境&#xff1a; 某单位一台DS5300存储&#xff0c;1个主机4个扩展柜&#xff0c;组建了2组RAID5&#xff08;一组27块硬盘&#xff0c;一组23块盘&#xff09;。27块盘的那组RAID5阵列存放Oracle数据库文件&#xff0c;存储系统一共分了11个卷。 服务器故障&a…

Linux命令及详细解释、用法

关机/重启/注销 命令 说明 shutdown -h now 即刻关机 shutdown -h 10 10分钟后关机 shutdown -h 11:00 11&#xff1a;00关机 shutdown -h 10 预定时间关机&#xff08;10分钟后&#xff09; shutdown -c 取消指定时间关机 shutdown -r now 重启 shutdown -r 10 10分钟之…

分享一些走心的句子英文表达

曾经有人问更新社媒&#xff0c;除了发生活照&#xff0c;产品照&#xff0c;与客户的聊天截图和一些产品视频&#xff0c;发货视频之外&#xff0c;还能发什么&#xff1f;其实像一些你平时发在朋友圈的走心的话&#xff0c;或者是一些正能量也是可以的&#xff0c;从你的文字…

【内网穿透】Docker部署Drupal并实现公网访问

目录 前言 1. Docker安装Drupal 2. 本地局域网访问 3 . Linux 安装cpolar 4. 配置Drupal公网访问地址 5. 公网远程访问Drupal 6. 固定Drupal 公网地址 前言 Dupal是一个强大的CMS&#xff0c;适用于各种不同的网站项目&#xff0c;从小型个人博客到大型企业级门户网站。…

力扣(LeetCode)2512. 奖励最顶尖的K名学生(C++)

优先队列哈希集合反向思维(或自定义排序) 模拟&#xff0c;请直接看算法思路&#xff1a; 两个哈希集合S1和S2, S1存正面词汇&#xff0c;S2存负面词汇&#xff1b;一个优先队列pq&#xff0c;pq存{score, id}键值对&#xff0c;即学生分数-学生id。 算法流程&#xff1a; 初…

vim基础指令(自用)

这个是自己随便写的&#xff0c;类似于笔记 vim 多模式编辑器 查看指令&#xff1a; gg&#xff1a; 定位光标到最开始行 shift(按)g 定位到最结尾行 nshift(按)g 定位到任意行 shift&#xff04; 定位到本行结尾 0 定位到本行开头 w&#xff1a;跨单词移动 h.j.k,l: 左下上右 …

docker之Harbor私有仓库

目录 一、什么是Harbor 二、Harbor的特性 三、Harbor的构成 1、六个组件 2、七个容器 四、私有镜像仓库的上传与下载 五、部署docker-compose服务 把项目中的镜像数据进行打包持久数据&#xff0c;如镜像&#xff0c;数据库等在宿主机的/data/目录下&#xff0c; 一、什么…

vscode 连接ubuntu git下载缓慢

在ubuntu20.04下载&#xff1a; git clone https://github.com/introlab/rtabmap.git src/rtabmap 挂掉情况 export https_proxyhttp://10.10.10.176:7890export http_proxyhttp://10.10.10.176:7890 其中 10.10.10.176是我本机的ip地址&#xff0c;7890是我的代理后几位 如…

iPhone 15分辨率,屏幕尺寸,PPI 详细数据对比 iPhone 15 Plus、iPhone 15 Pro、iPhone 15 Pro Max

史上最全iPhone 机型分辨率&#xff0c;屏幕尺寸&#xff0c;PPI详细数据&#xff01;已更新到iPhone 15系列&#xff01; 点击放大查看高清图 &#xff01;

AI「鸟口普查」,康奈尔大学利用深度学习分析北美林莺分布

据世界自然基金会统计&#xff0c;1970-2016 年&#xff0c;全球代表物种种群数量减少了 68%&#xff0c;生物多样性不断下降。 保护生物多样性&#xff0c;需要对当地生态情况进行准确分析&#xff0c;制定合理的生态保护政策。然而&#xff0c;生态数据太过庞杂&#xff0c;统…

淘宝官方开放平台API接口获取淘宝商品详情信息(价格、销量、优惠价等)

淘宝、天猫商品详情API接口实现可以获取详情页面上面的标题&#xff0c;价格&#xff0c;优惠券&#xff0c;优惠价&#xff0c;促销活动&#xff0c;库存&#xff0c;sku规格属性&#xff0c;sku属性图片&#xff0c;产品图片&#xff0c;详情属性&#xff0c;详情主图&#x…

Java架构师异步架构设计

目录 1 导学2 为何需要异步消息架构3 消息发送失败该如何处理4 mq接收到消息过后又丢失了消息怎么办5 消费者弄丢了消息该如何处理6 消息重复消费了该怎么处理7 消息的有序处理8 消息堆积该如何处理9 如何提高消息消费的速度10 消息应用的可插拔11 如何设计消息的统一id12 异步…

手把手教你从webpack迁移到vite,仅6步~!

文章目录 启动耗时对比操作步骤1. 修改 index.html2. 修改 package.json3. 重新安装依赖4. 创建vite.config.js5. 修改require导入6. 修改环境变量判断 Vite优点 Vite 开发快速入门 启动耗时对比 webpack 启动耗时23s左右&#xff1a; vite 启动耗时0.5s左右&#xff1a; 优…

9-AJAX-上-原理详解

一、定义 1、什么是Ajax Ajax&#xff1a;即异步 JavaScript 和XML。Ajax是一种用于创建快速动态网页的技术。通过在后台与进行少量数据交换&#xff0c;Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下&#xff0c;对网页的某部分进行更新。而传统的…

堆专题1 向下调整构建大顶堆

题目&#xff1a; 样例&#xff1a; 输入 6 3 2 6 5 8 7 输出 8 5 7 3 2 6 思路&#xff1a; 堆&#xff0c;是一颗完全二叉树&#xff0c;树中每个节点的值都不小于&#xff08;或不大于&#xff09;其左右孩子结点的值。 其中&#xff0c; 父结点大于或者等于孩子结点的值…

8+纯生信,多组机器学习+分型探讨黑色素瘤发文思路。

今天给同学们分享一篇泛癌多组机器学习分型的生信文章“Comprehensive characterisation of immunogenic cell death in melanoma revealing the association with prognosis and tumor immune microenvironment”&#xff0c;这篇文章于2022年9月23日发表在Front Immunol 期刊…

国际数学教材扫盲知识(持续更新中)

缩写 A-LEVEL&#xff08;大学预科&#xff09;&#xff1a;General Certificate of Education Advanced Level AP&#xff1a;Advanced Placement&#xff08;美国地区&#xff1a;美高AP&#xff09; GCSE&#xff1a;General Certificate of Secondary Education&#xf…

ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“

现象&#xff1a; ubuntu下使用gcc编译c程序: “error: stray ‘\357’ in program“ 尝试查找原因&#xff1a;打开从windos直接粘贴c程序到ubuntu的c代码&#xff0c;发现多了 <200b>&#xff1a; 方案&#xff1a;尝试在vim编辑器删除&#xff0c;多出来的字符后编译…

如何实现前端缓存管理?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

【MTK】【WIFI】手机和综测仪器误差在5db左右误差

在测试的时候发现CMU设置的信号强度和工程模式差异过大 原因分析是因为5G Rx Feloss没有填写导致 如下设置5G WF0 Tx/Rx Feloss; 指的是chipout 到测试座处的loss; 5*0.52.5dB 这样测下来误差就会在3db之内了&#xff0c;达到测试标准了