update test/wavecollapse.nas

This commit is contained in:
ValKmjolnir 2022-04-10 16:47:27 +08:00
parent 7b160c4589
commit b6f174e869
1 changed files with 52 additions and 57 deletions

View File

@ -3,7 +3,7 @@
import("lib.nas"); import("lib.nas");
srand(); srand();
var interval=1/60;
var table=[ var table=[
# c ,w,a,s,d # c ,w,a,s,d
["═",0,1,0,1], ["═",0,1,0,1],
@ -14,23 +14,12 @@ var table=[
["╚",1,0,0,1], ["╚",1,0,0,1],
["╝",1,1,0,0], ["╝",1,1,0,0],
["╔",0,0,1,1], # ["╠",1,0,1,1],
["╗",0,1,1,0], # ["╣",1,1,1,0],
["╚",1,0,0,1], # ["╦",0,1,1,1],
["╝",1,1,0,0], # ["╩",1,1,0,1],
# ["╬",1,1,1,1],
["╠",1,0,1,1],
["╣",1,1,1,0],
["╦",0,1,1,1],
["╩",1,1,0,1],
["╬",1,1,1,1],
[" ",0,0,0,0],
[" ",0,0,0,0],
[" ",0,0,0,0],
[" ",0,0,0,0],
[" ",0,0,0,0],
[" ",0,0,0,0],
[" ",0,0,0,0], [" ",0,0,0,0],
[" ",0,0,0,0], [" ",0,0,0,0],
[" ",0,0,0,0], [" ",0,0,0,0],
@ -40,68 +29,74 @@ var table=[
]; ];
var map=func(){ var map=func(){
var vec=nil; var (vec,x,s)=(nil,nil,size(table));
var (x,y)=(10,10); var generator=func(){
var s=size(table);
var generator=func(i){
var tmp=[]; var tmp=[];
foreach(var elem;table) foreach(var elem;table)
if(elem[1]==vec[i-1][0][3]) if(elem[1]==vec[0][0][3] and elem[2]==0)
append(tmp,elem); append(tmp,elem);
vec[i][0]=tmp[rand()*size(tmp)]; vec[1][0]=tmp[rand()*size(tmp)];
for(var j=1;j<x;j+=1){ for(var j=1;j<x;j+=1){
var tmp=[]; if(vec[0][j][3]==0 and vec[1][j-1][4]==0 and rand()>0.5){
vec[1][j]=table[-1];
continue;
}
tmp=[];
foreach(var elem;table) foreach(var elem;table)
if(elem[2]==vec[i][j-1][4] and elem[1]==vec[i-1][j][3]) if(elem[2]==vec[1][j-1][4] and elem[1]==vec[0][j][3]){
append(tmp,elem); if((j==x-1 and elem[4]==0) or j<x-1)
vec[i][j]=tmp[rand()*size(tmp)]; append(tmp,elem);
}
vec[1][j]=tmp[rand()*size(tmp)];
} }
} }
return { return {
new:func(_x=10,_y=10){ new:func(_x=10){
(x,y)=(_x,_y); x=_x;
vec=[]; vec=[[],[]];
setsize(vec,y); for(var i=0;i<2;i+=1){
for(var i=0;i<y;i+=1){
vec[i]=[];
setsize(vec[i],x); setsize(vec[i],x);
for(var j=0;j<x;j+=1)
vec[i][j]=table[-1];
} }
vec[0][0]=table[rand()*s];
var tmp=[];
foreach(var elem;table)
if(elem[1]==0 and elem[2]==0)
append(tmp,elem);
vec[0][0]=tmp[rand()*size(tmp)];
for(var i=1;i<x;i+=1){ for(var i=1;i<x;i+=1){
var tmp=[]; tmp=[];
foreach(var elem;table) foreach(var elem;table)
if(elem[2]==vec[0][i-1][4]) if(elem[2]==vec[0][i-1][4] and elem[1]==0){
append(tmp,elem); if((i==x-1 and elem[4]==0) or i<x-1)
append(tmp,elem);
}
vec[0][i]=tmp[rand()*size(tmp)]; vec[0][i]=tmp[rand()*size(tmp)];
} }
for(var i=1;i<y;i+=1){ me.print(0);
generator(i); generator();
}
}, },
print:func(){ print:func(index){
var str="\e[0;0H"; var str="";
foreach(var _y;vec){ foreach(var _x;vec[index])
foreach(var _x;_y) str~=_x[0];
str~=_x[0]; str~="\n";
str~="\n";
}
print(str); print(str);
}, },
next:func(){ next:func(){
var tmp=vec[0]; (vec[0],vec[1])=(vec[1],vec[0]);
for(var i=0;i<y-1;i+=1) generator();
vec[i]=vec[i+1];
vec[-1]=tmp;
generator(y-1);
} }
} }
}(); }();
print("\ec"); map.new(100);
map.new(100,20); for(var iter=0;iter<400;iter+=1){
for(var i=0;i<500;i+=1){ map.print(1);
map.print();
map.next(); map.next();
unix.sleep(1/30); unix.sleep(interval);
} }