<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      自由型象棋分析程序

      Screenshot_20251007_164231

      可以鍵盤(pán)操作。比如鼠標(biāo)移到某個(gè)位置,按r出來(lái)個(gè)黑車(chē)。空格刪掉棋子。還可以自己吃自己,空白吃自己等,我感覺(jué)擺殘局最方便。擺完黑子,CapsLock,擺紅子。

      程序很亂。鄙人之前所發(fā)貼的拼湊版。再貼部分代碼:

      httpd.py

      # !/usr/bin/python3
      from ee import *
      from http.server import *
      from threading import *
      from urllib.parse import unquote
      from random import randint
      
      class HTTPReqHandler (SimpleHTTPRequestHandler):
        def __init__ (m, r, c, s): super().__init__(r, c, s, directory='www')
      
        def do_GET (m):
          def _200 ():
            m.send_response(200)
            m.send_header('Content-type', 'text/plain')
            m.end_headers()
      
          path = m.requestline.split(' ')[1]
          if path.startswith('/ucci?'):
            ee.send(unquote(path[6:]))
            _200()
            m.wfile.write(ee.recv().encode())
          elif path.startswith('/rpu'):
            n = randint(0, 6812)
            f = open('pu.txt', 'rb')
            for i in range(n): f.readline()
            _200()
            m.wfile.write(f.readline())
            f.close()
          else: super().do_GET()
      
        def do_HEAD (m): super().do_HEAD()
      
        def do_POST (m): super().do_POST()
      
        def end_headers (m): # callback
          m.send_header('Cache-Control', 'no-store')
          super().end_headers()
      
      def httpd_thread ():
        port = 8000
        svr_addr = ('', port)
        httpd = ThreadingHTTPServer(svr_addr, HTTPReqHandler)
        print('Listening at', port)
        httpd.serve_forever()
      
      Thread(daemon=1, target=httpd_thread).start()
      
      try:
        while True: input()
      except BaseException: pass
      View Code

      JS

      function ajax(req, param, cb){
        let ax = window.XMLHttpRequest ?  new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP')
        ax.onreadystatechange = function(){
          if(ax.readyState != 4 || ax.status != 200) return
          cb(ax.responseText)
        }
        ax.open('GET', req + encodeURIComponent(param), true); ax.send()
      }
      
      function move (who, mv) {
        ucciout.innerText = 'busy'
        ajax('/ucci?', 'position fen ' + _brd2fen() + ' ' + who + '\ngo 999', (s)=>{
          ucciout.innerText = s
          let i = s.indexOf('\nbestmove')
          if(i === -1) return
          // 'b' - 'a'=NaN; '9' - '0'=9
          let a = 'a'.charCodeAt(0)
          fx = s.charCodeAt(i+10) - a
          tx = s.charCodeAt(i+12) - a
          fy = '9' - s.charAt(i+11)
          ty = '9' - s.charAt(i+13)
          //console.log(fx, fy, tx, ty)
          if (mv) { // 走棋而不是僅分析
            recMove(fx, fy, tx, ty)
            _brd[ty][tx] = _brd[fy][fx]; _brd[fy][fx] = ' '; draw_all()
          }
        })
      }
      
      function rpu () {
        ajax('/rpu', '', (s)=>{
          pad.value = s
          loadUBB()
        })
      }
      
      let dic = JSON.parse(`{"r":"車(chē)", "n":"馬", "c":"炮", "b":"象", "B":"相",
      "a":"士", "A":"仕", "k":"將", "K":"帥", "p":"卒", "P":"兵"}`)
      dic['R'] = dic['r']; dic['N'] = dic['n']; dic['C'] = dic['c']
      
      function recMove(fx, fy, tx, ty) {
        let c = _brd[fy][fx]
        if (c === ' ') return
        let isRed = c < 'a'
        let d = fy - ty
        if (d < 0) d = -d
        s = dic[c]
        if (isRed) {
          let x = "九八七六五四三二一"
          s += x[fx]
          if (fy === ty)
            s += "平" + x[tx]
          else {
            s += (fy > ty) ? "進(jìn)" : "退"
            if ("RCPK".includes(c))
              s += "零一二三四五六七八九"[d]
            else
              s += x[tx]
          }
        }
        else {
          let x = "123456789"
          s += x[fx]
          if (fy === ty)
            s += "平" + x[tx]
          else {
            s += (fy < ty) ? "進(jìn)" : "退"
            if ("rcpk".includes(c))
              s += "0123456789"[d]
            else
              s += x[tx]
          }
        }
        if (!moves.value.length) mc = 0
        moves.value += s + ' '
      }
      View Code

      雙擊FEN則應(yīng)用它和覆蓋性粘貼:

      pad.addEventListener('dblclick', (e) => {
        function findAll (str, ch) {
          let positions = [-1]
          for (let pos = str.indexOf(ch); pos !== -1;) {
            positions.push(pos)
            pos = str.indexOf(ch, pos + 1)
          }
          positions.push(str.length)
          return positions
        }
      
        const t = e.target
        const lineHeight = parseInt(getComputedStyle(t).lineHeight)
        if (Number.isNaN(lineHeight)) alert('style里要有l(wèi)ine-height')
        const clickPos = e.clientY - t.getBoundingClientRect().top
        let lineNum = Math.floor(clickPos / lineHeight)
        const str = t.value
        let a = findAll(str, '\n')
        let start = a[lineNum++] + 1
        let end = a[lineNum]
        t.setSelectionRange(start, end)
        fromFEN(str.substring(start, end))
      })
      
      function on_keydown (e) {
        let c = e.key
        if (e.ctrlKey && (c === 'v') || (c === 'a')) {
          e.target.value = ''
          return true
        }
        if (oob) return true // mouse pointer out of board
        if (!'rnbakcp '.includes(c.toLowerCase())) return true
        _brd[my][mx] = c
        sx = sy = -1
        draw(mx, my, 1)
        e.preventDefault()
        return false
      }
      View Code

       

      posted @ 2025-10-07 16:55  華容道專(zhuān)家  閱讀(7)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 丁香花在线影院观看在线播放| 国产精品免费中文字幕| 亚洲鸥美日韩精品久久| 日韩黄色av一区二区三区| 久久婷婷大香萑太香蕉AV人| 开心五月深深爱天天天操| 久久成人国产精品免费软件| 97久久久亚洲综合久久| 7m精品福利视频导航| 国产精品呻吟一区二区三区| 91中文字幕一区在线| 午夜成人无码免费看网站| 国产成人精品18| 免费大黄网站在线观看| 国产精品不卡一区二区三区| 欧美肥妇毛多水多bbxx| 国产精品日韩av一区二区| 中文字幕国产精品资源| 99精品国产综合久久久久五月天| 亚洲综合91社区精品福利| 啦啦啦高清在线观看视频www| 野花韩国高清电影| 男受被做哭激烈娇喘gv视频| 自拍偷在线精品自拍偷99| 在线a亚洲老鸭窝天堂| 日本高清中文字幕免费一区二区| 亚洲成人精品一区二区中| AV无码免费不卡在线观看| 亚洲一区二区中文av| 动漫精品专区一区二区三区| 国产一区精品在线免费看| 毛片内射久久久一区| 少妇高潮喷潮久久久影院| 日韩无矿砖一线二线卡乱| 小婕子伦流澡到高潮h| 国产精品一区二区三区专区| 一本一道av中文字幕无码| 性欧美牲交在线视频| 亚洲欧洲国产综合aⅴ无码| 国产欧美日韩高清在线不卡| 国产一区二区三区在线看|