update test/tetris.nas

This commit is contained in:
ValKmjolnir 2022-02-23 01:09:31 +08:00
parent f05acaecc7
commit 6bc03601d9
1 changed files with 50 additions and 29 deletions

View File

@ -58,6 +58,20 @@ var blockshape=[
]; ];
var stick_count=0; # make sure one stick in 10 tries var stick_count=0; # make sure one stick in 10 tries
var color_count=0;
var last_type=-1;
var typechange=func(t){
if(t==last_type)
t=int(rand()*size(blocktype));
if(t!=3){
stick_count+=1;
if(stick_count==8)
(t,stick_count)=(3,0);
}else
stick_count=0;
last_type=t;
return t;
}
var block={ var block={
x:0, x:0,
y:0, y:0,
@ -68,16 +82,16 @@ var block={
new:func(x=0,y=0){ new:func(x=0,y=0){
(me.x,me.y)=(x,y); (me.x,me.y)=(x,y);
me.rotate=0; me.rotate=0;
var t=int(rand()*size(blocktype)); var t=typechange(int(rand()*size(blocktype)));
if(t!=3){
stick_count+=1;
if(stick_count==10)
(t,stick_count)=(3,0);
}else
stick_count=0;
me.type=blocktype[t]; me.type=blocktype[t];
me.shape=blockshape[me.type[me.rotate]]; me.shape=blockshape[me.type[me.rotate]];
me.color=int(rand()*size(color));
me.color=color_count;
color_count+=1;
if(color_count>=size(color))
color_count=0;
return {parents:[block]}; return {parents:[block]};
} }
}; };
@ -90,10 +104,11 @@ var mapgen=func(mapx,mapy){
die("map_x or map_y must be greater than 1"); die("map_x or map_y must be greater than 1");
# use in print # use in print
var table="\e[32m+"; var line="";
for(var i=0;i<mapx;i+=1) for(var i=0;i<mapx;i+=1)
table~="--"; line~="══";
table~="+\e[0m\n"; var head="\e[32m╔"~line~"╗\e[0m\n";
var tail="\e[32m╚"~line~"╝\e[0m\n";
# generate new map # generate new map
var map=[]; var map=[];
@ -122,9 +137,9 @@ var mapgen=func(mapx,mapy){
# color print # color print
var map_print=func(){ var map_print=func(){
var s="\e[1;1H"~table; var s="\e[1;1H"~head;
for(var y=0;y<mapy;y+=1){ for(var y=0;y<mapy;y+=1){
s~="\e[32m|\e[0m"; s~="\e[32m\e[0m";
for(var x=0;x<mapx;x+=1){ for(var x=0;x<mapx;x+=1){
var c=map[y][x]; var c=map[y][x];
if(c==empty) if(c==empty)
@ -134,10 +149,10 @@ var mapgen=func(mapx,mapy){
elsif(c>=full) elsif(c>=full)
s~=color[c-full]~"██\e[0m"; s~=color[c-full]~"██\e[0m";
} }
s~="\e[32m|\e[0m\n"; s~="\e[32m\e[0m\n";
} }
s~=table; s~=tail;
print(s," score: ",score,'\n'); print(s,"\e[31ms\e[32mc\e[33mo\e[34mr\e[35me\e[36m: \e[0m",score,'\n');
} }
var moveleft=func(){ var moveleft=func(){
@ -264,14 +279,15 @@ var main=func(){
libkey.init(); libkey.init();
print( print(
"\ec\e[1:1H", "\ec\e[1:1H",
"+-------------------------+\n", "╔═════════════════════════╗\n",
"| TETRIS |\n", "║ TETRIS ║\n",
"| w:rotate, a:move left |\n", "╠═════════════════════════╣\n",
"| s:fall, d:move right |\n", "║ w:rotate, a:move left ║\n",
"| p:pause, q:quit |\n", "║ s:fall, d:move right ║\n",
"+-------------------------+\n", "║ p:pause, q:quit ║\n",
"|press any key to start...|\n", "╠═════════════════════════╣\n",
"+-------------------------+\n" "║ press any key to start ║\n",
"╚═════════════════════════╝\n"
); );
rand(time(0)); rand(time(0));
@ -280,6 +296,7 @@ var main=func(){
libkey.getch(); libkey.getch();
print("\ec"); print("\ec");
var interval=0.55;
while(1){ while(1){
# nonblock input one character # nonblock input one character
var ch=libkey.nonblock(); var ch=libkey.nonblock();
@ -302,15 +319,15 @@ var main=func(){
map.checkmap(); map.checkmap();
if(map.gameover()) if(map.gameover())
break; break;
unix.sleep(0.01); interval-=0.11;
} }else{
else{
# automatically fall one block and check # automatically fall one block and check
map.fall(); map.fall();
map.checkmap(); map.checkmap();
if(map.gameover()) if(map.gameover())
break; break;
unix.sleep(0.5); unix.sleep(interval);
interval=0.55;
} }
} }
libkey.close(); libkey.close();
@ -319,7 +336,11 @@ var main=func(){
"\e[31mg\e[32ma\e[33mm\e[34me \e[35mo\e[36mv\e[94me\e[31mr \e[32m~\e[0m\n": "\e[31mg\e[32ma\e[33mm\e[34me \e[35mo\e[36mv\e[94me\e[31mr \e[32m~\e[0m\n":
"\e[31ms\e[32me\e[33me \e[34my\e[35mo\e[36mu \e[94m~\e[0m\n" "\e[31ms\e[32me\e[33me \e[34my\e[35mo\e[36mu \e[94m~\e[0m\n"
); );
print("enter anything to quit...\n"); print(
"\e[31me\e[32mn\e[33mt\e[34me\e[35mr ",
"\e[36ma\e[94mn\e[95my\e[96mt\e[31mh\e[32mi\e[33mn\e[34mg ",
"\e[35mt\e[36mo \e[94mq\e[95mu\e[91mi\e[92mt\e[0m\n"
);
input(); input();
}; };