[Aporte] 3 en raya (2 Jugadores)

Iniciado por Manimecker, 15 Enero 2012, 03:07 AM

0 Miembros y 1 Visitante están viendo este tema.

Manimecker

He decidido publicar mi código del 3 en raya para 2 jugadores humanos.

Se juega utilizando el numpad dependiendo del número es la casilla a jugar.



Código (cpp) [Seleccionar]
///EL GATO EN C++ CON VECTORES
///MANIMECKER
///JORGEJUVA@GMAIL.COM
///ERES LIBRE DE MODIFICAR ESTE CODIGO A TU CONVENIENCIA
///YOU ARE FREE TO MODIFY THIS CODE AS YOU WANT

#include <stdio.h>
#include <conio2.h> //Tuve que usar esta libreria con CodeBlocks

int op=0, gana=0, emp=1, pla1=0, pla2=0, pjug=1, repe1;
char n2[2];
char n[9];          ///     TABLERO
                    /// ================
                    /// |n[0]|n[1]|n[2]|
                    /// ================
                    /// |n[3]|n[4]|n[5]|
                    /// ================
                    /// |n[6]|n[7]|n[8]|
                    /// ================

void tablero()
{
    gotoxy(25,1); printf(" ***EL GATO***");
    gotoxy(15,2); printf("UTILIZA EL TELCADO NUMERICO PARA JUGAR");
    gotoxy(15,5); printf("===== \n");
    gotoxy(15,6); printf("%c|%c|%c \n",n[6], n[7], n[8]);
    gotoxy(15,7); printf("===== \n");
    gotoxy(15,8); printf("%c|%c|%c \n",n[3], n[4], n[5]);
    gotoxy(15,9); printf("===== \n");
    gotoxy(15,10); printf("%c|%c|%c \n",n[0], n[1], n[2]);
    gotoxy(15,11); printf("===== \n");
    gotoxy(30,5); printf("        GANADAS  ");
    gotoxy(30,6); printf("Jugador 1    Jugador 2");
    gotoxy(30,7); printf("   %d            %d ", pla1, pla2);
}

void valores()
{
    gana=0; emp=0; pjug=1;
    int i, j;
    for (i=0; i<=9; i++)
        n[i]=' ';
}

void casillas()
{
    char oc;
    if (pjug == 1)
        oc='X';
    else
        oc='O';
    switch (op) {
        case 1 : if (n[0] != ' ') { repe1=1; break; } else {n[0]=oc; emp++; break;}
        case 2 : if (n[1] != ' ') { repe1=1; break; } else {n[1]=oc; emp++; break;}
        case 3 : if (n[2] != ' ') { repe1=1; break; } else {n[2]=oc; emp++; break;}
        case 4 : if (n[3] != ' ') { repe1=1; break; } else {n[3]=oc; emp++; break;}
        case 5 : if (n[4] != ' ') { repe1=1; break; } else {n[4]=oc; emp++; break;}
        case 6 : if (n[5] != ' ') { repe1=1; break; } else {n[5]=oc; emp++; break;}
        case 7 : if (n[6] != ' ') { repe1=1; break; } else {n[6]=oc; emp++; break;}
        case 8 : if (n[7] != ' ') { repe1=1; break; } else {n[7]=oc; emp++; break;}
        case 9 : if (n[8] != ' ') { repe1=1; break; } else {n[8]=oc; emp++; break;} }
}

void ganador()
{
    n2[0]='X'; n2[1]='O';
    int i;
    if (emp <= 9) {
        for (i=0; i<2; i++) {
        if (n[0]==n2[i] && n[3]==n2[i] && n[6]==n2[i])
            gana=i+1;
        if (n[1]==n2[i] && n[4]==n2[i] && n[7]==n2[i])
            gana=i+1;
        if (n[2]==n2[i] && n[5]==n2[i] && n[8]==n2[i])
            gana=i+1;
        if (n[6]==n2[i] && n[7]==n2[i] && n[8]==n2[i])
            gana=i+1;
        if (n[3]==n2[i] && n[4]==n2[i] && n[5]==n2[i])
            gana=i+1;
        if (n[0]==n2[i] && n[1]==n2[i] && n[2]==n2[i])
            gana=i+1;
        if (n[6]==n2[i] && n[4]==n2[i] && n[2]==n2[i])
            gana=i+1;
        if (n[0]==n2[i] && n[4]==n2[i] && n[8]==n2[i])
            gana=i+1; }
    }
    else
        gana=3;
}

void jug1()
{
    gotoxy(1,14); printf("Jugador 1 - Introduce el numero: ");
    scanf("%d", &op);
    while (op>9 || op<1) {
        gotoxy(1,14); printf("Opcion NO VALIDA, introduce una correcta: ");
        scanf("%d", &op); }
    casillas();
    if (repe1 == 1) {
        gotoxy(1,13);
        printf("Casilla ya elegida! ");
        repe1=0;
        jug1();}
    clrscr();
    ganador();
    pjug=2;
}

void jug2()
{
    gotoxy(1,14); printf("Jugador 2 - Introduce el numero: ");
    scanf("%d", &op);
    while (op>9 || op<1) {
        gotoxy(1,14); printf("Opcion NO VALIDA, introduce una correcta: ");
        scanf("%d", &op); }
    casillas();
    if (repe1 == 1) {
        gotoxy(1,13);
        printf("Casilla ya elegida! ");
        repe1=0;
        jug1();}
    clrscr();
    ganador();
    pjug=1;
}

int main()
{
    char cp;
    do {
    clrscr();
    valores();
    while (gana == 0)
    {
        tablero();
        switch(pjug)
        {
            case 1 : jug1(); break;
            case 2 : jug2(); break;
        }
    }
    switch(gana) {
        case 1 : pla1++; gotoxy(1,13); printf("Gana el jugador 1."); break;
        case 2 : pla2++; gotoxy(1,13); printf("Gana el jugador 2."); break;
        case 3 : gotoxy(1,13); printf("Es un empate."); break; }
    tablero();
    gotoxy(1, 15); printf("Deseas otro juego (S/N): ");
    scanf(" %c", &cp);
    } while (cp == 'S');
    return 0;
}


Si tienen cualquier observación, por favor díganmela para poder corregir mi programa u optimizarlo.

PD: Presiento que se puede hacer de manera más fácil, pero ya no sé como simplificarlo más y siento que así está bien el código. Digo esto porque siempre tiendo a crear códigos complicados y largos cuando en realidad son fáciles y cortos.

Salu2.