Jquery生命探测邻家细胞游戏
jquery game of life detect neighbour cells
我目前正在做一个小的jquery项目。我想用javascript/jquery/html构建康威的生活游戏。但我不知道,如何检测一个细胞是否有活着的邻居。但是我知道我必须使用数组
到目前为止我想到的是:
$(document).ready(function () {
var $create_grid = $('#create_grid');
var $run = $('#run');
var $reset = $('#reset');
var $random = $('#random');
var $cells = {};
var $active_cells = {};
$create_grid.click(function () {
var width = $("[name='width']").val();
var height = $("[name='height']").val();
var cellsize = $("[name='cellsize']").val();
var $table = $('#game');
if (width.length != 0 && height.length != 0 && cellsize.length != 0) {
for (i = 1; i <= height; i++) {
$('table').append('<tr id="' + i + '"></tr>');
}
for (i = 1; i <= width; i++) {
$('table tr').append('<td class="test" id="' + i + '"></td>');
}
$cells = $('table#game td');
$cells.css('width', cellsize);
$cells.css('height', cellsize);
} else { alert("Please fill out all the fields!"); }
$create_grid.hide('fast');
$('ul.parameters').hide('fast');
$random.css('display', 'block');
$reset.css('display', 'block');
//RESET CELLS
$reset.click(function () {
$cells.removeClass('alive');
});
//DRAW CELLS
var isDown = false;
$cells.mousedown(function () {
isDown = true;
})
.mouseup(function () {
isDown = false;
});
$cells.mouseover(function () {
if (isDown) {
$(this).toggleClass('alive');
}
});
$cells.click(function () {
$(this).toggleClass('alive');
});
});
//RANDOM PATTERN
function shuffle(array) {
var m = array.length, t, i;
// While there remain elements to shuffle…
while (m) {
// Pick a remaining element…
i = Math.floor(Math.random() * m--);
// And swap it with the current element.
t = array[m];
array[m] = array[i];
array[i] = t;
}
return array;
}
$random.click(function () {
$(shuffle($cells).slice(0, 30)).addClass("alive");
});
//RUN SIMULATION
$run.click(function simulate() {
//GET NEIGHBOUR CELLS
$cells_alive = $('#game td.alive').length;
for (var c = 1; c <= $cells_alive; c++) {
alert(c);
};
});
});
您分配的id不是唯一的。所有行和所有列的id分别来自1..n
1..m
。所以1..min(n,m)
中的每个数字都用了两次。你应该改一下。
你可能还想分配一些类或数据属性或任何东西,使它有可能实际选择任何你创建的html元素。
这个示例将一些数据属性设置为所有tr
和td
标记。
for (i = 1; i <= height; i++) {
var elem = $('<tr></tr>');
elem.data('column', i);
$('table').append(elem);
}
for (i = 1; i <= width; i++) {
var elem = $('<td></td>');
elem.data('row', i);
$('table tr').append();
}
$cells = $('table#game td');
$cells.css('width', cellsize);
$cells.css('height', cellsize);
如果你有坐标(x, y)
,你可以选择所有的邻居,如
$('tr[data-column='+(x-1)+'] td[data-row='+y+'],
tr[data-column='+(x+1)+'] td[data-row='+y+'],
tr[data-column='+x+'] td[data-row='+(y-1)+'],
tr[data-column='+x+'] td[data-row='+(y+1)+']');
(出于效率原因,您可能需要考虑class
。虽然我不知道这是否有显著的区别。
这里有一个关于data-
与class
选择器性能的问题:数据属性css选择器比类选择器快吗?
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 如何有效地将游戏数据存储在URL查询字符串中
- Javascript游戏输入失去焦点
- 如何在p5.js中管理多智力竞赛游戏的多个屏幕
- setInterval游戏循环的范围问题
- 为网络游戏制作动画
- 重置游戏和获胜者问题
- 帆布游戏的滞后运动
- Javascript单独的游戏窗口
- Javascript猜测游戏-计数器不工作
- JavaScript纸牌游戏
- 简单游戏的画布与SVG
- 我的HTML5游戏不时暂停,我如何才能知道它是否's是由垃圾收集引起的
- 多人游戏完全在浏览器中运行,服务器仅用于数据库
- 通过PHP将单词添加到游戏中
- 2D Processingjs游戏中的冲突
- Javascript岩石,纸,剪刀游戏
- 设置变量时破坏游戏代码
- 康威生命游戏-细胞获胜'不要出现在画布上
- Jquery生命探测邻家细胞游戏