elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ayuda con programa connecta 4, para un jugador modo facil, c++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ayuda con programa connecta 4, para un jugador modo facil, c++  (Leído 2,515 veces)
Abril7

Desconectado Desconectado

Mensajes: 22


Ver Perfil
ayuda con programa connecta 4, para un jugador modo facil, c++
« en: 27 Noviembre 2016, 23:38 pm »

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

Código
  1. #ifndef JUGADORFACIL_H
  2. #define JUGADORFACIL_H
  3. #include <iostream>
  4. #include <cstdlib>
  5. #include <conio.h>
  6. #include <ctime>
  7. #include <string.h>
  8.  
  9. using namespace std;
  10.  
  11.  
  12. class JugadorFacil
  13. {
  14.    private:
  15.        char tablero[6][7];
  16.    public:
  17.        JugadorFacil();
  18.        int ejecutar();
  19.        bool revisar(int a, int b);
  20.        void mostrar();
  21.        int fichas(int b, char jugador);
  22. };
  23.  
  24. #include "JugadorFacil.h"
  25.  
  26. JugadorFacil::JugadorFacil()
  27. {
  28.    //ctor
  29. }
  30. int JugadorFacil::ejecutar()
  31. {
  32. for(int a =0;a <= 5; a++){
  33. for(int b = 0; b<=6; b++)
  34. tablero[a][b] = ' ';
  35. }
  36. //Pongo el =' ' para dejar los espacios en blanco en el tablero
  37.  
  38. mostrar();
  39. int ficha;//Will house user row choice
  40. int ficha2 = 0;//will hold drop value
  41. int fichasPuestas = 0;//Number of peices dropped so can end game if a draw
  42. bool juegoTerminado = false;//Will be changed to true when game is won and will exit while loop
  43. char jugador = 15;//start as player 2 will change back 2 player 1
  44. while(!juegoTerminado){//will stop when game is won, ! means NOT makes the oppisite be checked
  45. if(ficha2 != -1){//check if there was a error in the last drop
  46. if(jugador == 15){//if player 2 lasted dropped a piece so its player 1s turn
  47. cout<<"Jugador 1: Donde quieres poner tu ficha?";
  48. jugador = 254;//char of players piece
  49. }
  50. else{
  51. cout<<"Jugador 2: Donde quieres poner tu ficha?";
  52. jugador = 15;//char of player piece
  53. }
  54. }
  55. while(true){//will run untill 'break;'
  56. if(fichasPuestas == 42) break;//if draw
  57.            cin>>ficha;//get user input
  58. ficha--;//take off 1 to account for arrays starting at 0 not 1
  59. if(ficha <=6 && ficha>= 0) break;//if within valid range stop loop
  60. else cout<< "\nPor favor, ingresa un valor entre 1 y 7 :";//ask for input and loop again
  61. if (cin.fail()) //catch a non number
  62. { //
  63. cin.clear(); //Stops cin trying to put its value in to hold
  64. char c; //Try entering a non number without this, 2 see what this does
  65. cin>>c; //
  66. } //Catch a non number
  67.  
  68. }
  69. if(fichasPuestas == 42) break;//if draw
  70. ficha2 = fichas(ficha,jugador);//drop the player store the row in hold2
  71. if(ficha2 == -1) cout<<"La columna esta llena...\nPorfavor ingresa otro numero entre 1 y 7:";//if error -1 row is full
  72. else{
  73. juegoTerminado = revisar(ficha2,ficha);//check if game is run
  74. fichasPuestas ++;//another character has been succesfully placed
  75. system("cls");//This clears the screen works with windows, not nesscery to run game
  76. mostrar();//displayed updated board
  77. }
  78. }
  79. system("cls");//this clears the screen
  80. if(fichasPuestas == 42){//if draw
  81. cout<<"No hay ganador!\n";
  82. system("pause");
  83. return 0;
  84. }
  85. if(jugador == 15)//if won by player 2
  86. cout<<"El jugador 2 gano!!!\n";
  87. else cout<<"El jugador 1 gano!!!\n";//Else won by player 1
  88. system("pause");//pauses before exit so players can see who won, works with windows
  89. return 0;//Exit application
  90. }
  91. void JugadorFacil::mostrar() // Draw board
  92. {
  93. cout<<" 1   2   3   4   5   6   7\n";
  94. for(int a = 0; a<= 5; a++)
  95. {
  96. for(int b =0; b <= 6; b++) cout<<char(218)<<char(196)<<char(191)<<" ";
  97. cout<<'\n';
  98. for(int b =0; b <= 6; b++) cout<<char(179)<<tablero[a][b]<<char(179)<<" ";
  99. cout<<'\n';
  100. for(int b =0; b <= 6; b++) cout<<char(192)<<char(196)<<char(217)<<" ";
  101. cout<<'\n';
  102. }
  103.  
  104. }
  105. bool JugadorFacil::revisar(int a, int b)
  106. {
  107. int vertical = 1;
  108. int horizontal = 1;
  109. int diagonal1 = 1;
  110. int diagonal2 = 1;
  111. char jugador = tablero[a][b];
  112. int i; //vertical
  113. int ii;//horizontal
  114.  
  115. //revisando verticales
  116. for(i = a +1;tablero[i][b] == jugador && i <= 5;i++,vertical++);//Check down
  117. for(i = a -1;tablero[i][b] == jugador && i >= 0;i--,vertical++);//Check up
  118. if(vertical >= 4)return true;
  119. //revisando horizontales
  120. for(ii = b -1;tablero[a][ii] == jugador && ii >= 0;ii--,horizontal++);//Check left
  121. for(ii = b +1;tablero[a][ii] == jugador && ii <= 6;ii++,horizontal++);//Check right
  122. if(horizontal >= 4) return true;
  123. //revisando diagonal 1
  124. for(i = a -1, ii= b -1;tablero[i][ii] == jugador && i>=0 && ii >=0; diagonal1 ++, i --, ii --);//up and left
  125. for(i = a +1, ii = b+1;tablero[i][ii] == jugador && i<=5 && ii <=6;diagonal1 ++, i ++, ii ++);//down and right
  126. if(diagonal1 >= 4) return true;
  127. //revisando diagonal 2
  128. for(i = a -1, ii= b +1;tablero[i][ii] == jugador && i>=0 && ii <= 6; diagonal2 ++, i --, ii ++);//up and right
  129. for(i = a +1, ii= b -1;tablero[i][ii] == jugador && i<=5 && ii >=0; diagonal2 ++, i ++, ii --);//up and left
  130. if(diagonal2 >= 4) return true;
  131. return false;
  132. }
  133. int JugadorFacil::fichas(int b, char jugador)
  134. {
  135. if(b >=0 && b<= 6)
  136. {
  137. if(tablero[0][b] == ' '){
  138. int i;
  139. for(i = 0;tablero[i][b] == ' ';i++)
  140. if(i == 5)
  141.                    {tablero[i][b] = jugador;
  142.                    return i;}
  143. i--;
  144. tablero[i][b] =jugador;
  145. return i;
  146.  
  147. }
  148. else{
  149. return -1;
  150. }
  151.  
  152. }
  153. else{
  154. return -1;
  155. }
  156.  
  157. }


GRACIAS


« Última modificación: 27 Noviembre 2016, 23:53 pm por engel lex » En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: ayuda con programa connecta 4, para un jugador modo facil, c++
« Respuesta #1 en: 27 Noviembre 2016, 23:58 pm »

te recomiendo que hagas un metodo

Código
  1. int jugar(jugador, posición)

tal que simplemente si pasas 0 sabes que es el jugador 0 si pasas 1 es el otro jugador, posición es donde inserta la ficha y esta funcion retorne un int, 0  = ok, 1 = lugar de ficha invalido, 2 = ganaste, 3 = tablas. o algo así... de esa manera separas el juego del bot... en el main controlas con eso quien juega tal que cada vez que el jugador juegue, juega el bot luego y solo tienes que escojer un numero y decirle que jugó... y bueno las repeticiones segun el resultado de jugar


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines