我的jQuery作业存在严重问题(我是学生和JS初学者)。
基本上,分配是使用MV(C)(我们不使用控制器)模式使用jQuery创建Connect 4游戏。
比赛场地是一个2D阵列,看起来像这样。
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
并且玩家按下列进行游戏(f.ex.Player 1按3)
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , x , - , - , - , -
并且播放器2按下4
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , - , - , - , - , -
- , - , x , o , - , - , -
等等。
当游戏结束时,获胜的四个字母应该变为大写。
我卡住了,不知道怎么回事,所以我创建了一个包含所有代码的GitHub存储库。
https://github.com/VeronicaLeeds/connectfour
基本上它初始化了比赛场地,你可以按数字但是play()方法不起作用。
我不知道从View调用该函数的任何其他方法。
我尝试了View()。play,View.play(),play()... 但总有一个错误。
if (evt.which == 49) {
View().play(1);
return 1;
console.log('1');
}
play()函数位于View.js文件中。
永远感激任何帮助。
答案 0 :(得分:0)
有点抬头,您应该将文件重命名为重要文件。当某些文件的名称与js.js
一样模糊时,很难找到相关代码。
除此之外,checkIfWon(arr)
中的函数js.js
使用方法checkForFour()
,该方法将数组作为参数,并根据来自同一玩家的4个片段返回true或false已被发现。
由于在同一个数组上迭代两次是多余的,如果没有检测到connect-4,你可以让checkIfWon(arr)
返回一个空数组,如果有一个,则可以使列(带有大写的连胜条件)检测到connect-4。
例如:
// Horizontal
var tempArrayHorizontal = new Array(7);
for (var row = 0; row <= 5; row++) {
for (var col = 0; col <= 6; col++) {
tempArrayHorizontal[col] = playFieldArray[col][row];
}
var result = checkForFour(tempArrayHorizontal);
if (result !== []) {
for (var col = 0; col <= 6; col++) { // we re-iterate the same way we did when you populated tempArrayHorizontal
playFieldArray[col][row] = result[col];
}
return true;
}
}
和您的checkForFour
功能:
function checkForFour(input) {
var count = 0;
for (var i = 0; i < input.length; i++) {
if (input[i] === currentPlayer) {
count++;
if (count === 4) {
// replace the 4 previous column to uppercase
input.splice(i-4, 4, currentPlayer.toUpperCase(), currentPlayer.toUpperCase(), currentPlayer.toUpperCase(), currentPlayer.toUpperCase());
return input;
}
} else {
count = 0;
}
}
return [];
}
我还没有测试过,所以你必须在最后确认。
祝你好运!