- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个交互式生活游戏,我可以在其中手动将滑翔机插入游戏区域。我希望它如何工作是我有一个滑翔机按钮,按下它后我可以将光标移动到我希望在网格上设置滑翔机的位置,然后单击网格滑翔机集成到生活游戏中。我正在使用处理,我正在使用这个草图作为启动代码。 http://www.openprocessing.org/sketch/95216
这是在鼠标按下时创建新单元格的代码(一次一个)
// Create new cells manually on pause
if (pause && !gliderSelected && mousePressed) {
// Map and avoid out of bound errors
int xCellOver = int(map(mouseX, 0, width, 0, width/cellSize));
xCellOver = constrain(xCellOver, 0, width/cellSize-1);
int yCellOver = int(map(mouseY, 0, height, 0, height/cellSize));
yCellOver = constrain(yCellOver, 0, height/cellSize-1);
// Check against cells in buffer
if (cellsBuffer[xCellOver][yCellOver]==1) { // Cell is alive
cells[xCellOver][yCellOver]=0; // Kill
fill(dead); // Fill with kill color
}
else { // Cell is dead
cells[xCellOver][yCellOver]=1; // Make alive
fill(alive); // Fill alive color
}
}
else if (pause && !mousePressed) { // And then save to buffer once mouse goes up
// Save cells to buffer (so we operate with one array keeping the other intact)
for (int x=0; x<width/cellSize; x++) {
for (int y=0; y<height/cellSize; y++) {
cellsBuffer[x][y] = cells[x][y];
}
}
}
滑翔机形状是:
氧
太好了
XXX
其中 O 是死细胞,X 是活细胞。
//create gliders on press
if (pause && gliderSelected && mousePressed) {
// Map and avoid out of bound errors
int xCellOver = int(map(mouseX, 0, width, 0, width/cellSize));
xCellOver = constrain(xCellOver, 0, width/cellSize-1);
int yCellOver = int(map(mouseY, 0, height, 0, height/cellSize));
yCellOver = constrain(yCellOver, 0, height/cellSize-1);
//here i thought of maybe creating an array of cells that map the glider and then running a loop to change the grid cell status according to the glider array
}
我不确定如何制作一个数组来存储滑翔机单元格的位置。每个单元格都是一个 10 像素的正方形,所以如果我只想构建它,我知道如何映射它,但不确定如何将它粘贴到阵列中,然后将它集成到网格中。
最佳答案
这里有两个不同的东西在起作用,如何将网格中的细胞从死的变成活的,以及如何在你做之前显示变化。数组“gliderArray”存储你的滑翔机形状,并通过遍历数组并将底层网格替换为数组中的任何内容来应用于网格...至于显示,您要么必须为显示它们将要更改的单元格设置不同的状态,要么重新绘制它们的矩形...此解决方案是第二种方式...
void draw() {
//Draw grid
for (int x=0; x<width/cellSize; x++) {
for (int y=0; y<height/cellSize; y++) {
if (cells[x][y]==1) {
fill(alive); // If alive
}
else {
fill(dead); // If dead
}
rect (x*cellSize, y*cellSize, cellSize, cellSize);
}
}
// Iterate if timer ticks
if (millis()-lastRecordedTime>interval) {
if (!pause) {
iteration();
lastRecordedTime = millis();
}
}
//Glider shape is :
//OXO
//OOX
//XXX
//where O is a dead cell and X is an alive cell.
int [][] gliderArray = new int [][] {
{ 0, 1, 0 }
,
{ 0, 0, 1 }
,
{ 1, 1, 1 }
};
// Create new cells manually on pause
if (pause) {
// Map and avoid out of bound errors
int xCellOver = int(map(mouseX, 0, width, 0, width/cellSize));
xCellOver = constrain(xCellOver, 0, width/cellSize-1);
int yCellOver = int(map(mouseY, 0, height, 0, height/cellSize));
yCellOver = constrain(yCellOver, 0, height/cellSize-1);
if (glider) {
// Map again because glider takes +- 1 cells on each direction
xCellOver = constrain(xCellOver, 1, width/cellSize-2);
yCellOver = constrain(yCellOver, 1, height/cellSize-2);
}
if (mousePressed) {
// Check against cells in buffer
if (!glider) {
if (cellsBuffer[xCellOver][yCellOver]==1) { // Cell is alive
cells[xCellOver][yCellOver]=0; // Kill
fill(dead); // Fill with kill color
}
else { // Cell is dead
cells[xCellOver][yCellOver]=1; // Make alive
fill(alive); // Fill alive color
}
}
else {
for (int i=-1; i<=1; i++) {
for (int j=-1; j<=1; j++) {
cells[xCellOver+j][yCellOver+i] = gliderArray[i+1][j+1];
}
}
}
}
else {
for (int x=0; x<width/cellSize; x++) {
for (int y=0; y<height/cellSize; y++) {
cellsBuffer[x][y] = cells[x][y];
if (glider && x >= xCellOver-1 && x <= xCellOver+1 && y >= yCellOver-1 && y <= yCellOver+1) {
for (int i=-1; i<=1; i++) {
for (int j=-1; j<=1; j++) {
if (x == xCellOver+j && y == yCellOver+i) fill(gliderArray[i+1][j+1] == 1? color(255, 125, 0) : dead);
}
}
rect (x*cellSize, y*cellSize, cellSize, cellSize);
}
else if (x == xCellOver && y == yCellOver) {
fill(cellsBuffer[x][y] == 1? color(0,0,255) : color(255, 125, 0));
rect (x*cellSize, y*cellSize, cellSize, cellSize);
}
}
}
}
}
}
您还需要一个全局 boolean 值:
boolean glider = false;
和另一个检查 void keyPressed()
if (key == 'g') glider = !glider;
关于java - Java 中的生命互动游戏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21472316/
我一直在浏览关于 BIRT 的许多网站,特别是与交互或脚本相关的主题。 但是(生活在一个完美无瑕的世界中真是太好了)尝试执行一些示例(例如这个http://kickjava.com/src/org/e
我对我的 Haskell 有点生疏了,我想重新开始。我喜欢 F# 的一件事是与 Visual Studio 集成的 F# Interactive shell:我几乎可以评估任何东西(包括函数和类定义)
有什么方法可以将我自己的补全添加到(interactive) elisp函数中?理想情况下,我希望将其制表符完整的字符串列表传递给它。我知道使用(interactive "D"),(interacti
所以,我有一个问题! 我有一个名为 X 的 Activity 。当用户单击按钮时,将显示 Activity Y。我希望在收到 Activity X 发送的事件后可以关闭此 Activity 。 你知道
有几篇关于相同内容的帖子,但我仍然无法使我的 expect 脚本正常工作。我的意图是将所有内容自动化,但为用户保留输入密码。所以脚本有 3 个部分: 自动登录 让用户输入密码 将控制权交还给 Expe
我在使用带有自行车路线的示例 map 时遇到了两个小问题。 1.目前我的 map 是这样工作的: 当您将鼠标悬停在路线上时,它会突出显示(这很好)。 当您将鼠标移出路线时,它会取消突出显示(这也很好)
有一些 iTunes 链接可以通过网络浏览器中的链接打开 iTunes 中的应用程序或专辑。 这是如何工作的,我可以在 C# .NET 应用程序中完成吗? 最佳答案 iTunes 在注册表中注册 it
我刚刚将 firebase 集成到我的 android 和 ios 应用程序中。 仪表板有一个参与卡,我可以看到用户参与的前 3 个事件或 View Controller 。百分比加起来只有 74%,
我想接收事件并从浏览到a video page on youtube.com时加载的YouTube HTML5播放器获取播放器选项。 我知道可以通过HTML5 media events控制播放器。例如
我需要直接与使用 subprocess 生成的进程的 stdin 和 stdout 进行交互。我可以这样做: proc = subprocess.Popen("/bin/bash", stdin=su
我也尝试简单地使用 interact 并且还通过删除最后一个 expect staement 来实现这一点 expect -re "$prompt" send -- "exit\r"
尝试使用 chrome puppeteer 来渲染一个 React 组件 在我的 Node.js 环境中运行时遇到以下问题: 记录 element在 headless chrome 控制台中给我:co
我一直在努力寻找一种方法让 Seaborn 和 Vincent 互动,例如,我可以实时放大/缩小绘图的特定区域。这可能吗?或者,是否有其他推荐的库(不是基于云的服务)可以很好地可视化时间序列数据? 最
我很难理解两者如何相互作用以及它们之间的界限在哪里。它们重叠吗?它们之间有冗余吗? 我知道两者都有相关的注释,但我无法找到包含简短描述的完整列表。不确定这是否有助于弄清楚它们的不同之处或重叠的地方。
我想通过我自己的线程与 Akka Actor 互动。目前,我喜欢这样: val res = Await.result(aref ? GroupReceive(fromRank), timeout.du
我是编程新手。基本上刚刚完成了几个教程和准系统说明。我想编写 pong 代码让自己开始尝试自己做一些事情,但我遇到了一些障碍。出于某种原因,我生成的球根本不会与我的玩家 1 Racket 互动,但它会
我是一名优秀的程序员,十分优秀!