elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Necesito de ayuda maestros del lenguaje en c
0 Usuarios y 2 Visitantes están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Necesito de ayuda maestros del lenguaje en c  (Leído 4,648 veces)
Fernando13

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Necesito de ayuda maestros del lenguaje en c
« en: 20 Junio 2023, 07:41 am »

Elabore este código en C, tengo varios problemas con el. (estoy desesperado por ello ya intente de todo)

El código es el juego de buscaminas, en pantalla una vez que se corre el juego se muestra el tablero con las minas expuestas. la idea es que no se muestren estas minas. también no se tiene nunca un ganador o perdedor. ojala me pudieran ayudar, de este código depende mi calificación del semestre.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define EASY 5
#define MEDIUM 10
#define HARD 15
#define MINAS 10

// Función para imprimir el encabezado
void encabezado() {
    printf("\n\t   ____       _   _    ____       ____      _      __   __              _   _       _      ____  ");
      printf("\n\tU | __\") u U |\"|u| |  / __\"| u U /\"___| U  /\"\\  u U|' \\/ '|u   ___     | \\ |\"|  U  /\"\\  u / __\"| u ");
      printf("\n\t \\|  _ \\ /  \\| |\\| |  \\___ \\/  \\| | u    \\/ _ \\/  \\| |\\/| |/  |_\"_|   <|  \\| |>  \\/ _ \\/ <\\___ \\/ ");
      printf("\n\t  | |_) |    | |_| |  u___) |   | |/__   / ___ \\   | |  | |    | |    U| |\\  |u  / ___ \\  u___) | ");
      printf("\n\t  |____/    <<\\___/   |____/>>   \\____| /_/   \\_\\  |_|  |_|  U/| |\\u   |_| \\_|  /_/   \\_\\ |____/>>  ");
      printf("\n\t _|| \\\\_   (__) )(     )(  (__) _// \\\\   \\\\    >> <<,-,,-..-,_|___|_,-.||   \\\\,-.\\\\    >>  )(  (__) ");
      printf("\n\t(__) (__)      (__)   (__)    (__) (__) (__)  (__) (./  \\.)\\_)-' '-(_/ (_\")  (_/(__)  (__)(__)    ");

    printf("\nEcho por: Mares Muñoz Moises Fernando y Emmanuel Guzman Palomo\n");
}

// Función para inicializar el tablero
void inicializarTablero(char **tablero, int size) {
    for (int i = 0; i < size; i++) {
        for (int j = 0; j < size; j++) {
            *(*(tablero + i) + j) = ' ';
        }
    }
}


// Función para imprimir el tablero
void imprimirTablero(char **tablero, int size, int mostrarMinas) {
    printf("\n--- Tablero ---\n\n   ");
    for (int j = 0; j < size; j++) printf("%2d ", j);
    printf("\n");
    for (int i = 0; i < size; i++) {
        printf("%2d ", i);
        for (int j = 0; j < size; j++) {
            char cell = *(*(tablero + i) + j);
            if (cell == -1) printf(mostrarMinas ? " * " : " # ");  // Esto muestra un espacio en blanco en lugar de un asterisco
            else if (cell == ' ') printf(" . "); 
            else printf(" %d ", cell);
        }
        printf("\n");
    }
    printf("\n");
}




// Función para colocar las minas en el tablero
void colocarMinas(char **tablero, int size, int minas) {
    srand(time(NULL));
    for (int minasColocadas = 0; minasColocadas < minas;) {
        int fila = rand() % size;
        int columna = rand() % size;
        if (*(*(tablero + fila) + columna) == ' ') {
            *(*(tablero + fila) + columna) = -1;
            minasColocadas++;
        }
    }
}


// Función para contar el número de minas adyacentes a una casilla
int contarMinasAdyacentes(char **tablero, int size, int fila, int columna){
    int contador = 0;
    for (int i = fila - 1; i <= fila + 1; i++) {
        for (int j = columna - 1; j <= columna + 1; j++) {
            if (i >= 0 && i < size && j >= 0 && j < size && *(*(tablero + i) + j) == -1) contador++;
        }
    }
    return contador;
}

// Función para revelar casillas vacías adyacentes
void revelarCasillasVacias(char **tablero, int size, int fila, int columna) {
    if (fila >= 0 && fila < size && columna >= 0 && columna < size && *(*(tablero + fila) + columna) == ' ') {
        *(*(tablero + fila) + columna) = contarMinasAdyacentes(tablero, size, fila, columna);
        if (*(*(tablero + fila) + columna) == 0) {
            *(*(tablero + fila) + columna) = '.';  // Cambia la representación de la casilla vacía a un punto
            for (int i = fila - 1; i <= fila + 1; i++) {
                for (int j = columna - 1; j <= columna + 1; j++) {
                    if (i != fila || j != columna) revelarCasillasVacias(tablero, size, i, j);
                }
            }
        }
    }
}



char** crearTablero(int size) {
    char** tablero = (char**) malloc(size * sizeof(char*));
    for (int i = 0; i < size; i++) {
        tablero = (char*) malloc(size * sizeof(char));
    }
    return tablero;
}

void liberarTablero(char** tablero, int size) {
    for (int i = 0; i < size; i++) {
        free(tablero);
    }
    free(tablero);
}

int main() {
    encabezado();
    int option, size, minas;

    do {
        printf("Elige un nivel de dificultad:\n1. Fácil\n2. Intermedio\n3. Difícil\n4. Salir\n");
        scanf("%d", &option);
       

    switch(option) {
    case 1:
        size = EASY;
        minas = 10;
        break;
    case 2:
        size = MEDIUM;
        minas = 30;
        break;
    case 3:
        size = HARD;
        minas = 50;
        break;
    case 4:
        printf("¡Gracias por jugar!\n");
        return 0;
    default:
        printf("Opción no válida.\n");
        continue;
    }

        char **tablero = crearTablero(size);
        inicializarTablero(tablero, size);  // Inicializa el tablero antes de colocar las minas
        colocarMinas(tablero, size, minas);  // Coloca las minas después de inicializar el tablero

        int gameOver = 0;

        while (!gameOver) {
            imprimirTablero(tablero, size, 0);

             int fila, columna;
            printf("Ingresa la fila (0-%d): ", size - 1);
            scanf("%d", &fila);
            printf("Ingresa la columna (0-%d): ", size - 1);
            scanf("%d", &columna);

            if (fila < 0 || fila >= size || columna < 0 || columna >= size) {
                printf("Coordenadas no validas. Por favor, intentalo de nuevo.\n");
                continue;
            }

            if (*(*(tablero + fila) + columna) != ' ') {
            printf("La casilla ya ha sido revelada. Intenta de nuevo.\n");
            continue;
            }



            if (*(*(tablero + fila) + columna) == -1) {
                gameOver = 1;
                printf("¡Has perdido!\n");
                break;
            }
            else {
                revelarCasillasVacias(tablero, size, fila, columna);
                int casillasNoReveladas = 0;
                for (int i = 0; i < size; i++) {
                    for (int j = 0; j < size; j++) {
                        if (*(*(tablero + i) + j) == ' ' || *(*(tablero + i) + j) == '.') casillasNoReveladas++;
                    }
                }

                if (casillasNoReveladas == minas) {
                    gameOver = 1;
                    printf("¡Has ganado!\n");
                    break;
                }
            }
        }

        imprimirTablero(tablero, size, 1);
        liberarTablero(tablero, size);

        printf("¿Quieres jugar de nuevo?\n1. Sí\n2. No\n");
        scanf("%d", &option);

    } while(option != 2);
    printf("¡Gracias por jugar!\n");
    return 0;
}


En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Necesito de ayuda maestros del lenguaje en c
« Respuesta #1 en: 20 Junio 2023, 08:52 am »

No se hacen tareas ajenas.


En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Ayuda maestros del hacking! « 1 2 »
Dudas Generales
China Hastings 12 6,944 Último mensaje 14 Septiembre 2012, 07:21 am
por H1tchclock
Menú mediante lenguaje C ¨Necesito ayuda.
Programación C/C++
OreOBooM 1 1,944 Último mensaje 6 Noviembre 2013, 04:09 am
por Vaagish
Necesito la ayuda de los sabios maestros de CSS
Desarrollo Web
Razzari 2 3,071 Último mensaje 22 Marzo 2017, 16:39 pm
por Myguel
Necesito ayuda en este codigo en lenguaje c
Programación C/C++
EmmanuelTR9 1 2,298 Último mensaje 8 Octubre 2018, 23:10 pm
por srWhiteSkull
hola necesito ayuda con una tarea de programación en lenguaje c
Programación C/C++
vale1213 2 2,645 Último mensaje 9 Octubre 2022, 19:47 pm
por K-YreX
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines