#include #include #include int field[4][4] = { {0,0,0,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0} }; int start1[2] = {0,0}; int start2[2] = {0,0}; int new1[2] = {0,0}; void printfield() { printf("\033[2j\033[H"); for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { printf("%7d ",field[i][j]); } printf("\n"); } } int main(int argc, char* argv[]) { srand(time(NULL)); start1[0] = rand() % 4; //only twos to start off with start1[1] = rand() % 4; start2[0] = rand() % 4; start2[1] = rand() % 4; while((start1[0] == start2[0]) && (start1[1] == start2[1])) { start2[0] = rand() % 4; start2[1] = rand() % 4; } field[start1[0]][start1[1]] = 2; field[start2[0]][start2[1]] = 2; printfield(); while(1) { printfield(); switch(getchar()) { case 10: case 13: case 27: continue; case 119: //w for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { for(int k = 1; k < 4; k++) { if(!field[k-1][i]) { //if one tile further than i is empty field[k-1][i] = field[k][i]; //move i tile up field[k][i] = 0; //clear i for closer tile } else if(field[k-1][i] == field[k][i]) { //if one tile further than i is the same field[k-1][i] = field[k-1][i] * 2; //double the tile one tile further than i field[k][i] = 0; //clear i for close tile } } } } break; case 97: //a for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { for(int k = 1; k < 4; k++) { if(!field[i][k-1]) { field[i][k-1] = field[i][k]; field[i][k] = 0; } else if(field[i][k-1] == field[i][k]) { field[i][k-1] = field[i][k-1] * 2; field[i][k] = 0; } } } } break; case 115: //s for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { for(int k = 2; k > -1; k--) { if(!field[k+1][i]) { field[k+1][i] = field[k][i]; field[k][i] = 0; } else if(field[k+1][i] == field[k][i]) { field[k+1][i] = field[k+1][i] * 2; field[k][i] = 0; } } } } break; case 100: //d for(int i = 0; i < 4; i++) { for(int j = 0; j < 4; j++) { for(int k = 2; k > -1; k--) { if(!field[i][k+1]) { field[i][k+1] = field[i][k]; field[i][k] = 0; } else if(field[i][k+1] == field[i][k]) { field[i][k+1] = field[i][k+1] * 2; field[i][k] = 0; } } } } break; } new1[0] = rand() % 4; new1[1] = rand() % 4; while(field[new1[0]][new1[1]]) { new1[0] = rand() % 4; new1[1] = rand() % 4; } field[new1[0]][new1[1]] = 2; } exit(0); }