dificultad media en conecta 4 c++

Iniciado por Abril7, 28 Noviembre 2016, 07:11 AM

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

Abril7

Buenas noches, estoy haciendo un conecta 4 en c++ ya tengo practicamente todo solo me falta el modo dificultad media vs la pc, el modo facil lo hicé con una funcion rand pero la verdad no se como hacer el medio, alguien me puede ayudar???

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:

#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.

MCKSys Argentina

Hola!

Revisa el código de esta página. Seguro puedes sacar ideas de ahí.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."