En si solo necesito modificar el codigo del modo facil para hacerlo dificultad media (Que bloquee las posiciones, y cada vez que haya una posibilidad de ganar ponga la ficha ahí, pero no intenta ganar por su cuenta)
Comente todo el codigo para que sea mas facil y rapido entender lo que estoy haciendo.
Gracias de antemano y aqui esta el codigo del modo facil:
Código:
#ifndef JUGADORFACIL_H
#define JUGADORFACIL_H
#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <ctime>
#include <string.h>
using namespace std;
class JugadorFacil
{
private:
char tablero[6][7];
public:
JugadorFacil();
int ejecutar();
bool revisar(int a, int b);
void mostrar();
int fichas(int b, char jugador);
};
#endif // JUGADORFACIL_H
#include "JugadorFacil.h"
JugadorFacil::JugadorFacil()
{
//ctor
}
int JugadorFacil::ejecutar()
{
//reseteo
for(int a =0;a <= 5; a++){
for(int b = 0; b<=6; b++)
tablero[a][b] = ' ';
}
//Pongo el =' ' para dejar los espacios en blanco en el tablero
mostrar();
int ficha;//guarda la variable del jugador
int ficha2 = 0;//para las funciones
int fichasPuestas = 0;
bool juegoTerminado = false;//se cambia a true cuando todas las fichas del tablero se ponen o gana un jugador
char jugador = 15;//empezara con el jugador 1 por eso es igual a 15 y luego se ira al 2
while(!juegoTerminado){//el ciclo no se termina hasta que el juego se temrina
if(ficha2 != -1){//revisa si hay error cuando se pone la ficha
if(jugador == 15){//cuando el jugador uno pone se cambia automaticamente al 2 al declarar jugador = 254
cout<<"Jugador 1: Donde quieres poner tu ficha?";
jugador = 254;//cambio de ficha del jugador
}
else{
jugador = 15;//cambio de ficha del jugador
}
}
while(true){
if(jugador == 15){//el turno de la maquina
ficha = rand()%7+1; //pondra valores aleatorios del 1-7
break;//se rompe el ciclo entonces puede continuar a la evaluacion
}
if(fichasPuestas == 42) break;
cin>>ficha;//esta variable guarda lo que el usuario dice
ficha--;//elimino uno porque el usuario elige entre 1 y 7 y los arreglos empiezan en 0
if(ficha <=6 && ficha>= 0) break;//aqui comprueba si el valor es valido si no lo es le dira que ponga un valor valido
else cout<< "\nPor favor, ingresa un valor entre 1 y 7 :";
if (cin.fail()) //esto es si ingresa un valor que no es, lo guarda en otra variable para evitar el error y preguntar por un numero valido.
{ //
cin.clear(); //
char c; //
cin>>c; //en esta variable guarda el caracter no valido
}
}
if(fichasPuestas == 42) break;//comprueba si esta lleno
ficha2 = fichas(ficha,jugador);//evalua
if(ficha2 == -1) cout<<"La columna esta llena...\nPorfavor ingresa otro numero entre 1 y 7:";//si la columna esta llena te manda el mensaje
else{
juegoTerminado = revisar(ficha2,ficha);//si el lugar esta vacio entonces coloca la ficha donde va
fichasPuestas ++;
system("cls");//esto solo limpia la pantalla
mostrar();//actualiza el tablero
}
}
system("cls");
if(fichasPuestas == 42){//si todo el tablero esta lleno y no hubo un ganador declara empate
cout<<"No hay ganador!\n";
system("pause");
return 0;
}
if(jugador == 15)//si la variable es igual a 15(codigo ascii) gana el jugador 2
cout<<"El jugador 2 gano!!!\n";
else cout<<"El jugador 1 gano!!!\n";//de otra manera gana el 1
system("pause");//esto pausa para que se pueda ver quien gano
return 0;
}
void JugadorFacil::mostrar()
{
cout<<" 1 2 3 4 5 6 7\n";
for(int a = 0; a<= 5; a++)
{
for(int b =0; b <= 6; b++) cout<<char(218)<<char(196)<<char(191)<<" ";
cout<<'\n';
for(int b =0; b <= 6; b++) cout<<char(179)<<tablero[a][b]<<char(179)<<" ";
cout<<'\n';
for(int b =0; b <= 6; b++) cout<<char(192)<<char(196)<<char(217)<<" ";
cout<<'\n';
}
}
bool JugadorFacil::revisar(int a, int b)
{
int vertical = 1;
int horizontal = 1;
int diagonal1 = 1;
int diagonal2 = 1;
char jugador = tablero[a][b];
int i; //vertical
int ii;//horizontal
//revisando verticales
for(i = a +1;tablero[i][b] == jugador && i <= 5;i++,vertical++);//abajo
for(i = a -1;tablero[i][b] == jugador && i >= 0;i--,vertical++);//arrina
if(vertical >= 4)return true;
//revisando horizontales
for(ii = b -1;tablero[a][ii] == jugador && ii >= 0;ii--,horizontal++);//izquierda
for(ii = b +1;tablero[a][ii] == jugador && ii <= 6;ii++,horizontal++);//derecha
if(horizontal >= 4) return true;
//revisando diagonal 1
for(i = a -1, ii= b -1;tablero[i][ii] == jugador && i>=0 && ii >=0; diagonal1 ++, i --, ii --);//arriba e izquierda
for(i = a +1, ii = b+1;tablero[i][ii] == jugador && i<=5 && ii <=6;diagonal1 ++, i ++, ii ++);//abajo y derecha
if(diagonal1 >= 4) return true;
//revisando diagonal 2
for(i = a -1, ii= b +1;tablero[i][ii] == jugador && i>=0 && ii <= 6; diagonal2 ++, i --, ii ++);//arriba y derecha
for(i = a +1, ii= b -1;tablero[i][ii] == jugador && i<=5 && ii >=0; diagonal2 ++, i ++, ii --);//arriba e izquierda
if(diagonal2 >= 4) return true;
return false;
}
int JugadorFacil::fichas(int b, char jugador)
{
if(b >=0 && b<= 6)
{
if(tablero[0][b] == ' '){
int i;
for(i = 0;tablero[i][b] == ' ';i++)
if(i == 5)
{tablero[i][b] = jugador;
return i;}
i--;
tablero[i][b] =jugador;
return i;
}
else{
return -1;
}
}
else{
return -1;
}
}
Muchas gracias.