亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

有兩個疑問,同學們幫忙解答一下

1:分出輸贏以后清除畫布,重新開始!但是用clearRect(0, 0, canvas.width, canvas.height) 會連邊框一起清除。所以只能是刷新頁面?

2: 可能是我代碼問題,算法有問題好像! 不會堵我下的棋。而且就算我隨便下,它也要好久才能贏!


代碼貼上來給大家看一下希望有人幫我看看:

var?canvas?=?document.getElementById('can')
var?context?=?canvas.getContext('2d');
var?chess?=?[];
var?wins?=?[];
var?me?=?true;
var?over?=?false;
//贏法統計數組
var?mywin?=?[];
var?computerwin?=?[];
for?(var?i?=?0;?i?<?15;?i++)?{
????chess[i]?=?[];
????for?(var?j?=?0;?j?<?15;?j++)?{
????????chess[i][j]?=?0;
????}
}
for?(var?i?=?0;?i?<?15;?i++)?{
????wins[i]?=?[];
????for?(var?j?=?0;?j?<?15;?j++)?{
????????wins[i][j]?=?[];
????}
}
//贏法種類的數組
var?count?=?0;
//所有橫線贏法
for?(var?i?=?0;?i?<?15;?i++)?{
????for?(var?j?=?0;?j?<?11;?j++)?{
????????//wins[0][0][0]=true
????????//wins[0][1][0]=true
????????//wins[0][2][0]=true
????????//wins[0][3][0]=true
????????//wins[0][4][0]=true

????????//wins[0][1][1]=true
????????//wins[0][2][1]=true
????????//wins[0][3][1]=true
????????//wins[0][4][1]=true
????????//wins[0][5][1]=true

????????for?(var?k?=?0;?k?<?5;?k++)?{
????????????wins[i][j?+?k][count]?=?true;
????????}
????????count++
????}
}
//所有豎線贏法
for?(var?i?=?0;?i?<?15;?i++)?{
????for?(var?j?=?0;?j?<?11;?j++)?{
????????for?(var?k?=?0;?k?<?5;?k++)?{
????????????wins[j?+?k][i][count]?=?true;
????????}
????????count++
????}
}
//所有斜線贏法
for?(var?i?=?0;?i?<?11;?i++)?{
????for?(var?j?=?0;?j?<?11;?j++)?{
????????for?(var?k?=?0;?k?<?5;?k++)?{
????????????wins[i?+?k][j?+?k][count]?=?true;
????????}
????????count++
????}
}
//所有斜線贏法
for?(var?i?=?0;?i?<?11;?i++)?{
????for?(var?j?=?14;?j?>?3;?j--)?{
????????for?(var?k?=?0;?k?<?5;?k++)?{
????????????wins[i?+?k][j?-?k][count]?=?true;
????????}
????????count++
????}
}
for?(var?i?=?0;?i?<?count;?i++)?{
????mywin[i]?=?0;
????computerwin[i]?=?0;
}
context.strokeStyle?=?'#bfbfbf'
for?(var?i?=?0;?i?<?15;?i++)?{
????context.moveTo(15?+?i?*?30,?15);
????context.lineTo(15?+?i?*?30,?435);
????context.moveTo(15,?15?+?i?*?30);
????context.lineTo(435,?15?+?i?*?30);
????context.stroke()
}
var?oneStep?=?function?(i,?j,?me)?{
????context.beginPath();
????context.arc(15?+?i?*?30,?15?+?j?*?30,?13,?0,?Math.PI?*?2);
????context.closePath()

????var?yin?=?context.createRadialGradient(15?+?i?*?30?+?2,?15?+?j?*?30?-?2,?13,?15?+?i?*?30?+?2,?15?+?j?*?30?-?2,?0)
????if?(me)?{
????????yin.addColorStop(0,?'#0a0a0a')
????????yin.addColorStop(1,?'#636766')
????}?else?{
????????yin.addColorStop(0,?'#d1d1d1')
????????yin.addColorStop(1,?'#f9f9f9')
????}
????context.fillStyle?=?yin
????context.fill()
}
canvas.onclick?=?function?(e)?{
????if?(over)?{
????????return
????}
????if?(!me)?{
????????return
????}
????var?x?=?e.offsetX;
????var?y?=?e.offsetY;
????i?=?Math.floor(x?/?30);
????j?=?Math.floor(y?/?30);
????if?(chess[i][j]?==?0)?{
????????oneStep(i,?j,?me);
????????chess[i][j]?=?1;
????????for?(var?k?=?0;?k?<?count;?k++)?{
????????????if?(wins[i][j][k])?{
????????????????mywin[k]++
????????????????computerwin[k]?=?6;
????????????????if?(mywin[k]?==?5)?{
????????????????????window.alert('你贏了');
????????????????????over?=?true;
????????????????}
????????????}
????????}
????????if?(!over)?{
????????????me?=?!me;
????????????computerAi()
????????}
????}
}

var?computerAi?=?function?()?{
????var?myScore?=?[];
????var?computerScore?=?[];
????var?max?=?0;
????var?u?=?0,
????????????v?=?0;
????for?(var?i?=?0;?i?<?15;?i++)?{
????????myScore[i]?=?[];
????????computerScore[i]?=?[];
????????for?(var?j?=?0;?j?<?15;?j++)?{
????????????myScore[i][j]?=?0;
????????????computerScore[i][j]?=?0;
????????}
????}
????for?(var?i?=?0;?i?<?15;?i++)?{
????????for?(var?j?=?0;?j?<?15;?j++)?{
????????????if?(chess[i][j]?==?0)?{
????????????????for?(var?k?=?0;?k?<?count;?k++)?{
????????????????????if?(wins[i][j][k])?{
????????????????????????if?(mywin[k]?==?1)?{
????????????????????????????myScore[i][j]?+=?500;
????????????????????????}?else?if?(mywin[k]?==?2)?{
????????????????????????????myScore[i][j]?+=?600;
????????????????????????}?else?if?(mywin[k]?==?3)?{
????????????????????????????myScore[i][j]?+=?1000;
????????????????????????}?else?if?(mywin[k]?==?4)?{
????????????????????????????myScore[i][j]?+=?5000;
????????????????????????}
????????????????????????if?(computerwin[k]?==?1)?{
????????????????????????????computerScore[i][j]?+=?520;
????????????????????????}?else?if?(computerwin[k]?==?2)?{
????????????????????????????computerScore[i][j]?+=?650?;
????????????????????????}?else?if?(computerwin[k]?==?3)?{
????????????????????????????computerScore[i][j]?+=1200;
????????????????????????}?else?if?(computerwin[k]?==?4)?{
????????????????????????????computerScore[i][j]?+=?10000;
????????????????????????}
????????????????????}
????????????????}

????????????????if?(myScore[i][j]?>?max)?{
????????????????????max?=?myScore[i][j];
????????????????????u?=?i;
????????????????????v?=?j;
????????????????}?else?if?(myScore[i][j]?==?max)?{
????????????????????if?(computerScore[i][j]?>?computerScore[u][v])?{
????????????????????????u?=?i;
????????????????????????v?=?j;
????????????????????}
????????????????}
????????????????if?(computerScore[i][j]?>?max)?{
????????????????????max?=?computerScore[i][j];
????????????????????u?=?i;
????????????????????v?=?j;
????????????????}?else?if?(computerScore[i][j]?==?max)?{
????????????????????if?(myScore[i][j]?>?myScore[u][v])?{
????????????????????????u?=?i;
????????????????????????v?=?j;
????????????????????}
????????????????}
????????????}
????????}
????}
????oneStep(u,v,false);
????chess[u][v]=2;
????for?(var?k?=?0;?k?<?count;?k++)?{
????????if?(wins[u][v][k])?{
????????????computerwin[k]++
????????????mywin[k]?=?6;
????????????if?(computerwin[k]?==?5)?{
????????????????window.alert('計算機贏了');
????????????????over?=?true;
????????????}

????????}
????}
????if?(!over)?{
????????me?=?!me;
????}
}


正在回答

1 回答

第二個問題

????????????????????????if?(mywin[k]?==?1)?{

????????????????????????????myScore[i][j]?+=?500;

????????????????????????}?else?if?(mywin[k]?==?2)?{

????????????????????????????myScore[i][j]?+=?600;

????????????????????????}?else?if?(mywin[k]?==?3)?{

????????????????????????????myScore[i][j]?+=?1000;

????????????????????????}?else?if?(mywin[k]?==?4)?{

????????????????????????????myScore[i][j]?+=?5000;

????????????????????????}

????????????????????????if?(computerwin[k]?==?1)?{

????????????????????????????computerScore[i][j]?+=?520;

????????????????????????}?else?if?(computerwin[k]?==?2)?{

????????????????????????????computerScore[i][j]?+=?650?;

????????????????????????}?else?if?(computerwin[k]?==?3)?{

????????????????????????????computerScore[i][j]?+=1200;

????????????????????????}?else?if?(computerwin[k]?==?4)?{

????????????????????????????computerScore[i][j]?+=?10000;

????????????????????????}

這邊后面加的數字是有講究的,不是隨便寫的,或許這幾個數值是別人摸索了好久的,你先換成視頻里的數字看下

0 回復 有任何疑惑可以回復我~
#1

你有魚丸我有粗面 提問者

恩,我以為給他的分數更大就行。 我試了好幾個數字都沒有效果,后來還是按照視頻來才可以實現。
2016-06-17 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

有兩個疑問,同學們幫忙解答一下

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號