我正在创建一个非常类似于经典街机Snake游戏的JavaScript游戏。 对于每件食物蛇吃,它的大小从大小5开始+1。 它包含在450X450像素的画布中,大小为10x10像素(图片)。
原始游戏是从其他来源获取和修改的,但我的目标是创建自动驾驶。
这是产生食物的功能
function create_food() {
food = {
x: Math.round(Math.random() * (w - cw) / cw),
y: Math.round(Math.random() * (h - cw) / cw),
};
}
基本上它是从0到width_of_canvas的随机数 - snake_cell / snake_cell((450-10)/ 10)。 因此食物具有坐标x和坐标y。蛇细胞的原理非常相似,但它是一个包含所有蛇细胞的阵列。
function create_snake() {
snake_array = []; //Empty array to start with
length = 5;
for (var i = length - 1; i >= 0; i--) {
//This will create a horizontal snake starting from the top left
snake_array.push({
x: i,
y: 0
});
}
}
唯一区别是蛇形数组中有多个字段,而食物数组中只有一个。
问题: 我不希望食物在我的蛇中产卵,所以我需要检查食物的坐标是否与蛇形阵列中的一个相同。
我在考虑inArray()函数,但在这种情况下我不知道如何使用它。
示例: 食物[0] .x = 31;食物[0] .y = 22
编辑:谢谢@Siguza答案 0 :(得分:0)
如果您可以使用lodash
,那么已经有一个函数来查找两个对象是否相同:
_.isEqual(object, other);
在您的函数中,您可以检查JavaScript中的in_array();
等效项。
function in_array(needle, haystack, argStrict) {
// discuss at: http://phpjs.org/functions/in_array/
// original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// improved by: vlado houba
// improved by: Jonas Sciangula Street (Joni2Back)
// input by: Billy
// bugfixed by: Brett Zamir (http://brett-zamir.me)
// example 1: in_array('van', ['Kevin', 'van', 'Zonneveld']);
// returns 1: true
// example 2: in_array('vlado', {0: 'Kevin', vlado: 'van', 1: 'Zonneveld'});
// returns 2: false
// example 3: in_array(1, ['1', '2', '3']);
// example 3: in_array(1, ['1', '2', '3'], false);
// returns 3: true
// returns 3: true
// example 4: in_array(1, ['1', '2', '3'], true);
// returns 4: false
var key = '',
strict = !! argStrict;
//we prevent the double check (strict && arr[key] === ndl) || (!strict && arr[key] == ndl)
//in just one for, in order to improve the performance
//deciding wich type of comparation will do before walk array
if (strict) {
for (key in haystack) {
if (haystack[key] === needle) {
return true;
}
}
} else {
for (key in haystack) {
if (haystack[key] == needle) {
return true;
}
}
}
return false;
}
您可以更改其中显示的功能:
haystack[key] == needle
以下内容:
_.isEqual(haystack[key], needle)