作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嗨,我目前正在使用 javafx canvas 开发一款生命游戏。然而我的算法似乎有一个错误。静物画正常,但其余的则不然,像滑翔机这样的图案没有按应有的方式移动。我使用的是 2d int 数组,ALIVE 为 1,DEAD 为 0。这是我的算法:
private void checkRules() {
int[][] newBoard = board;
int amountOfAliveNeighbours;
for (int y = 0; y < board.length; y++) {
for (int x = 0; x < board[y].length; x++) {
amountOfAliveNeighbours = getAmountOfAliveNeighbours(x, y);
if (board[y][x] == ALIVE) {
if (amountOfAliveNeighbours == 2 || amountOfAliveNeighbours == 3) {
newBoard[y][x] = ALIVE;
}else{
newBoard[y][x] = DEAD;
}
} else if (board[y][x] == DEAD){
if (amountOfAliveNeighbours == 3) {
newBoard[y][x] = ALIVE;
}else{
newBoard[y][x] = DEAD;
}
}
}
}
board = newBoard;
}
private int getAmountOfAliveNeighbours(int x, int y) {
int neighbours = 0;
// top left
if (x - 1 >= 0 && y - 1 >= 0) {
if (board[y - 1][x - 1] == ALIVE)
neighbours++;
}
// top center
if (y - 1 >= 0) {
if (board[y - 1][x] == ALIVE)
neighbours++;
}
// top right
if (x + 1 < board[0].length && y - 1 >= 0) {
if (board[y - 1][x + 1] == ALIVE)
neighbours++;
}
// middle left
if (x - 1 >= 0) {
if (board[y][x - 1] == ALIVE)
neighbours++;
}
// middle right
if (x + 1 < board[0].length) {
if (board[y][x + 1] == ALIVE)
neighbours++;
}
// bottom left
if (x - 1 >= 0 && y + 1 < board.length) {
if (board[y + 1][x - 1] == ALIVE)
neighbours++;
}
// bottom center
if (y + 1 < board.length) {
if (board[y + 1][x] == ALIVE)
neighbours++;
}
// bottom right
if (x + 1 < board[0].length && y + 1 < board.length) {
if (board[y + 1][x + 1] == ALIVE)
neighbours++;
}
return neighbours;
}
最佳答案
为临时板分配内存,如下所示:
int[][] newBoard = new int[board.length][board[0].length];
我建议重构邻居的计算:
private int getAmountOfAliveNeighbours(int x, int y) {
int neighbours = 0;
for (int dx = -1; dx <= 1; dx++) {
for (int dy = -1; dy <= 1; dy++) {
if ((dx !=0 || dy != 0) && isAlive(x + dx, y + dy)) {
neighbours++;
}
}
}
return neighbours;
}
private boolean isAlive(int x, int y) {
return (x >= 0) && (x < board.length) &&
(y >= 0) && (y < board[0].length) &&
(board[x][y] == ALIVE);
}
关于java - 生命游戏振荡器和宇宙飞船不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60654408/
利用 quantmod 包中的 ChartSeries 函数,我想修改 RSI 振荡器。给定一个包含 OHLC 价格数据的 xts 对象,这是我正在使用的调用: chartSeries(plot_re
我正在使用this javascript api (miniMusic)。我能够创建音乐,然后导出 javascript 代码。我也能够运行它。 我希望能够知道我的音乐何时结束,以便我可以再次播放它并
我使用 code 创建了三个不同的线性调频信号在这里找到。对于其他一些代码片段,我将这三种声音保存为单独的 .wav 文件。这到目前为止有效。 现在我想同时播放这三种声音。所以我想我可以使用 WebA
我创建了一个振荡器,它实际上可以播放单个音符,但不支持同时播放两个或更多音符...我怎样才能让它成为复音? $(window).load(function(){ window.AudioContext
我是一名优秀的程序员,十分优秀!