js 棋类游戏 轮流走一步棋 的逻辑 本帖最后由 gjt19910817 于 2012-11-12 09:58:12 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不要使用while循环。可以这样写function Human_move();{ ....onclick(funcion(){ .... turn(); });}function turn(){ if(step%2==0){ Human_move(); } else{ AI_move(); turn(); }} 2个 control 当前只有一个control 再起作用这个思路 合具体 语言没关系 不懂瞎扯淡:定个变量 初值为1 判断唯一人能走 走完改为2 AI才能走 AI走完再改1 想AI先走直接把初值改为2就好了 onclick事件函数在 human_move()函数里面??不是很理解啊还有那个turn()那样写的话不就是递归了???这样写逻辑好像不是很好吧。 嗯。这个和我那个while循环的思路差不多。就是不知道怎么控制唯一人能走。因为人走棋 是onclick事件触发的。AI走棋是 AI_move() 函数,不知道怎么控制 人走完之后,AI才能走,AI走完之后,才允许 onclick事件发生。 您能否讲得具体一些呢???我的最大的疑问就是:人走棋 是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改值}}大概就是这个意思 我也不懂 人走得时候触发onclick事件,此时触发一个函数,这个函数将对应的点或其他的什么变色后顺便让ai走,ai就不触发什么onclick事件了,直接将判断后的点变色也就是让人的click事件触发ai行动试试 额 看了2楼的我感觉这样写比较合理 目前我的想法最好就是var ctx;//2d画布元素var xxxx;//控制谁先走 1为人 2为AIvar xxx=0;//控制输赢 1为输 2为赢 3为平 0为继续下棋xxxx=?//选定谁先走后赋值function human_move() {};function ai_move() {};function judge() {};//判断输赢给xxx赋值function win() {//结果出现后 if (xxx=1){ alert("输") } else if (xxx=2){ alert("赢") } else{ alert("平") }};function mian() {//下棋主流程方法 human_move()//人下棋 ctx.removeEventListener("click",function () {},false)//人下完解绑CLICK事件 judge()//判断输赢给xxx赋值 if(xxx!=0){ win() return false; }//不为0 输出并结束 ai_move() judge() if(xxx!=0){ win() return false; }//不为0 输出并结束 ctx.addEventListener("click",function () {},false)//为0继续 绑定CLICK事件 main()//下一回合};/*判断谁先手*/if(xxxx=1){ ctx.addEventListener("click",function () {},false)//人先手绑定CLICK事件 main()//进入主流程 }else if (xxxx=2){ ai_move() ctx.addEventListener("click",function () {},false)//AI先手 下棋后绑定CLICK事件 main()//进入主流程 } 随便写写 不懂 mvc 理论大家都知道实际应用中 是很灵活的不管是 电脑 还是 人脑 control 都是一样的 或者说 都是同一个类的实现剩余下 ai 和 人脑 不一样的就是 怎么触发 control的方法(这个是一个 策略,也就是 你判定 当前 那个control 可以被触发,或者2个 同时 被触发)ai的话 那么view层只管显示动作 人脑的话 那么 view还要绑定 control的触发事件 比如我 拖动棋子 会调用control的什么方法module层 大家 是一样的 甚至是 共享的(可能就是整个棋盘的详细信息。。)好吧 (module + control +VIEW[AI | PLAY ])(策略+AI运算)我只会 面向对象的写法 不知道 能帮助你不 - -忘记套框了 重发下var ctx;//2d画布元素var xxxx;//控制谁先走 1为人 2为AIvar xxx=0;//控制输赢 1为输 2为赢 3为平 0为继续下棋xxxx=?//选定谁先走后赋值function human_move() {};function ai_move() {};function judge() {};//判断输赢给xxx赋值function win() {//结果出现后 if (xxx=1){ alert("输") } else if (xxx=2){ alert("赢") } else{ alert("平") }};function mian() {//下棋主流程方法 human_move()//人下棋 ctx.removeEventListener("click",function () {},false)//人下完解绑CLICK事件 judge()//判断输赢给xxx赋值 if(xxx!=0){ win() return false; }//不为0 输出并结束 ai_move() judge() if(xxx!=0){ win() return false; }//不为0 输出并结束 ctx.addEventListener("click",function () {},false)//为0继续 绑定CLICK事件 main()//下一回合};/*判断谁先手*/if(xxxx=1){ ctx.addEventListener("click",function () {},false)//人先手绑定CLICK事件 main()//进入主流程 }else if (xxxx=2){ ai_move() ctx.addEventListener("click",function () {},false)//AI先手 下棋后绑定CLICK事件 main()//进入主流程 } 嗯。看了你的方法之后很受启发。非常感谢!还有一个疑问,就是怎么将 human_move() 设置成阻塞的,就是只有当 onclick 事件触发了之后才执行一下步 ?因为 humain_move() 就是 onclick事件函数 而已。 我最初时候是这么写的。但是觉得很不好。因为人开局前要选择 先手 或者 后手 ,让onclick触发 执行 ai_move() 显然不好,虽然可以实现,但是那样逻辑就很乱了。。 啊...OO觉得太麻烦了,所以自己写的还是面向过程的形式。请教一个具体问题吧。类似于这样的一个逻辑中:while( 胜负条件... ){ if( steps % 2 == 0 ) Human_move(); else if( steps % 2 == 1 ) AI_move();}可以把 Human_move() 设置成阻塞的吗???就是在 Human_move() 中如果没有出现 onclick事件,就卡在那里等待 onclick事件,而不继续执行 ?因为如果不是阻塞的,就一直在那while(), 变成死循环了。 我不是谢了绑定和解绑click事件么 解绑了不久阻塞了么 我就写了一句话这么多错别字 我倒 “我不是写了绑定和解绑click事件么 解绑了不就阻塞了么 ” boolean ttt = false;ttt = true? false:true; JS写的计算总额代码 yui3 tabview 菜鸟级问题:有关if()语句的问题,懂js的哥哥姐姐进来看一下? 使用163编辑器的问题 如何用jS 实现CSS 中的 position:fixed? 一个frame框架怎么调用另一个frame框架的url 高手请进:如何通过点击一个按钮调用一个显示的页面 javascript控制图片按比例缩小的代码? 菜鸟问题?关于radio! 这个功能如何实现啊???????? chrome 怎么看函数执行了多长时间啊 求js 通过Img的src动态获取验证码的兼容代码
function Human_move();
{
....onclick(funcion(){
....
turn();
});
}function turn(){
if(step%2==0){
Human_move();
}
else{
AI_move();
turn();
}
}
onclick事件函数在 human_move()函数里面??不是很理解啊
还有那个turn()那样写的话不就是递归了???这样写逻辑好像不是很好吧。
嗯。这个和我那个while循环的思路差不多。就是不知道怎么控制唯一人能走。因为人走棋 是onclick事件触发的。AI走棋是 AI_move() 函数,不知道怎么控制 人走完之后,AI才能走,AI走完之后,才允许 onclick事件发生。
您能否讲得具体一些呢???我的最大的疑问就是:
人走棋 是onclick事件触发的。AI走棋是 AI_move() 函数,不知道怎么控制 人走完之后,AI才能走,AI走完之后,才允许 onclick事件发生
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事件触发ai行动试试
额 看了2楼的我感觉这样写比较合理 目前我的想法最好就是
var ctx;//2d画布元素
var xxxx;//控制谁先走 1为人 2为AI
var xxx=0;//控制输赢 1为输 2为赢 3为平 0为继续下棋
xxxx=?//选定谁先走后赋值function human_move() {};
function ai_move() {};
function judge() {};//判断输赢给xxx赋值
function win() {//结果出现后
if (xxx=1){
alert("输")
}
else if (xxx=2){
alert("赢")
}
else{
alert("平")
}};function mian() {//下棋主流程方法
human_move()//人下棋
ctx.removeEventListener("click",function () {},false)//人下完解绑CLICK事件
judge()//判断输赢给xxx赋值
if(xxx!=0){
win()
return false;
}//不为0 输出并结束 ai_move()
judge()
if(xxx!=0){
win()
return false;
}//不为0 输出并结束
ctx.addEventListener("click",function () {},false)//为0继续 绑定CLICK事件
main()//下一回合
};
/*判断谁先手*/
if(xxxx=1){
ctx.addEventListener("click",function () {},false)//人先手绑定CLICK事件
main()//进入主流程
}else if (xxxx=2){
ai_move()
ctx.addEventListener("click",function () {},false)//AI先手 下棋后绑定CLICK事件
main()//进入主流程
}
随便写写 不懂
var ctx;//2d画布元素
var xxxx;//控制谁先走 1为人 2为AI
var xxx=0;//控制输赢 1为输 2为赢 3为平 0为继续下棋
xxxx=?//选定谁先走后赋值function human_move() {};
function ai_move() {};
function judge() {};//判断输赢给xxx赋值
function win() {//结果出现后
if (xxx=1){
alert("输")
}
else if (xxx=2){
alert("赢")
}
else{
alert("平")
}};function mian() {//下棋主流程方法
human_move()//人下棋
ctx.removeEventListener("click",function () {},false)//人下完解绑CLICK事件
judge()//判断输赢给xxx赋值
if(xxx!=0){
win()
return false;
}//不为0 输出并结束 ai_move()
judge()
if(xxx!=0){
win()
return false;
}//不为0 输出并结束
ctx.addEventListener("click",function () {},false)//为0继续 绑定CLICK事件
main()//下一回合
};
/*判断谁先手*/
if(xxxx=1){
ctx.addEventListener("click",function () {},false)//人先手绑定CLICK事件
main()//进入主流程
}else if (xxxx=2){
ai_move()
ctx.addEventListener("click",function () {},false)//AI先手 下棋后绑定CLICK事件
main()//进入主流程
}
嗯。看了你的方法之后很受启发。非常感谢!
还有一个疑问,就是怎么将 human_move() 设置成阻塞的,就是只有当 onclick 事件触发了之后才执行一下步 ?
因为 humain_move() 就是 onclick事件函数 而已。
我最初时候是这么写的。但是觉得很不好。因为人开局前要选择 先手 或者 后手 ,让onclick触发 执行 ai_move() 显然不好,虽然可以实现,但是那样逻辑就很乱了。。
啊...OO觉得太麻烦了,所以自己写的还是面向过程的形式。
请教一个具体问题吧。
类似于这样的一个逻辑中:
while( 胜负条件... )
{
if( steps % 2 == 0 ) Human_move();
else if( steps % 2 == 1 ) AI_move();
}
可以把 Human_move() 设置成阻塞的吗???
就是在 Human_move() 中如果没有出现 onclick事件,就卡在那里等待 onclick事件,而不继续执行 ?
因为如果不是阻塞的,就一直在那while(), 变成死循环了。
ttt = true? false:true;