Last active
April 1, 2018 07:49
-
-
Save anirudh-chhangani/9989292 to your computer and use it in GitHub Desktop.
Reformatted Tiny 2048.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
M[16],X=16,W,k; | |
main(){ | |
T(system("stty cbreak")); | |
puts(W&1?"WIN":"LOSE"); | |
} | |
K[]={2,3,1}; | |
s(f,d,i,j,l,P){ | |
for(i=4;i--;) | |
for(j=k=l=0;k<4;) | |
j<4?P=M[w(d,i,j++)],W|=P>>11,l*P&&(f?M[w(d,i,k)]=l<<(l==P):0,k++),l=l?P?l-P?P:0:l:P:(f?M[w(d,i,k)]=l:0,++k,W|=2*!l,l=0); | |
} | |
w(d,i,j){ | |
return d?w(d-1,j,3-i):4*i+j; | |
} | |
T(i){ | |
for(i=X+rand()%X;M[i%X]*i;i--); | |
i?M[i%X]=2<<rand()%2:0; | |
for(W=i=0;i<4;)s(0,i++); | |
for(i=X,puts("\e[2J\e[H");i--;i%4||puts("")) | |
printf(M[i]?"%4d|":" |",M[i]); | |
W-2||read(0,&k,3)|T(s (1,K[(k>>X)%4])); | |
} | |
//[2048] reformated | |
Original Version : https://gist.github.com/justecorruptio/9967738 | |
by : Jay Chan |
What is this mate i dont understand this code can u pls help me? I think w,a,s,d doesnt work for example i put w but numbers doesnt went up why?
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
The reason why 3 characters are read is that arrow keys generate 3-byte sequences.
When the characters are read, the 3-byte sequence actually is reversed.
So for instance, in the last case ('arrow down'), k is assigned 0x425b1b.
k is then used to decide which of the K-array value to use.
k is right-shifted by 16 bits, reducing it to 0x42, so we have K [ 0x042 % 4 ], which is equivalent to K[2], the 3rd element of K[].
Thus, the statement after the read (0, &k, 3) evaluates to calling s (1, 1).
I wonder why K[] does not have 4 values, one for each arrow key.