日期:2014-05-16  浏览次数:20479 次

js 棋类游戏 轮流走一步棋 的逻辑
本帖最后由 gjt19910817 于 2012-11-12 09:58:12 编辑
要做一个比较简单的对战的棋类游戏。逻辑,算法什么的全部写在js文件里面。

现在卡在一个小问题上面了。。

两个棋手(一个是人,一个是电脑AI),一人走一步棋。怎么控制呢?

我用的是 html5 的 canvas 控件。人类走棋是在 canvas 上面点击触发 onclick 事件的函数,叫这个函数human_move() 吧。 
AI 走棋就是一个 AI_move() 函数。

我现在用的方法是 在 human_move() 函数内,最后执行 AI_move()。等于是把 人类和AI 的移动全部写进 onclick 事件函数里面去了。

但是后来规则要改成,人类可以选择 先手 或者 后手 走棋,那么显然不能把 AI_move() 放在 onclick 事件里面。
我现在就想把 human_move() 和 AI_move() 写到一个主要控制逻辑里面去。

尝试增加一个 step变量, 进行计数, 单数就是人类走,双数就是AI走。每次走完,steps++。
想改成大概下面这样的形式:
while( 胜负条件... )
{
    if( steps % 2 == 0 ) Human_move(); // Human_move()是onclick事件函数,这样显然不对。
    else if( steps % 2 == 1 ) AI_move();
}

但是怎么弄都搞不定,老是死循环。。。

请问大家有什么思路和建议???
小弟js也是才上手几天,也不是很熟。跪谢了。



------解决方案--------------------
不要使用while循环。可以这样写


function Human_move();
{
   ....onclick(funcion(){
       ....
       turn();
   });
}

function turn(){
   if(step%2==0){ 
       Human_move();
   }
   else{
        AI_move();
        turn();
   }
}
------解决方案--------------------
这个不懂帮顶!
------解决方案--------------------
2个 control 

当前只有一个control 再起作用

这个思路 合具体 语言没关系
------解决方案--------------------
引用:
引用:2个 control 

当前只有一个control 再起作用

这个思路 合具体 语言没关系

您能否讲得具体一些呢???我的最大的疑问就是:
人走棋 是onclick事件触发的。AI走棋是 AI_move() 函数,不知道怎么控制 人走完之后,AI才能走,AI走完之后,才允许 onclick事件发生
       ……

var xxxx = 1;//控制谁走
var xxx = 1;//控制输赢
while(xxx=1){
if(xxxx=1){
   //onclick可触发等待触发
   onclick()//下棋触发
   xxxx=2//改变量
   //判断输赢然后决定是否给xxx改值
}
else if (xxxx=2){
   AI_move()//触发ai走棋
   xxxx=1//在改回来
   //判断输赢然后决定是否给xxx改值
}}
大概就是这个意思 我也不懂 
------解决方案--------------------
我就写了一句话这么多错别字 我倒  “。。。我不是写了绑定和解绑click事件么 解绑了不就阻塞了么 ”