Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <conio.h>
- #include <time.h>
- //2048
- #define TAMANHO_MATRIZ 4
- int matriz[TAMANHO_MATRIZ][TAMANHO_MATRIZ], score = 0, game_loop = 0;
- //game_loop = 0 -> jogo rolando
- //game_loop = 1 -> jogador ganhou (formou um quadrado 2048)
- //game_loop = -1 -> jogador perdeu
- char dir;
- void botaZero();
- void iniciaMatriz();
- void imprimeMatriz();
- void gameLoop();
- int checaVitoriaDerrota();
- int checaColuna(int linha, int dir);
- int checaLinha(int coluna, int dir);
- int main() {
- srand(time(NULL));
- int res;
- printf("\n\n\t\t\t2048\t\t\t\t\n\n");
- botaZero();
- iniciaMatriz();
- imprimeMatriz();
- gameLoop();
- res = checaVitoriaDerrota();
- if (res == 1)
- printf("Vc ganhou!\n");
- else
- printf("Derrota!\n");
- getch();
- }
- void botaZero() {
- int i, j;
- for (i = 0; i < TAMANHO_MATRIZ; i++) {
- for (j = 0; j < TAMANHO_MATRIZ; j++) {
- matriz[i][j] = 0;
- }
- }
- }
- void iniciaMatriz() {
- int i, linha, coluna;
- for (i = 0; i < 2; i++) {
- do {
- linha = rand() % 4;
- coluna = rand() % 4;
- } while (matriz[linha][coluna] != 0);
- matriz[linha][coluna] = 2;
- }
- }
- void gameLoop() {
- int fim = 0, i, j, pos;
- fim = checaVitoriaDerrota();
- fflush(stdin);
- scanf("%c", & dir);
- while (fim == 0) {
- if (dir == 'B' || dir == 'b') {
- for (i = TAMANHO_MATRIZ - 1; i >= 0; i--) {
- for (j = TAMANHO_MATRIZ - 1; j >= 0; j--) {
- pos = checaLinha(i, 1);
- if (matriz[j][i] > 0) {
- if (pos > j) {
- matriz[pos][i] = matriz[j][i];
- matriz[j][i] = 0;
- if (pos <= 2) {
- if (matriz[pos + 1][i] == matriz[pos][i]) {
- matriz[pos + 1][i] *= 2;
- matriz[pos][i] = 0;
- score += matriz[pos + 1][i];
- }
- }
- } else {
- if (j <= 2) {
- if(matriz[j + 1][i] == matriz[j][i]) {
- matriz[j + 1][i] *= 2;
- matriz[j][i] = 0;
- score += matriz[j + 1][i];
- }
- }
- }
- }
- }
- }
- }
- else if(dir == 'C' || dir == 'c')
- {
- for(i = 0; i < TAMANHO_MATRIZ; i++)
- {
- for(j = 0; j < TAMANHO_MATRIZ; j++)
- {
- pos = checaLinha(i, -1);
- if (matriz[j][i] > 0) {
- if (pos < j && pos > -1) {
- matriz[pos][i] = matriz[j][i];
- matriz[j][i] = 0;
- if (pos > 0) {
- if (matriz[pos - 1][i] == matriz[pos][i]) {
- matriz[pos - 1][i] *= 2;
- matriz[pos][i] = 0;
- score += matriz[pos - 1][i];
- }
- }
- } else {
- if (j > 0) {
- if(matriz[j - 1][i] == matriz[j][i]) {
- matriz[j - 1][i] *= 2;
- matriz[j][i] = 0;
- score += matriz[j - 1][i];
- }
- }
- }
- }
- }
- }
- }
- else if(dir == 'D' || dir == 'd')
- {
- for(i = 0; i < TAMANHO_MATRIZ; i++)
- {
- for(j = TAMANHO_MATRIZ - 1; j >= 0; j--)
- {
- pos = checaColuna(i, 1);
- if(matriz[i][j] > 0)
- {
- if(pos > j)
- {
- matriz[i][pos] = matriz[i][j];
- matriz[i][j] = 0;
- if(pos < 3)
- {
- if(matriz[i][pos + 1] == matriz[i][pos])
- {
- matriz[i][pos + 1] *= 2;
- matriz[i][pos] = 0;
- score += matriz[i][pos + 1];
- }
- }
- }
- else
- {
- if(j < 3)
- {
- if(matriz[i][j + 1] == matriz[i][j])
- {
- matriz[i][j + 1] *= 2;
- matriz[i][j] = 0;
- score += matriz[i][j + 1];
- }
- }
- }
- }
- }
- }
- }
- else if(dir == 'E' || dir == 'e')
- {
- for(i = 0; i < TAMANHO_MATRIZ; i++)
- {
- for(j = 0; j < TAMANHO_MATRIZ; j++)
- {
- pos = checaColuna(i, -11);
- if(matriz[i][j] > 0)
- {
- if(pos < j && pos > -1)
- {
- matriz[i][pos] = matriz[i][j];
- matriz[i][j] = 0;
- if(pos > 0)
- {
- if(matriz[i][pos - 1] == matriz[i][pos])
- {
- matriz[i][pos - 1] *= 2;
- matriz[i][pos] = 0;
- score += matriz[i][pos - 1];
- }
- }
- }
- else
- {
- if(j > 0)
- {
- if(matriz[i][j - 1] == matriz[i][j])
- {
- matriz[i][j - 1] *= 2;
- matriz[i][j] = 0;
- score += matriz[i][j - 1];
- }
- }
- }
- }
- }
- }
- }
- fim = checaVitoriaDerrota();
- if (fim == 0) {
- do {
- i = rand() % TAMANHO_MATRIZ;
- j = rand() % TAMANHO_MATRIZ;
- } while (matriz[i][j] != 0);
- matriz[i][j] = 2;
- imprimeMatriz();
- fflush(stdin);
- scanf("%c", & dir);
- }
- }
- }
- void imprimeMatriz() {
- int i, j;
- printf("\n\t\t\tSCORE:%d\t\t\n", score);
- for (i = 0; i < TAMANHO_MATRIZ; i++) {
- for (j = 0; j < TAMANHO_MATRIZ; j++) {
- if(matriz[i][j] == 0)
- printf(" . ");
- else
- printf(" %d ", matriz[i][j]);
- }
- printf("\n\n");
- }
- }
- int checaVitoriaDerrota() {
- int i, j, ret = 0, cont = 0;
- for (i = 0; i < TAMANHO_MATRIZ; i++) {
- for (j = 0; j < TAMANHO_MATRIZ; j++) {
- if (matriz[i][j] > 0) {
- cont++;
- if (matriz[i][j] == 2048) {
- ret = 1;
- break;
- }
- }
- }
- }
- if (cont == TAMANHO_MATRIZ * TAMANHO_MATRIZ)
- ret = -1;
- return ret;
- }
- int checaColuna(int linha, int dir) {
- int i = 0, ret = -1;
- if (dir == 1) {
- //direita
- for (i = 0; i < TAMANHO_MATRIZ; i++) {
- if (matriz[linha][i] == 0)
- ret = i;
- }
- } else {
- //esquerda
- for (i = TAMANHO_MATRIZ - 1; i >= 0; i--) {
- if (matriz[linha][i] == 0)
- ret = i;
- }
- }
- return ret;
- }
- int checaLinha(int coluna, int dir) {
- int i, ret = -1;
- if (dir == 1) {
- //'B'
- for (i = 0; i < TAMANHO_MATRIZ; i++) {
- if (matriz[i][coluna] == 0)
- ret = i;
- }
- } else {
- //'C'
- for (i = TAMANHO_MATRIZ - 1; i >= 0; i--) {
- if (matriz[i][coluna] == 0)
- ret = i;
- }
- }
- return ret;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement