Dev - C++ - ayuda con programa connecta 4, para un jugador modo facil, c++

 
Vista:

ayuda con programa connecta 4, para un jugador modo facil, c++

Publicado por Abril (4 intervenciones) el 27/11/2016 23:51:15
Buenas tardes, tengo este codigo de un juego hecho en C++ [Conecta 4] la cuestion es que funciona para 2 jugadores, cada uno va poniendo una pieza y asi. Pero necesito hacer que funcione para 1 jugador y que la maquina sea el otro en 2 modos, facil y medio, en facil lo haré con la funcion rand (aleatoria) en medio aun no lo se, pero estoy intenta convertir el codigo de 2 jugadores a 1, ya intente muchas cosas y ninguna funciona ya que la variable donde el jugador ingresa la posicion donde quiere poner la ficha es la misma en este codigo para ambos jugadores, entonces al agregar otra variable para poner la funcion aleatoria o hacer modificaciones deja de funcionar. Quiero saber si alguien puede decirme o explicarme como lo hacer esto.

MUCHAS GRACIAS.

Este es el codigo en una clase:
Basicamente la funcion ejecutar es el main.
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#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);
};
 
#include "JugadorFacil.h"
 
JugadorFacil::JugadorFacil()
{
    //ctor
}
int JugadorFacil::ejecutar()
{
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;//Will house user row choice
 int ficha2 = 0;//will hold drop value
 int fichasPuestas = 0;//Number of peices dropped so can end game if a draw
 bool juegoTerminado = false;//Will be changed to true when game is won and will exit while loop
 char jugador = 15;//start as player 2 will change back 2 player 1
 while(!juegoTerminado){//will stop when game is won, ! means NOT makes the oppisite be checked
  if(ficha2 != -1){//check if there was a error in the last drop
   if(jugador == 15){//if player 2 lasted dropped a piece so its player 1s turn
    cout<<"Jugador 1: Donde quieres poner tu ficha?";
    jugador = 254;//char of players piece
   }
   else{
    cout<<"Jugador 2: Donde quieres poner tu ficha?";
    jugador = 15;//char of player piece
   }
  }
  while(true){//will run untill 'break;'
   if(fichasPuestas == 42) break;//if draw
            cin>>ficha;//get user input
   ficha--;//take off 1 to account for arrays starting at 0 not 1
   if(ficha <=6 && ficha>= 0) break;//if within valid range stop loop
   else cout<< "\nPor favor, ingresa un valor entre 1 y 7 :";//ask for input and loop again
   if (cin.fail()) //catch a non number
   {      //
    cin.clear();  //Stops cin trying to put its value in to hold
    char c;   //Try entering a non number without this, 2 see what this does
    cin>>c;   //
   }      //Catch a non number
 
  }
  if(fichasPuestas == 42) break;//if draw
  ficha2 = fichas(ficha,jugador);//drop the player store the row in hold2
  if(ficha2 == -1) cout<<"La columna esta llena...\nPorfavor ingresa otro numero entre 1 y 7:";//if error -1 row is full
  else{
   juegoTerminado = revisar(ficha2,ficha);//check if game is run
   fichasPuestas ++;//another character has been succesfully placed
   system("cls");//This clears the screen works with windows, not nesscery to run game
   mostrar();//displayed updated board
  }
 }
 system("cls");//this clears the screen
 if(fichasPuestas == 42){//if draw
  cout<<"No hay ganador!\n";
  system("pause");
  return 0;
 }
 if(jugador == 15)//if won by player 2
  cout<<"El jugador 2 gano!!!\n";
 else cout<<"El jugador 1 gano!!!\n";//Else won by player 1
 system("pause");//pauses before exit so players can see who won, works with windows
 return 0;//Exit application
}
void JugadorFacil::mostrar() // Draw board
{
 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++);//Check down
 for(i = a -1;tablero[i][b] == jugador && i >= 0;i--,vertical++);//Check up
 if(vertical >= 4)return true;
 //revisando horizontales
 for(ii = b -1;tablero[a][ii] == jugador && ii >= 0;ii--,horizontal++);//Check left
 for(ii = b +1;tablero[a][ii] == jugador && ii <= 6;ii++,horizontal++);//Check right
 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 --);//up and left
 for(i = a +1, ii = b+1;tablero[i][ii] == jugador && i<=5 && ii <=6;diagonal1 ++, i ++, ii ++);//down and right
 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 ++);//up and right
 for(i = a +1, ii= b -1;tablero[i][ii] == jugador && i<=5 && ii >=0; diagonal2 ++, i ++, ii --);//up and left
 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;
 }
 
}
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
sin imagen de perfil
Val: 978
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda con programa connecta 4, para un jugador modo facil, c++

Publicado por agustin (522 intervenciones) el 28/11/2016 07:48:03
Has probado a tracearlo en el depurador para ver donde falla?
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