119 lines
3.9 KiB
C
119 lines
3.9 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
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);
|
|
}
|