aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-01-05 01:49:34 +0900
committernsfisis <nsfisis@gmail.com>2026-01-05 01:49:34 +0900
commitae25f000ee16486576bd3e5ad506fad0c44e9c11 (patch)
tree3101cf8f262de285d00231c3f6569ca8899ac12a
parent60613d00bbd7ad3541670d26dc27073810c53c29 (diff)
download2048.c-main.tar.gz
2048.c-main.tar.zst
2048.c-main.zip
make more portableHEADmain
-rw-r--r--2048.c57
-rw-r--r--2048_clean.c6
2 files changed, 31 insertions, 32 deletions
diff --git a/2048.c b/2048.c
index 1e7e0cb..d4aee6d 100644
--- a/2048.c
+++ b/2048.c
@@ -1,32 +1,31 @@
-#include <stdio.h>
-#include <stdlib.h>
-#include <termios.h>
-#include <time.h>
-#include <unistd.h>
-#define f(f,_)printf(f,_)
-#define s(_)f("%s",_)
-#define n s("\r\n")
+#include<stdio.h>
+#include<stdlib.h>
+#include<termios.h>
+#include<time.h>
+#include<unistd.h>
+#define f printf
+#define n f("\r\n")
#define r(_,n)for(int _=0;_<n;++_)
#define t(_)(G+y*((x+S)%(S+1)+_*x)+(S+1-y)*i)
-int S,N,E,C,*L,*T,F[ 128],*G= F,R ;struct termios O ;void x( ){if(!R++)tcsetattr(
-0,2,&O),s("\e[?25h\e" "[?1049l");}void _() {s("+"); r(i,8*S- 1)s("-");s("+");n;}
-void l(){s("|");r(i, S){r(j,7)s(" ");s("|" );}n;}int m(int x, int y,int d){C=0;r(i
-,S){E=0;L=0;r(j,S)if (*(T=t(j)))if(L&&*T ==*L){if (d){*L*= 2;T=0;}L=0;C=1;}else
- {L=t(E); if(d)*L= *T;++E;} for(;E<S ;++E){T= t(E);C|= *T;if(d)
- *T=0; }} return!C ;}void p (){ E =0 ;r( i,S* S)if (!G [i])++E;
- if(E==0) return;N =rand()% E;r(i,S* S)if(!G[ i]&&--E== N)G[i]=
- rand()%8 ?2:4;}int main(int argc,char **argv){ srand(time(0));atexit
-(x); s("\e[?1049h"); tcgetattr (0, &O); struct termios o=O;o .c_iflag&=-1331;o.
-c_oflag&=-2;o.c_cflag |=48;o. c_lflag&= -32780;o.c_cc[6]=0;o .c_cc[5]=1;tcsetattr
-(0,2,&o);s("\e[?25l" );S=argc> 1?(*argv [1]-48):4;if(S<2||S> 8){fputs("invalid b"
-"oard size\n",stderr );return 1;}p();p ();for(;;){s("\e[2" "J\e[H");_();r(i,S){
-l();s("| " );r(j,S) {if(!*G) s(" " " | ");else if(*G>=
-1024)f(" " "%2dk " "| ",*G/ 1024);else f("%4d | ",*G);++G
-;}n;l(); if(i<S-1 ){s("|") ;r(j,S){ r(j,7)s( "-");if(
-j<S-1)s( "+");}s( "|");n;} }_();G-= S*S;s(" " "h,j,k,"
-"l: move");r(i,9)s(" ");s("q: quit");fflush (stdout) ;char k;while(read(0
-,&k,1)!=1);switch(k) {case'q':goto q;case 'h':m(1, 1,1);goto e;case'j':
-m(-1,S,1);goto e;case 'k':m(1,S,1);goto e; case'l': m(-1,1,1);goto e;e:if
-(C)p();if(m(1,1,0)&m (-1,1,0)&m(1,S,0)&m( -1,S,0)) goto q;usleep(2048*8
-);break;}}q:x();s("\e[2J\e[H");}/* 2048 in 2 kb by nsfisis */
+int S ,N,E,C ,*L ,*T ,F[128] ,*G =F;struct termios O ;void x() {tcsetattr(0,TCSAFLU\
+SH,&O);f("\e[?25h\e" "[?1049l\e[2J\e[H");} void _(){ f("+");r( i,8*S-1)f("-");f("+")
+;n;}void l(){f("|"); r(i,S){r(j,7)f(" ");f ("|" ); } n;}int m( int x,int y,int d){C=
+0;r(i,S){E=0;L=0;r(j ,S)if(*(T=t(j)))if(L &&*T==*L) {if(d){*L *=2;T=0;}L=0;C=1;}else
+ {L=t(E);if (d)*L=*T; ++E;}for( ;E<S;++E) {T=t(E);C |=*T;if( d)*T=0;}}
+ return! C; }void p() {E=0;r(i, S *S)if(! G[i])++E; if(E==0) return;N=
+ rand()%E;r (i,S*S)if (!G[i]&& --E==N)G[ i]=rand() %8?2:4;} int main(
+ int A,char **a){srand (time(0)) ;S=A> 1?( *a[1]-48) :4;if(S< 2 ||S>8){
+fputs("invalid board size" "\n" ,stderr); return 1;} atexit(x); f ("\033[?1049h");tc\
+getattr(0,&O);struct termios o =O;o. c_iflag &=~ ( BRKINT| ICRNL| INPCK |ISTRIP|
+IXON);o.c_oflag&=~ OPOST;o. c_cflag|= CS8;o.c_lflag&=~(ECHO |ICANON|IEXTEN|ISIG);
+o.c_cc[VMIN]=0;o.c_cc [VTIME]=1 ;tcsetattr (0,2,&o);f("\e[?25l") ;p();p();while(32){f(
+"\e[2J\e[H");_();r(i ,S){l();f ("| ");r( j,S){if(!*G)f(" " " | "); else if (*G>=
+1024)f(" " "%2dk |" " ", * G/ 1024);else f("%4d " "| ",*G);
+++G;}n;l() ;if(i<S-1 ){f("|"); r(j,S){r( j,7)f("-" );if(j<S-
+1) f("+"); }f( "|"); n;}}_();G -= S*S;f( " h"",j" ",k,l: "
+"move") ;r (i,9 )f( " " ); f( "q: quit" );fflush( stdout );
+char k,e=0;while( read(0,&k, 1)!=1);if( k=='q') goto q;if(k=='h')m(1,
+1,e=1);if(k=='j')m(- 1,S,e=1);if(k=='k')m( 1,S,e=1); if(k =='l')m(-1 ,1,e
+=1);if(e ){if(C)p(); if(m(1,1,0)&m (-1,1,0 )&m( 1,S, 0)&m(-1,S ,0))goto q;
+usleep(2048*8);}}q:; } /*nsfisis*/
diff --git a/2048_clean.c b/2048_clean.c
index 79a474b..cade2b4 100644
--- a/2048_clean.c
+++ b/2048_clean.c
@@ -177,15 +177,15 @@ void put_new_tile(void) {
int main(int argc, char **argv) {
srand(time(0));
- switch_to_alt_buffer();
- enable_raw_mode();
-
size = argc > 1 ? (*argv[1] - '0') : 4;
if (size <= 1 || size > 8) {
fputs("invalid board size\n", stderr);
return 1;
}
+ switch_to_alt_buffer();
+ enable_raw_mode();
+
put_new_tile();
put_new_tile();