三国华容道网页版来了

<html>
<title>三国华容道</title>
<script type="text/javascript">
//0代表空格,1代表4个卒,2黄忠3马超4张飞5赵云,6代表关羽,7代表曹操
//move为单击相关的移动,移动1时有两个选择时,再单击空格,
//2-5上下同时有空偏向单击方向 6左右同时有空偏向单击方向
var h=[[2,7,7,3],
       [2,7,7,3],
       [4,6,6,5],
       [4,1,1,5],
       [1,0,0,1]];
//有两个0与1相邻移动其一
var r1=-1
var c1=-1
function show_coords(event)
{
  i=parseInt((event.clientY-64)/95)
  j=parseInt((event.clientX-65)/95)
  if(j<0||j>3||i<0||i>4) return;
  move(h[i][j],i,j);
}
function move(n,i,j)
{ 
  if(n==0){move0(i,j);return;}
  r1=-1;c1=-1;
  if(n==1){move1(i,j);return;}
  if(n>=2&&n<=5){move25(n,i,j);return;}
  if(n==6){move6(i,j);return;}
  if(n==7){move7(i,j);return;}
}
function move7(i,j)
{//确认左上坐标,分情况0在上下左右移动
   i=-1;n=7; 
   for(i1=0;i==-1&&i1<5;i1++)
     for(j1=0;i==-1&&j1<4;j1++)
     {if(h[i1][j1]==n){i=i1;j=j1;}}
   //上有两个0左右相连
     if(i-1>=0&&h[i-1][j]==0&&h[i-1][j+1]==0)
     {h[i-1][j]=n;h[i-1][j+1]=n;h[i+1][j]=0;h[i+1][j+1]=0;}
   //下有两个0左右相连
     if(i+2<5&&h[i+2][j]==0&&h[i+2][j+1]==0)
     {h[i+2][j]=n;h[i+2][j+1]=n;h[i][j]=0;h[i][j+1]=0;}
   //左有两个0上下相连
     if(j-1>=0&&h[i][j-1]==0&h[i+1][j-1]==0)
     {h[i][j-1]=n;h[i+1][j-1]=n;h[i][j+1]=0;h[i+1][j+1]=0;}  
   //右有两个0上下相连
     if(j+2<4&&h[i][j+2]==0&h[i+1][j+2]==0)
     {h[i][j+2]=n;h[i+1][j+2]=n;h[i][j]=0;h[i+1][j]=0;}
     init(); 
}
function move6(i,j)
{//确认左上坐标,分情况0在上下左右移动
   i=-1;n=6; j0=j;
   for(i1=0;i==-1&&i1<5;i1++)
     for(j1=0;i==-1&&j1<4;j1++)
     {if(h[i1][j1]==n){i=i1;j=j1;}}
  //左有一个0
  if(j-1>=0&&h[i][j-1]==0&&j==j0)
  {h[i][j-1]=n;h[i][j+1]=0;}
  //右有一个0
  if(j+2<4&&h[i][j+2]==0&&j<j0)
  {h[i][j+2]=n;h[i][j]=0;}
  //上有两个0左右相连
  if(i-1>=0&&h[i-1][j]==0&&h[i-1][j+1]==0)
  {h[i-1][j]=n;h[i-1][j+1]=n;h[i][j]=0;h[i][j+1]=0;}
  //下有两个0左右相连
  if(i+1<5&&h[i+1][j]==0&&h[i+1][j+1]==0)
  {h[i+1][j]=n;h[i+1][j+1]=n;h[i][j]=0;h[i][j+1]=0;}
  init(); 
}
function move25(n,i,j)
{//确认左上坐标,分情况0在上下左右移动
   i0=i;i=-1; 
   for(i1=0;i==-1&&i1<5;i1++)
     for(j1=0;i==-1&&j1<4;j1++)
     {if(h[i1][j1]==n){i=i1;j=j1;}}
   //上有一个0
   if(i-1>=0&&h[i-1][j]==0&&i==i0)
   { h[i-1][j]=n;h[i+1][j]=0; }
   //下有一个0
   if(i+2<5&&h[i+2][j]==0&&i<i0)
   { h[i+2][j]=n;h[i][j]=0; }
   //左有两个0上下相连
   if(j-1>=0&&h[i][j-1]==0&h[i+1][j-1]==0)
   {
     h[i][j-1]=n
     h[i+1][j-1]=n
     h[i][j]=0
     h[i+1][j]=0
   }  
   //右有两个0上下相连
    if(j+1<4&&h[i][j+1]==0&h[i+1][j+1]==0)
   {
     h[i][j+1]=n
     h[i+1][j+1]=n
     h[i][j]=0
     h[i+1][j]=0
   }  
   init();
}
function move1(i,j)
{//4个方向上行列偏移量 上、下、左、右 
  di4=[[-1,0],[1,0], [0,-1],[0,1]]
  count0=0;
  for (x=0;x<4;x++)
    {
       i1=i+di4[x][0];
       j1=j+di4[x][1];
       if(i1>=0&&i1<5&&j1>=0&&j1<4&&h[i1][j1]==0)
          {i0=i1;j0=j1;count0=count0+1;}
    }
  //1上下左右有一个0就可以
  if(count0==1){h[i][j]=0;h[i0][j0]=1;init();}
  else {r1=i;c1=j;} 
  //2个0时置标记,鼠标二次选0位置移动
}
function move0(i,j)
{//有两个0与1相邻移动其一
  if(r1>=0&&c1>=0)
    {
      h[r1][c1]=0;
      h[i][j]=1;
      r1=-1;c1=-1
      init()
     } 
}
function init()
{//显示背景
  var canvas = document.getElementById("canvas");
  var ctx = canvas.getContext("2d");
  imgb = document.createElement("img")
  imgb.src="b.png"
  ctx.drawImage(imgb,0,0);
  init1()
}
function init1()
{//显示成员time为相应成员显示次数,占两个以上格的显示1次
  var canvas = document.getElementById("canvas");
  var ctx = canvas.getContext("2d");
  imgb = document.createElement("img")
  time=[2,4,1,1,1,1,1,1]
  for(i=0;i<5;i++)
     for(j=0;j<4;j++)
     {
       n=h[i][j]
       if(time[n]>0)
       {
         time[n]=time[n]-1
         imgb.src=n+".png"
         ctx.drawImage(imgb,63+97*j,64+97*i);
        }
     }
}

function begin()
{
 init()
}
function begin1()
{
     h=[[2,7,7,3],
       [2,7,7,3],
       [1,6,6,1],
       [4,1,1,5],
       [4,0,0,5]];
 init()
}
function begin2()
{
    h=[[0,7,7,0],
       [2,7,7,3],
       [2,4,5,3],
       [1,4,5,1],
       [6,6,1,1]];
 init()
}
function begin3()
{
    h=[[2,7,7,3],
       [2,7,7,3],
       [1,1,1,1],
       [4,6,6,5],
       [4,0,0,5]];
 init()
}
function begin4()
{
    h=[[1,7,7,1],
       [2,7,7,3],
       [2,6,6,3],
       [4,1,1,5],
       [4,0,0,5]];
 init()
}
</script>
<body>
 <canvas id="canvas" width="500" height="600" onmousedown="show_coords(event)" style="border:1px solid #d3d3d3;">抱歉,您的浏览器不支持canvas元素</canvas>
 <p><input type="button" value="横刀立马" onClick="begin()">
    <input type="button" value="指挥若定" onClick="begin1()"> 
    <input type="button" value="将拥曹营" onClick="begin2()"> 
    <input type="button" value="齐头并进" onClick="begin3()"> 
    <input type="button" value="兵分三路" onClick="begin4()"> 
</body>
</html>

 微信视频号

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Python三国华容道是一个使用Python语言实现的华容道游戏。该游戏的实质是一个树的搜索问题,对学习理解《数据结构》有很大帮助。在游戏中,通过使用深度优先搜索或广度优先搜索算法,对华容道问题进行求解。华容道的棋局数据结构可以使用列表来容纳全部棋子实例。每个棋子都有自己的名称、大小和位置信息。在Python程序中,通过创建棋子实例,并将它们添加到棋局列表中,来构建初始棋局。对于华容道问题的求解,可以根据实际需求选择使用深度优先搜索算法或广度优先搜索算法。深度优先算法可以快速得到求解结果,但棋子移动步骤较长;广度优先算法可以获得较短的移动步骤,但求解速度较慢。通过运用这些算法,可以解决三国华容道问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Python三国华容道程序-深度优先](https://blog.csdn.net/CQZHOUZR/article/details/121862680)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Python三国华容道程序-广度优先](https://blog.csdn.net/CQZHOUZR/article/details/121978928)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值