C/Visual C - Necesito un programa de un gato en C/C++

 
Vista:

Necesito un programa de un gato en C/C++

Publicado por Lucy (1 intervención) el 14/07/2002 18:09:00
Hola
Necesito entregar un trabajo final sobre un programa de un gato en el que nunca gane el usuario, la verdad es ke no tengo idea de como hacerlo, nuestro profesor no nos ha enseñado mucho sobre el lenguaje C y dijo que nos quiere reprobar a todos si no entregamos ese trabajo, si pudieran ayudarme se los agradecería mucho, bye!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Programa de gato (tic-tac-toe) donde el usuario nunca gana

Publicado por Alejandro (913 intervenciones) el 11/03/2025 17:11:01
Para crear un programa de Tic-Tac-Toe (gato) en C donde el usuario nunca gane, puedes implementar una estrategia para que la computadora siempre haga la mejor jugada posible. Aquí te dejo un ejemplo básico de cómo podrías estructurar el programa:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
 
char board[3][3]; // Tablero de juego
char player = 'X'; // Jugador humano
char computer = 'O'; // Jugador computadora
 
// Función para inicializar el tablero
void initializeBoard() {
    for (int i = 0; i < 3; i++)
        for (int j = 0; j < 3; j++)
            board[i][j] = ' ';
}
 
// Función para mostrar el tablero
void displayBoard() {
    printf(" %c | %c | %c \n", board[0][0], board[0][1], board[0][2]);
    printf("---|---|---\n");
    printf(" %c | %c | %c \n", board[1][0], board[1][1], board[1][2]);
    printf("---|---|---\n");
    printf(" %c | %c | %c \n", board[2][0], board[2][1], board[2][2]);
}
 
// Función para verificar si hay un ganador
int checkWinner(char mark) {
    for (int i = 0; i < 3; i++)
        if ((board[i][0] == mark && board[i][1] == mark && board[i][2] == mark) ||
            (board[0][i] == mark && board[1][i] == mark && board[2][i] == mark))
            return 1;
    if ((board[0][0] == mark && board[1][1] == mark && board[2][2] == mark) ||
        (board[0][2] == mark && board[1][1] == mark && board[2][0] == mark))
        return 1;
    return 0;
}
 
// Función para que la computadora haga su movimiento
void computerMove() {
    // Estrategiasimple: bloquear al jugador o ganar
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (board[i][j] == ' ') {
                board[i][j] = computer;
                if (checkWinner(computer)) return; // Gana
                board[i][j] = ' '; // Deshacer movimiento
            }
        }
    }
    // Si no puede ganar, bloquear al jugador
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            if (board[i][j] == ' ') {
                board[i][j] = player;
                if (checkWinner(player)) {
                    board[i][j] = computer; // Bloquear
                    return;
                }
                board[i][j] = ' '; // Deshacer movimiento
            }
        }
    }
    // Si no hay amenazas, hacer un movimiento aleatorio
    while (1) {
        int i = rand() % 3;
        int j = rand() % 3;
        if (board[i][j] == ' ') {
            board[i][j] = computer;
            return;
        }
    }
}
 
int main() {
    initializeBoard();
    while (1) {
        displayBoard();
        int row, col;
        printf("Ingresa tu movimiento (fila y columna): ");
        scanf("%d %d", &row, &col);
        if (board[row][col] == ' ') {
 board[row][col] = player;
            if (checkWinner(player)) {
                displayBoard();
                printf("¡Ganaste!\n");
                break;
            }
            computerMove();
            if (checkWinner(computer)) {
                displayBoard();
                printf("La computadora ganó.\n");
                break;
            }
        } else {
            printf("Movimiento inválido. Intenta de nuevo.\n");
        }
    }
    return 0;
}

Explicación del código:


1. Inicialización del tablero: Se crea un tablero de 3x3 y se inicializa con espacios vacíos.
2. Mostrar el tablero: Se imprime el estado actual del tablero.
3. Verificar ganador: Se comprueba si hay un ganador después de cada movimiento.
4. Movimiento de la computadora: La computadora intenta ganar o bloquear al jugador. Si no hay amenazas, hace un movimiento aleatorio.
5. Juego principal: Se ejecuta un bucle donde el jugador ingresa su movimiento y la computadora responde.

Este código es un punto de partida. Puedes mejorarlo añadiendo más lógica para que la computadora siempre gane, como implementar un algoritmo más avanzado (por ejemplo, Minimax). ¡Espero que esto te ayude con tu trabajo final, Lucy!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar