add test file wavecollapse.nas

This commit is contained in:
ValKmjolnir 2022-04-10 15:34:20 +08:00
parent 4503239731
commit 7b160c4589
3 changed files with 110 additions and 1 deletions

View File

@ -40,4 +40,5 @@ test:nasal
-@ ./nasal -op -c -t test/tetris.nas
@ ./nasal -op -c -t -d test/turingmachine.nas
@ ./nasal -op -c -t -d -o test/ycombinator.nas
@ ./nasal -op -e test/wavecollapse.nas

View File

@ -64,7 +64,8 @@ var testfile=[
"test/tetris.nas ",
"test/trait.nas ",
"test/turingmachine.nas",
"test/ycombinator.nas "
"test/ycombinator.nas ",
"test/wavecollapse.nas "
];
var module=[

107
test/wavecollapse.nas Normal file
View File

@ -0,0 +1,107 @@
# wave collapse function 2022/4/10
# by ValKmjolnir
import("lib.nas");
srand();
var table=[
# c ,w,a,s,d
["═",0,1,0,1],
["║",1,0,1,0],
["╔",0,0,1,1],
["╗",0,1,1,0],
["╚",1,0,0,1],
["╝",1,1,0,0],
["╔",0,0,1,1],
["╗",0,1,1,0],
["╚",1,0,0,1],
["╝",1,1,0,0],
["╠",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]
];
var map=func(){
var vec=nil;
var (x,y)=(10,10);
var s=size(table);
var generator=func(i){
var tmp=[];
foreach(var elem;table)
if(elem[1]==vec[i-1][0][3])
append(tmp,elem);
vec[i][0]=tmp[rand()*size(tmp)];
for(var j=1;j<x;j+=1){
var tmp=[];
foreach(var elem;table)
if(elem[2]==vec[i][j-1][4] and elem[1]==vec[i-1][j][3])
append(tmp,elem);
vec[i][j]=tmp[rand()*size(tmp)];
}
}
return {
new:func(_x=10,_y=10){
(x,y)=(_x,_y);
vec=[];
setsize(vec,y);
for(var i=0;i<y;i+=1){
vec[i]=[];
setsize(vec[i],x);
}
vec[0][0]=table[rand()*s];
for(var i=1;i<x;i+=1){
var tmp=[];
foreach(var elem;table)
if(elem[2]==vec[0][i-1][4])
append(tmp,elem);
vec[0][i]=tmp[rand()*size(tmp)];
}
for(var i=1;i<y;i+=1){
generator(i);
}
},
print:func(){
var str="\e[0;0H";
foreach(var _y;vec){
foreach(var _x;_y)
str~=_x[0];
str~="\n";
}
print(str);
},
next:func(){
var tmp=vec[0];
for(var i=0;i<y-1;i+=1)
vec[i]=vec[i+1];
vec[-1]=tmp;
generator(y-1);
}
}
}();
print("\ec");
map.new(100,20);
for(var i=0;i<500;i+=1){
map.print();
map.next();
unix.sleep(1/30);
}