Wave function collapse: Difference between revisions
m
→{{header|C}}: hopefully easier to read now
m (→{{header|C}}) |
m (→{{header|C}}: hopefully easier to read now) |
||
Line 12:
#include <string.h>
#include <time.h>
#define XY(row, col, width) ((col)+(row)*(width))
#define XYZ(page, row, col, height, width) XY(XY(page, row, height), col, width)
char blocks[5][3][3]= {
{
Line 39:
}
};
/* avoid problems with slightly negative numbers and C's X%Y */
#define MOD(X,Y) ((Y)+(X))%(Y)
char *wfc(char *blocks, int *bdim /* 5,3,3 */, int *tdim /* 8,8 */) {
int N= tdim[0]*tdim[1], td0= tdim[0], td1= tdim[1];
int *adj= calloc(N*4, sizeof (int));
for (int i= 0; i<
for (int j=0; j<td1; j++) {
adj[
adj[
adj[
adj[
▲ adj[XY(k,2,4)]= XY(MOD(i, td0), MOD(j+1, td1), td1); /* right (index 5 in a 3x3 grid) */
▲ adj[XY(k,3,4)]= XY(MOD(i+1, td0), MOD(j, td1), td1); /* below (index 7 in a 3x3 grid) */
}
}
Line 71 ⟶ 69:
for (int i= 0; i<bd0; i++) {
for (int j= 0; j<bd0; j++) {
vert[
for (int k= 0; k<bd2; k++) {
if (blocks[XYZ(i, 0, k, bd1, bd2)] != blocks[XYZ(j, bd1-1, k, bd1, bd2)]) {
Line 80 ⟶ 78:
}
}
for (int i= 0; i<bd0; i++) {
for (int j= 0; j<bd0; j++) {
Line 156 ⟶ 153:
return tile;
}
int main() {
int bdims[3]= {5,3,3};
|