PLE:Unidad6Ejercicio10

/* programa:      ej50 fecha:         28/11/03 Descipcion:    cuatro en linea. El tablero se numera del siguiente modo

COLUMNAS 0 1  2  3  4  5  6                        0|  |  |  |  |  |  |  |        FILAS           1|  |  |  |  |  |  |  | 2| |  |  |  |  |  |  |                        3|  |  |  |  |  |  |  |                        4|  |  |  |  |  |  |  |                        5|  |  |  |  |  |  |  |                        6|  |  |  |  |  |  |  |                         ======================
 * 1) include 
 * 2) include 
 * 3) include 
 * 1) include 

void inicializar(char nombre1[20],char nombre2[20],char tablero[7][7]); void pintar(char tablero[7][7]); void lee_coordenadas(char nombre[20], int &fila, int &col, char tablero[7][7]); bool hay4enlinea(int fila,int col,char tablero[7][7]); bool hay4enlineavertical(int fila,int col,char tablero[7][7]); bool hay4enlineahorizontal(int fila, int col, char tablero[7][7]); bool hay4enlineadiagonalp(int fila, int col, char tablero[7][7]); bool hay4enlineadiagonals(int fila, int col, char tablero[7][7]);

void main {       char tablero[7][7]; int fila, col, numfichas=0; int ganador=0, turno=1; char ficha1='X', ficha2='O'; char nombre1[20], nombre2[20]; inicializar(nombre1,nombre2,tablero); pintar(tablero); while(ganador == 0 && numfichas < 49) {               if(turno == 1) {                       lee_coordenadas(nombre1, fila, col, tablero); tablero[fila][col] = ficha1; }               else {                       lee_coordenadas(nombre2, fila, col, tablero); tablero[fila][col] = ficha2; }               pintar(tablero); if(hay4enlinea(fila, col, tablero)) ganador = turno; else {                       numfichas++; if(turno == 1) turno = 2; else turno = 1; }       }        cout << endl; if(turno == 1) cout << "El ganador es " << nombre1; else cout << "El ganador es " << nombre2; cin.ignore; cin.get; }

void inicializar(char nombre1[20],char nombre2[20],char tablero[7][7]) {       int i,j; for(i = 0; i < 7; i++) for(j = 0; j < 7; j++) tablero[i][j] = ' '; clrscr; cout << "Introduzca el nombre del primer jugador "; cin >> nombre1; cout << "Introduzca el nombre del segundo jugador "; cin >> nombre2; clrscr; }

void pintar(char tablero[7][7]) {       int i, j;        clrscr; cout << endl << endl << endl << endl << endl << endl; for(i = 0; i < 7 ; i++) {               cout << "\t\t" ; for(j = 0; j < 7; j++) {                       cout << '|' << tablero[i][j]; }               cout << '|' << endl; }       cout << "\t\t" ; cout << "---"; }

void lee_coordenadas(char nombre[20], int &fila, int &col, char tablero[7][7]) {       cout << endl << nombre << " introduzca columna "; cin >> col; while(tablero[0][col] != ' ') cin >> col; fila = 0; while(fila < 7 && tablero[fila][col] == ' ') fila+=1; fila-=1; }

bool hay4enlinea(int f, int c, char t[7][7]) {       if(hay4enlineahorizontal(f, c, t)                || hay4enlineavertical(f, c, t)                || hay4enlineadiagonalp(f, c, t)                || hay4enlineadiagonals(f, c, t)) return true; else return false; }

bool hay4enlineavertical(int fila,int col,char tablero[7][7]) {       int num=0, i, j;        // Vertical (hacia abajo) i = fila; while(i < 7 && tablero[i][col] == tablero[fila][col]) {               num++; i++; }       return ( num > 3 ? true : false ); }

bool hay4enlineahorizontal(int fila, int col, char tablero[7][7]) {       int num=0, i, j;        // Horizontal. j = col; // Primero nos desplazamos a la izquierda while(j >= 0 && tablero[fila][j] == tablero[fila][col]) {               j--; }       j++; // Ahora contamos las fichas que componen la fila while(j < 7 && tablero[fila][j] == tablero[fila][col]) {               j++; num++; }       return ( num > 3 ? true : false ); }

bool hay4enlineadiagonalp(int fila, int col, char tablero[7][7]) {       int num=0, i, j;        // Diagonal principal \. i = fila; j = col; // Primero nos desplazamos hacia arriba-izquierda while(i >= 0 && j >= 0 && tablero[i][j] == tablero[fila][col]) {               i--; j--; }       i++; j++; // Ahora contamos las fichas que componen la diagonal while(i < 7 && j < 7 && tablero[i][j] == tablero[fila][col]) {               i++; j++; num++; }       return ( num > 3 ? true : false ); }

bool hay4enlineadiagonals(int fila, int col, char tablero[7][7]) {       int num=0, i, j;        // Diagonal secundaria /. i = fila; j = col; // Primero nos desplazamos hacia arriba-derecha while(i >= 0 && j < 7 && tablero[i][j] == tablero[fila][col]) {               i--; j++; }       i++; j--; // Ahora contamos las fichas que componen la diagonal while(i < 7 && j >= 0 && tablero[i][j] == tablero[fila][col]) {               i++; j--; num++; }       return ( num > 3 ? true : false ); }