定义棋盘数组的目的是为了不重复落子(0代表空时才能下)以及后续AI中统计一方是否最终获胜
标记一下黑棋白棋而已,0表示没有棋子,1表示当前是黑棋,2表示白棋。用来记录棋盘棋子情况
上面同学的说法不太对,不是因为方面操作吧。
var x=e.offsetX;//获取的是相对于整个canvas容器的x坐标值
var y=e.offsetY;//获取的是相对于整个canvas容器的y坐标值
var i = Math.floor(x/30);
var j = Math.floor(y/30);
oneStep(i,j,me); //传入i,j值
context.arc(15+i*30,15+j*30,13,0,2*Math.PI) ;//oneStep(i,j,me)里的画圆函数
以上其实 可以 等同于 15+i*30=x; 15+j*30=y; 已知x,y值,通过除30取整获取i,j值再画圆。
以上可能是愚见,见笑了。
创建渐变出问题了。仔细检查一下。
建议不加用户自定义棋盘大小功能,因为1,15*15是符合标准的,2,弄这个功能没什么实际作用
me = !me; 要放到 chessBoard[i][j]==0 判断里面去
var x = e.offsetX; offSetX改成offsetX试试,大小写的问题
对啊,不过可以设一个边界判定下,if(e.offsetX<450){}和if(e.offsetY<450){}
旧的节点值不为默认的0,所以下不了子
没有发现这个问题,能不能截下你consol的图看下
var y=Math.floor(y/30);错了,改成var j=Math.floor(y/30);
if(me)的第二个判断里面多了一个等号
这个问题应该是出在你“交换选手”这个动作的时候,
参考视频内容,应该这么做:
“在且仅在可以放置一个棋子(if (chessBoard[i][j] == 0) 代码块里面)的时候,交换选手(me = !me)”,
检查一下,你是不是把“交换选手”动作放在了 if 语句之外,或者你在其它地方还做过这个动作。
一点建议:
我觉得你的问题出在“目前的代码里产生了问题”,应该先检查现有代码,
盲目的通过插入新代码解决问题会把问题搞得越来越糟糕。
enen
有可能是这段代码写错了:注意这个个圆形变成:15+i*30,15+j*30
(context.arc(15+i*30,15+j*30,13,0,360);)
gradient=context.createRadialGradient(15+i*30+2,15+j*30-2,13,15+i*30+2,15+j*30-2,0);
可能是你没有改变变量i-->j的问题,我也是出现了一样的问题
if(me){
......
me=!me;
}else{}
66行 me =!me 写反了
那一段代码应该这样:
if ( chessBorad[objX][objY] == 0) {
oneStep(objX, objY, me);
if (me) {
chessBorad[objX][objY] = 1;
} else {
chessBorad[objX][objY] = 2;
}
}
不给出代码, 谁能猜出来!
chess.onclick=function(){
console.log(chessBoard[i][j]);
}
这个代码有问题,点击的时候都没有去获取鼠标点击的坐标值offsetX和offsetY。。
var chessBoard = [];
for (var i = 0; i < 15; i++){
chessBoard[i] = [];
for (var j = 0; j < 15; j++){
chessBoard[i][j] = 0;
}
}
为啥在
chess.onclick = function(e) {
var x = e.offsetX;
var y = e.offsetY;
var i = Math.floor(x / 30);
var j = Math.floor(y / 30);
if (chessBoard[i][j] == 0)
{
oneStep(i,j,me);
if(me){
chessBoard[i][j] = 1;
} else {
chessBoard[i][j] = 2;
}
me = !me;
}
}
下面这一段可以用双等,而上面不能
添加一个变量~(可以用bool值),再点击的时候加个判断如果是true就执行,执行结束后赋值为false~
45行,offsetX