Jump to content

Wave function collapse: Difference between revisions

m
→‎{{header|C}}: hopefully easier to read now
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<tdim[0]td0; i++) {
for (int j=0; j<td1; j++) {
adj[XYXYZ(ki,3j,0,td1,4)]= XY(MOD(i+-1, td0), MOD(j, td1), td1); /* belowabove (index 71 in a 3x3 grid) */
int k= j+td1*i;
adj[XYXYZ(ki,2j,1,td1,4)]= XY(MOD(i, td0), MOD(j+-1, td1), td1); /* rightleft (index 53 in a 3x3 grid) */
int m= 4*k;
adj[XYXYZ(ki,0j,2,td1,4)]= XY(MOD(i-1, td0), MOD(j+1, td1), td1); /* aboveright (index 15 in a 3x3 grid) */
adj[XYXYZ(ki,1j,3,td1,4)]= XY(MOD(i+1, td0), MOD(j-1, td1), td1); /* left below (index 37 in a 3x3 grid) */
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[j+XY(i*,j,bd0)]= 1;
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:
}
}
intchar stride*allow= malloc(4*(bd0+1)*bd0);
char *memset(allow=, 1, malloc(4*stride(bd0+1)*bd0);
memset(allow, 1, 4*stride);
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};
6,962

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.