#include <cstdio>
#include <iostream>
int main(int, char**) {
try {
static const float h_kernel[] = {1, 1, 1, 1, 0, 1, 1, 1, 1};
static const int reset = 500;
static const int game_w = 128, game_h = 128;
std::cout << "This example demonstrates the Conway's Game of Life "
"using ArrayFire"
<< std::endl
<< "There are 4 simple rules of Conways's Game of Life"
<< std::endl
<< "1. Any live cell with fewer than two live neighbours "
"dies, as if caused by under-population."
<< std::endl
<< "2. Any live cell with two or three live neighbours lives "
"on to the next generation."
<< std::endl
<< "3. Any live cell with more than three live neighbours "
"dies, as if by overcrowding."
<< std::endl
<< "4. Any dead cell with exactly three live neighbours "
"becomes a live cell, as if by reproduction."
<< std::endl
<< "Each white block in the visualization represents 1 alive "
"cell, black space represents dead cells"
<< std::endl
<< std::endl;
std::cout
<< "The conway_pretty example visualizes all the states in Conway"
<< std::endl
<< "Red : Cells that have died due to under population"
<< std::endl
<< "Yellow: Cells that continue to live from previous state"
<< std::endl
<< "Green : Cells that are new as a result of reproduction"
<< std::endl
<< "Blue : Cells that have died due to over population"
<< std::endl
<< std::endl;
std::cout
<< "This examples is throttled so as to be a better visualization"
<< std::endl;
"Conway's Game Of Life - Current State");
"Conway's Game Of Life - Visualizing States");
prettyWindow.
setPos(512 + 32, 32);
int frame_count = 0;
array display = tile(state, 1, 1, 3, 1);
while (!simpleWindow.
close() && !prettyWindow.
close()) {
if (!simpleWindow.
close()) simpleWindow.
image(state);
if (!prettyWindow.
close()) prettyWindow.
image(display);
frame_count++;
if (frame_count % reset == 0)
array a0 = (state == 1) && (nHood < 2);
array a1 = (state != 0) && (C0 || C1);
array a2 = (state == 0) && C1;
array a3 = (state == 1) && (nHood > 3);
display = join(2, a0 + a1, a1 + a2, a3).
as(
f32);
state = state * C0 + C1;
double fps = 30;
while (timer::stop(delay) < (1 / fps)) {}
}
fprintf(stderr,
"%s\n", e.
what());
throw;
}
return 0;
}
Window object to render af::arrays.
A multi dimensional data container.
const array as(dtype type) const
Casts the array into another data type.
An ArrayFire exception class.
virtual const char * what() const
Returns an error message for the exception in a string format.
@ f32
32-bit floating point values
void image(const array &in, const char *title=NULL)
Renders the input array as an image to the window.
bool close()
Check if window is marked for close.
void setPos(const unsigned x, const unsigned y)
Set the start position where the window will appear.
AFAPI array randu(const dim4 &dims, const dtype ty, randomEngine &r)
C++ Interface to create an array of random numbers uniformly distributed.