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

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / 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;
}
2  Programación / Programación C/C++ / Re: Hola soy nuevo en código en C, tengo este código pero no se en que tengo error, me podrían ayudar por favor en: 19 Diciembre 2022, 02:39 am
En la penúltima linea, el return -1.

main.c: In function ‘main’:
main.c:105:1: error: expected declaration or statement at end of input
  105 | return -1;}
      | ^~~~~~

este es el error.
3  Programación / Programación C/C++ / Hola soy nuevo en código en C, tengo este código pero no se en que tengo error, me podrían ayudar por favor en: 19 Diciembre 2022, 00:49 am
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. typedef struct Bodega{
  4.    char Nombre_producto;
  5.    int codigo_barras;
  6.    int cantidad;
  7.    float precio;
  8. }Producto;
  9. int Pedir_cantidad();
  10. Producto Agregar_producto();
  11. void Mostrar_productos(Producto *productos,int Num_productos);
  12. void Mostrar_producto(Producto *productos,int posicion);
  13. int Busqueda(Producto *productos,int Codigo,int contador);
  14.  
  15. int main()
  16. {
  17.    int Num_productos,eleccion=0,contador_productos=0;
  18.    Num_productos=Pedir_cantidad();
  19.    Producto productos[Num_productos];
  20.    system("cls");
  21.  
  22.    while(eleccion!=4){
  23.    printf("Que deseas realizar");
  24.    printf("1)Agregar producto");
  25.    printf("2)Buscar producto");
  26.    printf("3)Mostrar productos");
  27.    printf("4)Salir");
  28.    scanf("%d",&eleccion);
  29.  
  30.    switch(eleccion){
  31.       case 1:{
  32.  
  33.       if(contador_productos==Num_productos){
  34.           printf("No es posible agregar mas productos");
  35.        }else{
  36.            productos[contador_productos]=Agregar_producto();
  37.            contador_productos++;
  38.        }
  39.       break;
  40. }
  41.       case 2:{
  42.           int buscado,Codigo;
  43.           printf("Dame el numero de barras para encontrar el producto");
  44.           scanf("%d",&Codigo);
  45.           buscado=Busqueda(productos,Codigo,contador_productos);
  46.           if(buscado==-1){
  47.               printf("Producto no encontrado");
  48.           }else{
  49.               Mostrar_producto(productos,buscado);
  50.           }
  51.           break;
  52.  
  53.       }
  54.       case 3:{
  55.           Mostrar_productos(productos,contador_productos);
  56.           break;
  57.       }
  58.       case 4:{
  59.          printf("Adios");
  60.       }
  61.    return 0;
  62.    }
  63.    int Pedir_cantidad(){
  64.        int cantidad;
  65.        printf("Dame la cantidad de productos que deseas agregar a tu tienda");
  66.        scanf("%d",&cantidad);
  67.        return cantidad;
  68.    }
  69. }
  70.    Producto Agregar_producto(){
  71.        Producto articulo;
  72.        printf("Dame el nombre del producto:");
  73.        scanf("%s",&articulo.Nombre_producto);
  74.        printf("Dame el precio del producto:");
  75.        scanf("%f",&articulo.precio);
  76.        printf("Dame la cantidad disponible del producto:");
  77.        scanf("%d",&articulo.cantidad);
  78.        printf("Dame el codigo de barras:");
  79.        scanf("%d",&articulo.codigo_barras);
  80.        return articulo;
  81.    }
  82. void Mostrar_productos(Producto *productos,int Num_productos){
  83.    for(int i=0;i<Num_productos;i++){
  84.        printf("Producto: %disponible",productos[i].Nombre_producto);
  85.        printf("Precio: %.2f",productos[i].precio);
  86.        printf("Cantidad disponible: %d",productos[i].cantidad);
  87.        printf("Codigo de barras: %d",productos[i].codigo_barras);
  88.        printf("\n");
  89.    }
  90. }
  91. void Mostrar_producto(Producto *productos,int posicion){
  92.        printf("Producto:%d",productos[posicion].Nombre_producto);
  93.        printf("Precio:%.2f",productos[posicion].precio);
  94.        printf("Cantidad disponible:%d",productos[posicion].cantidad);
  95.        printf("Codigo de barras:%d",productos[posicion].codigo_barras);
  96.        printf("\n");
  97. }
  98. int Busqueda(Producto *productos,int Codigo,int contador){
  99.    int i=0;
  100.    for(i;i<contador;i++){
  101.        if(productos[i].codigo_barras==Codigo){
  102.            return i;
  103.        }
  104. }
  105. return -1;
  106. }

MOD: El código debe ir entre etiquetas de Código GeSHi
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines