⚡ update test files
This commit is contained in:
parent
eca978e2b3
commit
9c6996b54e
22
makefile
22
makefile
|
@ -38,14 +38,15 @@ test:nasal
|
||||||
@ ./nasal -a -c test/bfconvertor.nas
|
@ ./nasal -a -c test/bfconvertor.nas
|
||||||
@ ./nasal -d test/bfs.nas
|
@ ./nasal -d test/bfs.nas
|
||||||
@ ./nasal -t test/bigloop.nas
|
@ ./nasal -t test/bigloop.nas
|
||||||
@ ./nasal -e test/bp.nas
|
@ ./nasal -t test/bp.nas
|
||||||
@ ./nasal -d test/calc.nas
|
@ ./nasal -d test/calc.nas
|
||||||
@ ./nasal -e test/choice.nas
|
@ ./nasal -e test/choice.nas
|
||||||
@ ./nasal -e test/class.nas
|
@ ./nasal -e test/class.nas
|
||||||
@ ./nasal -t -d test/console3D.nas
|
@ ./nasal -t -d test/console3D.nas 50
|
||||||
@ ./nasal -e test/coroutine.nas
|
@ ./nasal -e test/coroutine.nas
|
||||||
|
@ ./nasal -t -d test/datalog.nas
|
||||||
@ ./nasal -e test/diff.nas
|
@ ./nasal -e test/diff.nas
|
||||||
@ ./nasal -e test/donuts.nas
|
@ ./nasal -e test/donuts.nas 100
|
||||||
-@ ./nasal -d test/exception.nas
|
-@ ./nasal -d test/exception.nas
|
||||||
@ ./nasal -t -d test/fib.nas
|
@ ./nasal -t -d test/fib.nas
|
||||||
@ ./nasal -e test/filesystem.nas
|
@ ./nasal -e test/filesystem.nas
|
||||||
|
@ -62,16 +63,17 @@ test:nasal
|
||||||
@ ./nasal -t -d test/md5compare.nas
|
@ ./nasal -t -d test/md5compare.nas
|
||||||
-@ ./nasal -d test/module_test.nas
|
-@ ./nasal -d test/module_test.nas
|
||||||
@ ./nasal -e test/nasal_test.nas
|
@ ./nasal -e test/nasal_test.nas
|
||||||
@ ./nasal -c test/occupation.nas
|
@ ./nasal test/occupation.nas 10
|
||||||
@ ./nasal -t -d test/pi.nas
|
@ ./nasal -t -d test/pi.nas
|
||||||
@ ./nasal -c test/ppmgen.nas
|
@ ./nasal -c test/ppmgen.nas
|
||||||
@ ./nasal -t -d test/prime.nas
|
@ ./nasal -t -d test/prime.nas
|
||||||
@ ./nasal -e test/qrcode.nas
|
@ ./nasal -e test/qrcode.nas
|
||||||
@ ./nasal -t -d test/quick_sort.nas
|
@ ./nasal -t -d test/quick_sort.nas
|
||||||
@ ./nasal -e test/scalar.nas hello world
|
@ ./nasal -e test/scalar.nas hello world
|
||||||
-@ ./nasal -c -t test/snake.nas
|
-@ ./nasal -t test/snake.nas --skip
|
||||||
@ ./nasal -c -e test/trait.nas
|
@ ./nasal -e test/trait.nas
|
||||||
-@ ./nasal -c -t test/tetris.nas
|
-@ ./nasal -t test/tetris.nas --skip
|
||||||
@ ./nasal -c -t -d test/turingmachine.nas
|
@ ./nasal -t -d test/turingmachine.nas
|
||||||
@ ./nasal -c -t -d test/ycombinator.nas
|
@ ./nasal -d test/wavecollapse.nas
|
||||||
@ ./nasal -d test/wavecollapse.nas
|
@ ./nasal test/word_collector.nas test/md5compare.nas
|
||||||
|
@ ./nasal -t -d test/ycombinator.nas
|
34
stl/sort.nas
34
stl/sort.nas
|
@ -1,8 +1,6 @@
|
||||||
# sort.nas
|
# sort.nas
|
||||||
# valkmjolnir 2021/4/2
|
# valkmjolnir 2021/4/2
|
||||||
|
|
||||||
# please make sure the compare function has the function like <= or >=
|
|
||||||
# only using < or > may cause infinite loop or the program may crash
|
|
||||||
var sort=func(){
|
var sort=func(){
|
||||||
srand(); # be aware! this causes global changes
|
srand(); # be aware! this causes global changes
|
||||||
var quick_sort_core=func(vec,left,right,cmp){
|
var quick_sort_core=func(vec,left,right,cmp){
|
||||||
|
@ -10,20 +8,48 @@ var sort=func(){
|
||||||
var base=left+int(rand()*(right-left));
|
var base=left+int(rand()*(right-left));
|
||||||
(vec[left],vec[base])=(vec[base],vec[left]);
|
(vec[left],vec[base])=(vec[base],vec[left]);
|
||||||
var (i,j,tmp)=(left,right,vec[left]);
|
var (i,j,tmp)=(left,right,vec[left]);
|
||||||
while(i!=j){
|
while(i<j){
|
||||||
while(i<j and cmp(tmp,vec[j]))
|
while(i<j and cmp(tmp,vec[j]))
|
||||||
j-=1;
|
j-=1;
|
||||||
vec[i]=vec[j];
|
vec[i]=vec[j];
|
||||||
while(i<j and cmp(vec[i],tmp))
|
while(i<j and cmp(vec[i],tmp))
|
||||||
i+=1;
|
i+=1;
|
||||||
vec[j]=vec[i];
|
vec[j]=vec[i];
|
||||||
|
j-=1;
|
||||||
}
|
}
|
||||||
vec[i]=tmp;
|
vec[i]=tmp;
|
||||||
quick_sort_core(vec,left,i-1,cmp);
|
quick_sort_core(vec,left,i-1,cmp);
|
||||||
quick_sort_core(vec,i+1,right,cmp);
|
quick_sort_core(vec,i+1,right,cmp);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return func(vec,cmp=func(a,b){return a<=b;}){
|
return func(vec,cmp=func(a,b){return a<b;}){
|
||||||
|
quick_sort_core(vec,0,size(vec)-1,cmp);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}();
|
||||||
|
|
||||||
|
var var_sort=func(){
|
||||||
|
srand(); # be aware! this causes global changes
|
||||||
|
var quick_sort_core=func(vec,left,right){
|
||||||
|
if(left>=right) return nil;
|
||||||
|
var base=left+int(rand()*(right-left));
|
||||||
|
(vec[left],vec[base])=(vec[base],vec[left]);
|
||||||
|
var (i,j,tmp)=(left,right,vec[left]);
|
||||||
|
while(i<j){
|
||||||
|
while(i<j and tmp<vec[j])
|
||||||
|
j-=1;
|
||||||
|
vec[i]=vec[j];
|
||||||
|
while(i<j and vec[i]<tmp)
|
||||||
|
i+=1;
|
||||||
|
vec[j]=vec[i];
|
||||||
|
j-=1;
|
||||||
|
}
|
||||||
|
vec[i]=tmp;
|
||||||
|
quick_sort_core(vec,left,i-1,cmp);
|
||||||
|
quick_sort_core(vec,i+1,right,cmp);
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
return func(vec){
|
||||||
quick_sort_core(vec,0,size(vec)-1,cmp);
|
quick_sort_core(vec,0,size(vec)-1,cmp);
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ var curve3=func(line=2){
|
||||||
var shadow=[" ","░","▒","▓","█","▀","▄","▐","▌"];
|
var shadow=[" ","░","▒","▓","█","▀","▄","▐","▌"];
|
||||||
var s="";
|
var s="";
|
||||||
for(var i=0;i<size(arr);i+=1)
|
for(var i=0;i<size(arr);i+=1)
|
||||||
s~=shadow[arr[i]];
|
s~=shadow[arr[i]];
|
||||||
println(s);
|
println(s);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -46,6 +46,7 @@ var testfile=[
|
||||||
"class.nas",
|
"class.nas",
|
||||||
"console3D.nas",
|
"console3D.nas",
|
||||||
"coroutine.nas",
|
"coroutine.nas",
|
||||||
|
"datalog.nas",
|
||||||
"diff.nas",
|
"diff.nas",
|
||||||
"donuts.nas",
|
"donuts.nas",
|
||||||
"exception.nas",
|
"exception.nas",
|
||||||
|
|
|
@ -73,7 +73,7 @@ println("coroutine state:\e[91m ",coroutine.status(co),"\e[0m");
|
||||||
println("ok");
|
println("ok");
|
||||||
|
|
||||||
# pressure test
|
# pressure test
|
||||||
var main=func(){
|
for(var t=0;t<5;t+=1){
|
||||||
var productor=func(){
|
var productor=func(){
|
||||||
for(var i=0;;i+=1)
|
for(var i=0;;i+=1)
|
||||||
coroutine.yield(i);
|
coroutine.yield(i);
|
||||||
|
@ -96,7 +96,4 @@ var main=func(){
|
||||||
while(tm.elapsedMSec()<total)
|
while(tm.elapsedMSec()<total)
|
||||||
consumer();
|
consumer();
|
||||||
println();
|
println();
|
||||||
}
|
}
|
||||||
|
|
||||||
for(var i=0;i<5;i+=1)
|
|
||||||
main();
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
import.stl.sort;
|
||||||
|
import.stl.process_bar;
|
||||||
|
|
||||||
|
var test=func(n){
|
||||||
|
var ts=maketimestamp();
|
||||||
|
var bar=process_bar.high_resolution_bar(50);
|
||||||
|
|
||||||
|
var color=[];
|
||||||
|
var message=[];
|
||||||
|
setsize(color,n);
|
||||||
|
setsize(message,n);
|
||||||
|
var last_step=0;
|
||||||
|
ts.stamp();
|
||||||
|
for(var i=0;i<n;i+=1){
|
||||||
|
color[i]=[i,"color "~i,i+n*10];
|
||||||
|
message[i]=[i+n*10,"message "~i];
|
||||||
|
if((i-last_step)/n>1/100){
|
||||||
|
last_step=i;
|
||||||
|
print(bar.bar((i+1)/n)~" "~str(int((i+1)/n*100))~"% \r");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
print(bar.bar((i+1)/n)~" 100% | ",ts.elapsedMSec()/1000," s | ");
|
||||||
|
|
||||||
|
var mess=func(vec){
|
||||||
|
var s=size(vec);
|
||||||
|
for(var i=s-1;i>=0;i-=1){
|
||||||
|
var r=int(rand()*i);
|
||||||
|
(vec[r],vec[i])=(vec[i],vec[r]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mess(color);
|
||||||
|
mess(message);
|
||||||
|
|
||||||
|
|
||||||
|
ts.stamp();
|
||||||
|
sort(color,func(a,b){return a[2]<b[2]});
|
||||||
|
sort(message,func(a,b){return a[0]<b[0]});
|
||||||
|
|
||||||
|
var cnt=0;
|
||||||
|
foreach(var c;color){
|
||||||
|
var left=0;
|
||||||
|
var right=size(message)-1;
|
||||||
|
var data=c[2];
|
||||||
|
while(left<=right){
|
||||||
|
var mid=int((left+right)/2);
|
||||||
|
var res=message[mid][0];
|
||||||
|
if(data==res){
|
||||||
|
cnt+=1;
|
||||||
|
break;
|
||||||
|
}else if(data>res){
|
||||||
|
left=mid+1;
|
||||||
|
}else{
|
||||||
|
right=mid-1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
println(cnt," result(s) in ",ts.elapsedMSec()/1000," sec");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=100;i<1e6;i*=10)
|
||||||
|
test(i);
|
|
@ -49,4 +49,8 @@ var main=func(run_time){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
main(5e2);
|
if(size(runtime.argv()) and !math.isnan(num(runtime.argv()[0]))){
|
||||||
|
main(num(runtime.argv()[0]));
|
||||||
|
}else{
|
||||||
|
main(5e2);
|
||||||
|
}
|
|
@ -1,23 +1,22 @@
|
||||||
var map=nil;
|
var map=nil;
|
||||||
|
|
||||||
var check=func(x,y){
|
var check=func(x,y){
|
||||||
if(x>14) x=0;
|
if(x>29) x=0;
|
||||||
if(y>19) y=0;
|
if(y>49) y=0;
|
||||||
return map[x][y];
|
return map[x][y];
|
||||||
}
|
}
|
||||||
|
|
||||||
var new_map=func(){
|
var new_map=func(){
|
||||||
var tmp=[];
|
var tmp=[];
|
||||||
setsize(tmp,15);
|
setsize(tmp,30);
|
||||||
forindex(var i;tmp){
|
forindex(var i;tmp){
|
||||||
tmp[i]=[];
|
tmp[i]=[];
|
||||||
setsize(tmp[i],20);
|
setsize(tmp[i],50);
|
||||||
}
|
}
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
var prt=func()
|
var prt=func(){
|
||||||
{
|
|
||||||
var s='\e[0;0H';
|
var s='\e[0;0H';
|
||||||
foreach(var line;map){
|
foreach(var line;map){
|
||||||
foreach(var elem;line)
|
foreach(var elem;line)
|
||||||
|
@ -35,15 +34,17 @@ func(){
|
||||||
print("\ec");
|
print("\ec");
|
||||||
rand(time(0));
|
rand(time(0));
|
||||||
map=new_map();
|
map=new_map();
|
||||||
|
|
||||||
forindex(var i;map)
|
forindex(var i;map)
|
||||||
forindex(var j;map[i])
|
forindex(var j;map[i])
|
||||||
map[i][j]=rand()>0.7?'O':' ';
|
map[i][j]=rand()<0.45?'O':' ';
|
||||||
|
|
||||||
var calc=[[0,1],[1,0],[0,-1],[-1,0],[1,1],[1,-1],[-1,-1],[-1,1]];
|
var calc=[[0,1],[1,0],[0,-1],[-1,0],[1,1],[1,-1],[-1,-1],[-1,1]];
|
||||||
for(var r=0;r<100;r+=1){
|
for(var r=0;r<400;r+=1){
|
||||||
prt(map);
|
prt(map);
|
||||||
var tmp=new_map();
|
var tmp=new_map();
|
||||||
for(var i=0;i<15;i+=1)
|
for(var i=0;i<30;i+=1)
|
||||||
for(var j=0;j<20;j+=1){
|
for(var j=0;j<50;j+=1){
|
||||||
var cnt=0;
|
var cnt=0;
|
||||||
foreach(var k;calc)
|
foreach(var k;calc)
|
||||||
cnt+=(check(i+k[0],j+k[1])=='O');
|
cnt+=(check(i+k[0],j+k[1])=='O');
|
||||||
|
|
|
@ -46,8 +46,8 @@ var filechecksum=func(){
|
||||||
"./test/bp.nas", "./test/calc.nas",
|
"./test/bp.nas", "./test/calc.nas",
|
||||||
"./test/choice.nas", "./test/class.nas",
|
"./test/choice.nas", "./test/class.nas",
|
||||||
"./test/console3D.nas",
|
"./test/console3D.nas",
|
||||||
"./test/coroutine.nas", "./test/diff.nas",
|
"./test/coroutine.nas", "./test/datalog.nas",
|
||||||
"./test/donuts.nas",
|
"./test/diff.nas", "./test/donuts.nas",
|
||||||
"./test/exception.nas", "./test/fib.nas",
|
"./test/exception.nas", "./test/fib.nas",
|
||||||
"./test/filesystem.nas", "./test/hexdump.nas",
|
"./test/filesystem.nas", "./test/hexdump.nas",
|
||||||
"./test/httptest.nas", "./test/json.nas",
|
"./test/httptest.nas", "./test/json.nas",
|
||||||
|
|
|
@ -2,9 +2,14 @@ import.stl.process_bar;
|
||||||
import.module.libkey;
|
import.module.libkey;
|
||||||
|
|
||||||
var is_windows_platform=os.platform()=="windows";
|
var is_windows_platform=os.platform()=="windows";
|
||||||
|
var is_macos_platform=os.platform()=="macOS";
|
||||||
|
|
||||||
|
if(is_windows_platform){
|
||||||
|
system("chcp 65001");
|
||||||
|
}
|
||||||
|
|
||||||
var cpu_stat=func(){
|
var cpu_stat=func(){
|
||||||
if(is_windows_platform)
|
if(is_windows_platform or is_macos_platform)
|
||||||
return nil;
|
return nil;
|
||||||
var cpu=split("\n",io.fin("/proc/stat"))[0];
|
var cpu=split("\n",io.fin("/proc/stat"))[0];
|
||||||
cpu=split(" ",cpu);
|
cpu=split(" ",cpu);
|
||||||
|
@ -35,7 +40,7 @@ var cpu_occupation=func(){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
var cpu1=cpu_stat();
|
var cpu1=cpu_stat();
|
||||||
if(is_windows_platform){
|
if(is_windows_platform or is_macos_platform){
|
||||||
coroutine.yield(0);
|
coroutine.yield(0);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -47,7 +52,7 @@ var cpu_occupation=func(){
|
||||||
}
|
}
|
||||||
|
|
||||||
var mem_occupation=func(){
|
var mem_occupation=func(){
|
||||||
if(is_windows_platform)
|
if(is_windows_platform or is_macos_platform)
|
||||||
return {MemTotal:math.inf,MemFree:math.inf};
|
return {MemTotal:math.inf,MemFree:math.inf};
|
||||||
var meminfo=split("\n",io.fin("/proc/meminfo"));
|
var meminfo=split("\n",io.fin("/proc/meminfo"));
|
||||||
var mem_res={};
|
var mem_res={};
|
||||||
|
@ -60,10 +65,22 @@ var mem_occupation=func(){
|
||||||
}
|
}
|
||||||
|
|
||||||
func(){
|
func(){
|
||||||
|
var limited_loop=(size(runtime.argv())!=0 and !math.isnan(num(runtime.argv()[0])));
|
||||||
|
if(limited_loop){
|
||||||
|
limited_loop=num(runtime.argv()[0]);
|
||||||
|
}else{
|
||||||
|
limited_loop=-1;
|
||||||
|
}
|
||||||
|
var rise=[" ","▁","▂","▃","▄","▅","▆","▇","█"];
|
||||||
|
var total=0;
|
||||||
|
var statistics=[];
|
||||||
|
setsize(statistics,70);
|
||||||
|
|
||||||
var co=coroutine.create(cpu_occupation);
|
var co=coroutine.create(cpu_occupation);
|
||||||
var bar=process_bar.high_resolution_bar(30);
|
var bar=process_bar.high_resolution_bar(48);
|
||||||
print("\ec");
|
print("\ec");
|
||||||
while(1){
|
while(limited_loop!=0){
|
||||||
|
limited_loop=limited_loop<0?limited_loop:limited_loop-1;
|
||||||
var mem=mem_occupation();
|
var mem=mem_occupation();
|
||||||
var mem_occ=(mem.MemTotal-mem.MemFree)/mem.MemTotal*100;
|
var mem_occ=(mem.MemTotal-mem.MemFree)/mem.MemTotal*100;
|
||||||
if(math.isnan(mem_occ) or mem_occ<0 or mem_occ>100){
|
if(math.isnan(mem_occ) or mem_occ<0 or mem_occ>100){
|
||||||
|
@ -81,6 +98,37 @@ func(){
|
||||||
println("\e[4;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m");
|
println("\e[4;1H\e[1m Memory free(GB) : \e[0m\e[36m",mem.MemFree/1024/1024,"\e[0m");
|
||||||
println("\e[5;1H\e[1m Memory occupation(%): \e[0m",mem_occ>60?"\e[91m":"\e[32m",bar.bar(mem_occ/100)~" ",mem_occ,"\e[0m ");
|
println("\e[5;1H\e[1m Memory occupation(%): \e[0m",mem_occ>60?"\e[91m":"\e[32m",bar.bar(mem_occ/100)~" ",mem_occ,"\e[0m ");
|
||||||
println("\e[6;1H\e[1m CPU occupation(%) : \e[0m",cpu_occ>90?"\e[91m":"\e[32m",bar.bar(cpu_occ/100)~" ",cpu_occ,"\e[0m ");
|
println("\e[6;1H\e[1m CPU occupation(%) : \e[0m",cpu_occ>90?"\e[91m":"\e[32m",bar.bar(cpu_occ/100)~" ",cpu_occ,"\e[0m ");
|
||||||
println("\e[7;1H Press 'q' to quit.");
|
|
||||||
|
for(var i=0;i<size(statistics);i+=1){
|
||||||
|
total+=1;
|
||||||
|
var u=rand()*rand()*(rand()>0.5?-1:1);
|
||||||
|
statistics[int(size(statistics)/2+u*size(statistics)/2)]+=1;
|
||||||
|
}
|
||||||
|
var s=["","","",""];
|
||||||
|
foreach(var st;statistics){
|
||||||
|
var max_rate=100/size(statistics);
|
||||||
|
var rate=st/total*100;
|
||||||
|
for(var i=size(s)-1;i>=0;i-=1){
|
||||||
|
if(rate>=max_rate){
|
||||||
|
s[i]~="█";
|
||||||
|
rate-=max_rate;
|
||||||
|
}else{
|
||||||
|
s[i]~=rise[rate/max_rate*size(rise)];
|
||||||
|
rate=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var tmp="";
|
||||||
|
for(var i=0;i<size(statistics);i+=1){
|
||||||
|
tmp~="-";
|
||||||
|
}
|
||||||
|
println("\e[7;1H \e[32m+"~tmp~"+\e[0m");
|
||||||
|
println("\e[8;1H \e[32m|",s[0],"|\e[0m");
|
||||||
|
println("\e[9;1H \e[32m|",s[1],"|\e[0m");
|
||||||
|
println("\e[10;1H \e[32m|",s[2],"|\e[0m");
|
||||||
|
println("\e[11;1H \e[32m|",s[3],"|\e[0m");
|
||||||
|
println("\e[12;1H \e[32m+"~tmp~"+\e[0m");
|
||||||
|
|
||||||
|
println("\e[13;1H Press 'q' to quit.");
|
||||||
}
|
}
|
||||||
}();
|
}();
|
|
@ -4,4 +4,29 @@ rand(time(0));
|
||||||
for(var i=0;i<1e4;i+=1)
|
for(var i=0;i<1e4;i+=1)
|
||||||
append(vec,int(rand()*1e5));
|
append(vec,int(rand()*1e5));
|
||||||
sort(vec);
|
sort(vec);
|
||||||
println(vec);
|
println(vec);
|
||||||
|
|
||||||
|
var test=func(n){
|
||||||
|
var a=[];
|
||||||
|
setsize(a,n);
|
||||||
|
for(var i=0;i<n;i+=1){
|
||||||
|
a[i]=int(rand()*n);
|
||||||
|
}
|
||||||
|
var ts=maketimestamp();
|
||||||
|
ts.stamp();
|
||||||
|
var_sort(a);
|
||||||
|
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (value)");
|
||||||
|
|
||||||
|
var a=[];
|
||||||
|
setsize(a,n);
|
||||||
|
for(var i=0;i<n;i+=1){
|
||||||
|
a[i]=int(rand()*n);
|
||||||
|
}
|
||||||
|
ts.stamp();
|
||||||
|
sort(a);
|
||||||
|
println("[time] ",str(n)," in ",ts.elapsedMSec()/1000," sec (lambda)");
|
||||||
|
}
|
||||||
|
|
||||||
|
for(var i=1000;i<1e7;i*=10){
|
||||||
|
test(i);
|
||||||
|
}
|
|
@ -174,15 +174,22 @@ var game=func(x,y){
|
||||||
}
|
}
|
||||||
|
|
||||||
var co=coroutine.create(func(){
|
var co=coroutine.create(func(){
|
||||||
var t=maketimestamp();
|
|
||||||
while(1){
|
while(1){
|
||||||
t.stamp();
|
var moved=-1;
|
||||||
while(t.elapsedMSec()<20);
|
for(var i=0;i<30;i+=1){
|
||||||
coroutine.yield();
|
var ch=libkey.nonblock();
|
||||||
|
if(moved==-1 and ch!=nil){
|
||||||
|
moved=ch;
|
||||||
|
}
|
||||||
|
coroutine.yield(nil);
|
||||||
|
unix.sleep(0.01);
|
||||||
|
}
|
||||||
|
coroutine.yield(moved);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
var main=func(){
|
var main=func(argv){
|
||||||
|
var should_skip=(size(argv)!=0 and argv[0]=="--skip");
|
||||||
# enable unicode
|
# enable unicode
|
||||||
if(os.platform()=="windows")
|
if(os.platform()=="windows")
|
||||||
system("chcp 65001");
|
system("chcp 65001");
|
||||||
|
@ -191,12 +198,14 @@ var main=func(){
|
||||||
var g=game(15,10);
|
var g=game(15,10);
|
||||||
g.print();
|
g.print();
|
||||||
print("\rpress any key to start...");
|
print("\rpress any key to start...");
|
||||||
libkey.getch();
|
if(!should_skip){
|
||||||
|
libkey.getch();
|
||||||
|
}
|
||||||
print("\r \r");
|
print("\r \r");
|
||||||
var counter=20;
|
var counter=20;
|
||||||
while(1){
|
while(1){
|
||||||
var ch=libkey.nonblock();
|
while((var ch=coroutine.resume(co)[0])==nil);
|
||||||
if(ch!=nil){
|
if(ch!=nil and ch!=-1){
|
||||||
if(ch=='q'[0])
|
if(ch=='q'[0])
|
||||||
break;
|
break;
|
||||||
elsif(ch=='p'[0]){
|
elsif(ch=='p'[0]){
|
||||||
|
@ -206,20 +215,19 @@ var main=func(){
|
||||||
}
|
}
|
||||||
g.move(chr(ch));
|
g.move(chr(ch));
|
||||||
}
|
}
|
||||||
counter-=1;
|
|
||||||
if(!counter){
|
g.next();
|
||||||
counter=20;
|
if(g.gameover())
|
||||||
g.next();
|
break;
|
||||||
if(g.gameover())
|
g.print();
|
||||||
break;
|
|
||||||
g.print();
|
|
||||||
}
|
|
||||||
coroutine.resume(co);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
println(g.gameover()<=1?"game over.":"you win!");
|
println(g.gameover()<=1?"game over.":"you win!");
|
||||||
println("press 'q' to quit.");
|
println("press 'q' to quit.");
|
||||||
|
if(should_skip){
|
||||||
|
return;
|
||||||
|
}
|
||||||
while(libkey.getch()!='q'[0]);
|
while(libkey.getch()!='q'[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
main();
|
main(runtime.argv());
|
|
@ -270,7 +270,9 @@ var mapgen=func(mapx,mapy){
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
var main=func(){
|
var main=func(argv){
|
||||||
|
var should_skip=(size(argv)!=0 and argv[0]=="--skip");
|
||||||
|
var init_counter=should_skip?5:30;
|
||||||
# windows use chcp 65001 to output unicode
|
# windows use chcp 65001 to output unicode
|
||||||
if(os.platform()=="windows")
|
if(os.platform()=="windows")
|
||||||
system("chcp 65001");
|
system("chcp 65001");
|
||||||
|
@ -292,10 +294,13 @@ var main=func(){
|
||||||
exchange();
|
exchange();
|
||||||
var map=mapgen(mapx:12,mapy:18);
|
var map=mapgen(mapx:12,mapy:18);
|
||||||
|
|
||||||
libkey.getch();
|
if(!should_skip){
|
||||||
|
libkey.getch();
|
||||||
|
}
|
||||||
print("\ec");
|
print("\ec");
|
||||||
|
map.print();
|
||||||
|
|
||||||
var counter=30;
|
var counter=init_counter;
|
||||||
while(1){
|
while(1){
|
||||||
# nonblock input one character
|
# nonblock input one character
|
||||||
var ch=libkey.nonblock();
|
var ch=libkey.nonblock();
|
||||||
|
@ -325,7 +330,7 @@ var main=func(){
|
||||||
map.checkmap();
|
map.checkmap();
|
||||||
if(map.gameover())
|
if(map.gameover())
|
||||||
break;
|
break;
|
||||||
counter=30;
|
counter=init_counter;
|
||||||
}
|
}
|
||||||
unix.sleep(0.02);
|
unix.sleep(0.02);
|
||||||
counter-=1;
|
counter-=1;
|
||||||
|
@ -341,7 +346,9 @@ var main=func(){
|
||||||
"\e[36m'\e[94mq\e[95m' ",
|
"\e[36m'\e[94mq\e[95m' ",
|
||||||
"\e[35mt\e[36mo \e[94mq\e[95mu\e[91mi\e[92mt\e[0m\n"
|
"\e[35mt\e[36mo \e[94mq\e[95mu\e[91mi\e[92mt\e[0m\n"
|
||||||
);
|
);
|
||||||
while(libkey.getch()!='q'[0]);
|
if(!should_skip){
|
||||||
|
while(libkey.getch()!='q'[0]);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
main();
|
main(runtime.argv());
|
|
@ -96,7 +96,7 @@ var map=func(){
|
||||||
# enable unicode
|
# enable unicode
|
||||||
if(os.platform()=="windows")
|
if(os.platform()=="windows")
|
||||||
system("chcp 65001");
|
system("chcp 65001");
|
||||||
map.new(80);
|
map.new(90);
|
||||||
var interval=1/160;
|
var interval=1/160;
|
||||||
for(var iter=0;iter<100;iter+=1){
|
for(var iter=0;iter<100;iter+=1){
|
||||||
map.print(1);
|
map.print(1);
|
||||||
|
|
Loading…
Reference in New Issue