Cita de: HardForo en 27 Mayo 2016, 01:33 AM
Veo... tienes un montón de variables aux, no es por criticar pero es dificil saber que hace cada una, deberias empezar definiendo bien los nombres de tus variables, que tus metodos devuelvan "booleanos" (0 ó 1) y que no hagan nada mas! no imprimas nada dentro... no enredes el código, manten clara la funcionalidad de cada "módulo" (función)
Si re-organizas tu codigo, yo te ayudo...sino... es algo para mártires
Borré todo lo que estaba de mas, y quedo funcionando el jueguito (se mueve y suma), borre todo lo que habia intentado para que pierda, porque ni yo me entendia.. a ver si ahi esta un poco mejor:
Código (c) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 4
void imp_tablero ();
void random_m ();
//Funciones Movimientos
void MOV_ARRIBA1 ();
void MOV_ABAJO1 ();
void MOV_IZQ1 ();
void MOV_DER1 ();
void MOV_ARRIBA2 ();
void MOV_ABAJO2();
void MOV_DER2();
void MOV_IZQ2();
void inicio_juego(); // Imprime tablero, muestra puntaje e indica movimiento.
void movimiento(); // Generar movimiento
void opciones(); //Pregunta al usuario si quiere continuar jugando.
int tablero[N][N] = {0};
int aux, aux1=1,aux2=0,aux3=0,aux4=0,aux5=0;
int a,b,ab,mov;
int b1=0, juego=0;
int cambio_num=0;
int M=N-2, puntaje;
char decision;
int main()
{
printf ("--------------------------------------------------\n");;
printf ("**2222222222**0000000000**444****444**8888888888**\n");;
printf ("**2222222222**0000000000**444****444**8888888888**\n");;
printf ("*********222**000****000**444****444**888****888**\n");;
printf ("**2222222222**000****000**4444444444**8888888888**\n");;
printf ("**2222222222**000****000**4444444444**8888888888**\n");;
printf ("**222*********000****000*********444**888****888**\n");;
printf ("**2222222222**0000000000*********444**8888888888**\n");;
printf ("**2222222222**0000000000*********444**8888888888**\n");;
printf ("--------------------------------------------------\n\n\n");;
time_t t;
srand((unsigned) time(&t));
for(a=0;a<3;a++)
{
random_m();
}
while (juego==0){
inicio_juego();
imp_tablero();
movimiento();
}
opciones ();
return 0;
}
void imp_tablero()
{
int a,b,c=0,i,j;
char borde = '|', piso= '_';
printf("\n");
for(a=0;a<N;a++)
{
for(b=0;b<N;b++)
{
printf("%c\t%d\t%c",borde, tablero[a][b], borde);
}
printf ("\n");
}
//Indica movimiento realizado.
if (mov==1)
printf("\nMovimiento hacia arriba\n");
if (mov==2)
printf ("\nMovimiento hacia abajo\n");
if (mov==3)
printf ("\nMovimiento hacia la izquierda\n");
if (mov==4)
printf ("\nMovimiento hacia la derecha\n");
for (i=0; i<N; i++){
for (j=0; j<N; j++){
puntaje= tablero[i][j]+c;
c=puntaje;
if (tablero[i][j]==2048){
printf ("\nFELICITACIONES, HAS GANADO EL JUEGO!\n");
juego=1;}
}
}
printf("\nPUNTAJE: %d\n", puntaje);
}
void random_m()
{
int h,g;
do {
b1=0;
h= rand()% N;
g= rand()% N;
if(tablero[g][h]==0){ // Alternar para que aparezca '2' y '4'
if (cambio_num==0)
{
tablero[g][h] = 2;
cambio_num=1;
b1 = 1;
}
else {
tablero[g][h] = 4;
cambio_num=0;
b1 = 1;
}
}
} while (b1==0);
}
void MOV_ARRIBA1()
{
do{
ab=0;
for(a=1;a<N;a++)
{
for(b=0;b<N;b++)
{
if(tablero[a-1][b]==0&&tablero[a][b]!=0)
{
tablero[a-1][b]=tablero[a][b];
tablero[a][b]=0;
ab=1;
}
}
}
}while (ab==1);
mov=1;
}
void MOV_ARRIBA2()
{
for (a=1;a<N;a++)
{
for (b=0;b<N;b++)
{
if (tablero[a-1][b]==tablero[a][b])
{
tablero[a-1][b]+=tablero[a][b];
tablero[a][b]=0;
}
}
}
}
void MOV_ABAJO1()
{
do{
ab=0;
for(a=M;a>=0;a--)
{
for(b=0;b<N;b++)
{
if(tablero[a+1][b]==0&&tablero[a][b]!=0)
{
tablero[a+1][b]=tablero[a][b];
tablero[a][b]=0;
ab=1;
}
}
}
}while(ab==1);
mov=2;
}
void MOV_ABAJO2()
{
for (a=M;a>=0;a--)
{
for (b=0;b<N;b++)
{
if (tablero[a+1][b]==tablero[a][b])
{
tablero[a+1][b]+=tablero[a][b];
tablero[a][b]=0;
}
}
}
}
void MOV_IZQ1()
{
do
{
ab=0;
for (a=0;a<N;a++)
{
for (b=1;b<N;b++)
{
if(tablero[a][b-1]==0&&tablero[a][b]!=0)
{
tablero[a][b-1]=tablero[a][b];
tablero[a][b]=0;
ab=1;
}
}
}
}while (ab==1);
mov=3;
}
void MOV_IZQ2()
{
for(a=0;a<N;a++)
{
for(b=1;b<N;b++)
{
if(tablero[a][b-1]==tablero[a][b])
{
tablero[a][b-1]+=tablero[a][b];
tablero[a][b]=0;
}
}
}
}
void MOV_DER1()
{
do{
ab=0;
for (a=0;a<N;a++)
{
for (b=M;b>=0;b--)
{
if(tablero[a][b+1]==0&&tablero[a][b]!=0)
{
tablero[a][b+1]=tablero[a][b];
tablero[a][b]=0;
ab=1;
}
}
}
}while (ab==1);
mov=4;
}
void MOV_DER2 ()
{
for (a=0;a<N;a++)
{
for (b=M;b>=0;b--)
{
if(tablero[a][b+1]==tablero[a][b])
{
tablero[a][b+1]+=tablero[a][b];
tablero[a][b]=0;
}
}
}
}
void inicio_juego()
{
printf("Utilice:\nW para arriba\nS para abajo\nD para derecha \nA para izquierda \n\n\n\n");
printf ("TABLERO DE JUEGO\n\n\n");;
}
void movimiento()
{
int i,h,g,a;
int band=0;
char t1;
time_t t;
do
{
printf ("\n ^\n");
printf (" W\n");
printf (" <A D>\n");
printf (" S \n");
printf ("\n v\n\n");
printf ("----> ");
char aux[1];
scanf ("%s", &aux);
printf ("\n\n");
t1=aux[0];
switch(t1)
{
case 'w': case 'W':
MOV_ARRIBA1 ();
MOV_ARRIBA2();
MOV_ARRIBA1 ();
random_m();
break;
case 's': case 'S':
MOV_ABAJO1();
MOV_ABAJO2();
MOV_ABAJO1();
random_m();
break;
case 'a': case 'A':
MOV_IZQ1();
MOV_IZQ2();
MOV_IZQ1();
random_m();
break;
case 'd': case 'D':
MOV_DER1;
MOV_DER2();
MOV_DER1();
random_m();
break;
default:
{
printf("\n\n\n\tTECLA ERRONEA\n\n");
break;
}
}
imp_tablero();
}
while(aux1==1);
}
void opciones()
{
char decision;
printf("Desea seguir jugando?\nS = Si\nN = No\n-------> ");
scanf ("%c", &decision);
if (decision=='s'||decision=='S')
juego=0;
else
printf ("GRACIAS POR JUGAR! HASTA LA PRÓXIMA..");
}
[MOD] Para publicar código, usar etiquetas GeShi. Segundo aviso.