¿ Esta ese mismo algoritmo en C ? Como debería adaptarlo? No puedo usar clases en esta ocasión..
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú case 80: // Movimiento hacia abajo
if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
( *Filas )++;
( *Puntos ) ++;
Posicion[F - 1][*Columnas];
}
break;
#define JUGADOR 2
#define N 4
// donde pone N será el valor de las filas y columnas de la matriz
// Mueve el jugador en la matriz
void Mover_Jugador( char Matriz[N][N], char Tecla, int *Filas, int *Columnas ){
int F, C, Posicion[N][N];
for( int i = 0; i < N; i++ )
for( int j = 0; j < N; j++ )
Posicion[i][j] = Matriz[i][j];
F = *Filas;
C = *Columnas;
switch( Tecla ){
case 72: // Movimiento hacia arriba
if( *Filas > 0 && Matriz[*Filas - 1][*Columnas] != 'c' ){
( *Filas )--;
( *Puntos ) ++;
Posicion[F + 1][*Columnas];
}
break;
case 80: // Movimiento hacia abajo
if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
( *Filas )++;
( *Puntos ) ++;
Posicion[F - 1][*Columnas];
}
break;
case 75: // Movimiento hacia la derecha
if( *Columnas > 0 && Matriz[*Filas][*Columnas - 1] != 'c' ){
( *Columnas )--;
( *Puntos ) ++;
Posicion[F][C + 1];
}
break;
case 77: // Movimiento hacia la izquierda
if( *Columnas < N - 1 && Matriz[*Filas][*Columnas + 1] != 'c' ){
( *Columnas )++;
( *Puntos ) ++;
Posicion[F][C - 1];
}
break;
}
Matriz[*Filas][*Columnas] = JUGADOR; // JUGADOR se mueve de posicion
}
int main( ){
int Matriz[N][N]; // Tu matriz
int Tecla; // Tecla que introduces por pantalla
do{
Tecla = getch( );
if( Tecla == -32 || Tecla == 0 ) // Mueve el jugador
Tecla = getch( );
Mover_Jugador( Matriz, Tecla, &Filas, &Columnas );
}while( AQUÍ TU CONDICIÓN PARA EL FINAL DEL BUCLE );
}
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>
#define N 10
#define GALLETA '.'
#define JUGADOR 2
#define OBSTACULO '*'
#define OCUPADO '-'
// Solicita el nivel de dificultad de juego
int Solicitar_Dificultad( ){
int Dificultad;
system("cls");
do{
printf("Introducir nivel (1-3): ");
scanf("%d", &Dificultad);
getchar( );
}while( Dificultad < 1 || Dificultad > 3 );
return Dificultad;
}
// Rellena la matriz y posiciona los obstaculos y al jugador
void Inicializar_Juego( char Matriz[N][N], int *Filas, int *Columnas, int *Puntos, int Dificultad ){
int Obstaculos, i, j;
*Puntos = 0;
Obstaculos = Dificultad * N;
// Se rellen la Matriz con galletas
for( i = 0; i < N; i++ )
for( j = 0; j < N; j++ )
Matriz[i][j] = GALLETA;
// Se introducen obstaculos
while( Obstaculos > 0 ){
i = rand() % N;
j = rand() % N;
if( Matriz[i][j] == GALLETA ){
Matriz[i][j] = OBSTACULO;
Obstaculos --;
}
}
// Busca una posicion aleatoria para el jugador
do{
i = rand() % N;
j = rand() % N;
}while( Matriz[i][j] != GALLETA );
Matriz[i][j] = JUGADOR;
*Filas = i;
*Columnas = j;
}
// Esta funcion se encarga de imprimir la matriz
void Imprimir( char Matriz[N][N], int *Puntos ){
system("cls");
for( int i = 0; i < N; i++ ){
for( int j = 0; j < N; j++ )
printf("%2c", Matriz[i][j]);
printf("\n");
}
printf("\n\nPuntuacion actual: %d\n\nCONTROLES:\n - Cursores para mover al jugador\ni - Iniciar de nuevo el panel\ns - Salir del programa", *Puntos);
}
// Devuelve 1 si el juego finaliza
int Comprobar_Fin( char Matriz[N][N], int *Filas, int *Columnas ){
int Fin = 1;
for( int i = 0; i < N; i++)
for( int j = 0; j < N; j++)
if( Matriz[i][j] == JUGADOR )
Fin = 0;
// Si se atrapa con 4 obstaculos
if( ( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
( Matriz[(*Filas)][(*Columnas) + 1] != GALLETA ) && ( Matriz[(*Filas)][(*Columnas) - 1] != GALLETA ) ){
Fin = 1;
}else{
// Si se atrapa con la pared de la izquierda
if( *Columnas == 0 &&
( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
( Matriz[(*Filas)][(*Columnas) + 1] != GALLETA ) ){
Fin = 1;
}else{
// Si se atrapa con la pared de la derecha
if( *Columnas == N - 1 &&
( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
( Matriz[(*Filas)][(*Columnas) - 1] != GALLETA ) ){
Fin = 1;
}
}
}
return Fin;
}
// Mueve el jugador en la matriz
void Mover_Jugador( char Matriz[N][N], char Tecla, int *Filas, int *Columnas, int *Puntos ){
int F, C, Posicion[N][N];
for( int i = 0; i < N; i++ )
for( int j = 0; j < N; j++ )
Posicion[i][j] = Matriz[i][j];
F = *Filas;
C = *Columnas;
switch( Tecla ){
case 72: // Movimiento hacia arriba
if( *Filas > 0 && Matriz[*Filas - 1][*Columnas] != OBSTACULO ){
( *Filas )--;
( *Puntos ) ++;
Posicion[F + 1][*Columnas];
}
break;
case 80: // Movimiento hacia abajo
if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != OBSTACULO ){
( *Filas )++;
( *Puntos ) ++;
Posicion[F - 1][*Columnas];
}
break;
case 75: // Movimiento hacia la derecha
if( *Columnas > 0 && Matriz[*Filas][*Columnas - 1] != OBSTACULO ){
( *Columnas )--;
( *Puntos ) ++;
Posicion[F][C + 1];
}
break;
case 77: // Movimiento hacia la izquierda
if( *Columnas < N - 1 && Matriz[*Filas][*Columnas + 1] != OBSTACULO ){
( *Columnas )++;
( *Puntos ) ++;
Posicion[F][C - 1];
}
break;
}
// donde antes estaba el jugador ahora esta ocupado
if( Matriz[F][C] != Posicion[*Filas][*Columnas] )
Matriz[F][C] = OCUPADO;
if( Matriz[*Filas][*Columnas] == OCUPADO )
Matriz[*Filas][*Columnas] = 'X'; // JUGADOR se come a si mismo
else
Matriz[*Filas][*Columnas] = JUGADOR; // JUGADOR se mueve de posicion
}
// Inicializa el juego llamando a las anteriores funciones
void Ejecutar_Juego( ){
char Matriz[N][N], Tecla;
int Filas, Columnas, Puntos, Nivel;
srand( time(NULL) );
Nivel = Solicitar_Dificultad( );
Inicializar_Juego( Matriz, &Filas, &Columnas, &Puntos, Nivel );
Imprimir( Matriz, &Puntos );
do{
Tecla = getch( );
if( Tecla == -32 || Tecla == 0 ) // Mueve el jugador
Tecla = getch( );
else
if( Tecla >= 'a' && Tecla <= 'z' ) // Convierte el caracter Tecla a mayuscula
Tecla -= 32;
if( Tecla == 'I' )
Inicializar_Juego( Matriz, &Filas, &Columnas, &Puntos, Nivel );
Mover_Jugador( Matriz, Tecla, &Filas, &Columnas, &Puntos );
Imprimir( Matriz, &Puntos );
}while( Comprobar_Fin( Matriz, &Filas, &Columnas ) == 0 && Tecla != 'S' );
printf("\n\nTermina el juego con %d puntos\n\n", Puntos);
system("pause");
}
// Funcion principal
int main( ){
Ejecutar_Juego( );
return 0;
}