Dev - C++ - ayuda programa de ta-te-ti C++ do while

 
Vista:
sin imagen de perfil
Val: 10
Ha disminuido su posición en 13 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda programa de ta-te-ti C++ do while

Publicado por Francisco (6 intervenciones) el 05/11/2016 01:57:16
Hola soy francisco y esta es mi segunda pregunta en el foro, estoy en la secundaria este es el segundo año que veo C++ ,tratamos de hacer un programa de ta-te-ti en DEV C++ 5.11 pero el programa se queda en el ciclo repetitivo do while por favor ayudenme a resolverlo de manera simple sin código muy complejo,en el RAR dejo el .cpp y el ejecutable del programa que funciona pero como dije anteriormente no sale del ciclo repetitivo
también tiene ciertos errores pequeños apartes pero de eso me encargo yo solo quiero alguien que me ayude con el ciclo do while
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
#include <stdio.h>
#include<iostream>
using namespace std;
void inicializar_tablero(void);
void mostrar_tablero(void);
void verificar(void);
void contarespaciosvacios(void);
int x_x[99],x_y[99],o_x[99],o_y[99],n,x,y,a,espacios_vacios;
bool x_gano=false,o_gano=false;
char tablero[3][3];
int main(){
inicializar_tablero();
do{
mostrar_tablero();
cout<<"turno de X\n cordenada X:";
cin>>x_x[n];
x_x[n]=x_x[n]-1;
cout<<"Cordenada Y:";
cin>>x_y[n];
x_y[n]=x_y[n]-1;
if (tablero[x_x[n]][x_y[n]]=='_'&&x_x[n]<3&&x_y[n]<3){
	tablero[x_x[n]][x_y[n]]='X';
}
verificar();
mostrar_tablero();
cout<<"\nTurno de O\n cordenada X:";
cin>>o_x[n];
o_x[n]=o_x[n]-1;
cout<<"Cordenada Y:";
cin>>o_y[n];
o_y[n]=o_y[n]-1;
if (tablero[o_x[n]][o_y[n]]=='_'&&o_x[n]<3&&o_y[n]<3){
	tablero[o_x[n]][o_y[n]]='O';
}
verificar();
}while(!x_gano|| !o_gano||espacios_vacios==0);
}
 
 
 void inicializar_tablero(void)
 {
  for (x=0; x < 3; x++) {
	for (y = 0; y < 3; y++) {
		tablero[x][y]='_';
	}
}
}
 
 void mostrar_tablero(void)
{
	system("cls");
for (y = 0; y < 3; y++) {
	for  (x=0; x < 3; x++){
		cout<<tablero[x][y]<<"  ";
	}
		cout<<endl<<endl;
}
}
 
void verificar (void)
{
for(a=0;a<3;a++){
	if (tablero[1][a]==tablero[1][a+1]&&tablero[1][a+1]==tablero[1][a+2])
	{
		if(tablero[1][a]=='X')
		{
			x_gano=true;
			}
			else
			{
				o_gano=true;
				}
	}
}
for(a=0;a<3;a++){
if (tablero[a][1]==tablero[a+1][1]&&tablero[a+1][1]==tablero[a+2][1])
{
	if(tablero[a][1]=='X')
	{
		x_gano=true;
	}
		else
		{
			o_gano=true;
		}
}
}
if (tablero[0][0]==tablero[1][1]&&tablero[1][1]==tablero[2][2])
{
	if(tablero[1][1]=='X')
	{
		x_gano=true;
	}
		else
		{
			o_gano=true;
		}
}
if (tablero[0][3]==tablero[1][1]&&tablero[1][1]==tablero[2][0])
{
	if(tablero[a][1]=='X')
	{
		x_gano=true;
	}
		else{
			o_gano=true;
			}
}
 
 
}
 
void contarespaciosvacios(void){
		espacios_vacios=0;
		for (x=0; x < 8; x++) {
			for (y = 0; y < 8; y++) {
				if(tablero[x][y]=='_')
					espacios_vacios++;
	}
}
}
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: 968
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda programa de ta-te-ti C++ do while

Publicado por agustin (522 intervenciones) el 05/11/2016 11:51:01
He intentado simplificarlo para que lo entiendas pero se sigue pudiendo mejorar mucho:
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
#include<iostream>
 
using std::cout;
using std::cin;
using std::endl;
using std::system;
 
void inicializar_tablero(char tablero[][3]);
void mostrar_tablero(char tablero[][3]);
bool verificar(char tablero[][3], char ficha);
int colocarficha(char tablero[][3],char ficha,int huecos);
 
int main(){
    bool pos=0;
    char ficha;
    char tablero[3][3];
    int nhuecos=9;
    bool gana=false;
    char fichas[]={'X','O'};
 
    inicializar_tablero(tablero);
 
    do{
        ficha = fichas[pos];
        mostrar_tablero(tablero);
        colocarficha(tablero,ficha,nhuecos);
        pos = !pos;
        gana=verificar(tablero,ficha);
    }while(!gana && nhuecos!=0);
 
    if(gana)
        cout<<ficha<<" ha ganado"<<endl;
    else
        cout<<"Huvo tablas"<<endl;
    return 0;
}
 
int colocarficha(char tablero[][3],char ficha,int huecos){
    int x,y;
 
    do{
        cout<<"turno de "<<ficha<<endl<<"Cordenada X:";
        cin>>x;
        cout<<"Cordenada Y:";
        cin>>y;
        if(tablero[x-1][y-1]!='_')
            cout<<"Posicion ocupada, intentelo de nuevo"<<endl;
    }while(x < 1 || x > 3 || y < 1 || y > 3 || tablero[x-1][y-1]!='_');
 
    tablero[x-1][y-1]=ficha;
    huecos--;
    return huecos;
}
 
void inicializar_tablero(char tablero[][3])
{
    for (int x=0; x < 3; x++) {
        for (int y=0; y < 3; y++) {
            tablero[x][y]='_';
        }
    }
}
 
void mostrar_tablero(char tablero[][3])
{
    system("cls");
 
    for (int y = 0; y < 3; y++) {
	    for (int x=0; x < 3; x++){
		    cout<<tablero[x][y]<<"  ";
        }
        cout<<endl<<endl;
    }
}
 
bool verificar (char tablero[][3], char ficha)
{
    bool retval=false;
 
    for(int a=0;a<3;a++){
        if (tablero[0][a] == ficha && tablero[0][a]==tablero[1][a] && tablero[1][a]==tablero[2][a])
        {
            retval=true;
            break;
	    }
    }
 
    for(int a=0;a<3;a++){
        if (tablero[a][0] == ficha && tablero[a][0]==tablero[a][1]&&tablero[a][1]==tablero[a][2])
        {
            retval=true;
            break;
        }
    }
 
    if (tablero[0][0]==ficha && tablero[0][0]==tablero[1][1] && tablero[1][1]==tablero[2][2])
    {
	    retval=true;
    }
 
    if (tablero[0][2]==ficha && tablero[0][2]==tablero[1][1]&&tablero[1][1]==tablero[2][0])
    {
	    retval=true;
    }
    return retval;
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 10
Ha disminuido su posición en 13 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

ayuda programa de ta-te-ti C++ do while

Publicado por Francisco (6 intervenciones) el 05/11/2016 15:16:38
Muchas Gracias por responder pero sin embargo hay partes del código que no me enseñaron
yo siempre hacia parametros de tipo void ejemplo
1
void parametro (void)
y nuca haci
1
bool verificar (char tablero[][3], char ficha)
porque le pones un maximo al segundo vector y no al primero?
1
2
3
4
5
6
7
8
9
10
11
bool verificar (char tablero[][3], char ficha)
{
    bool retval=false;
 
    for(int a=0;a<3;a++){
        if (tablero[0][a] == ficha && tablero[0][a]==tablero[1][a] && tablero[1][a]==tablero[2][a])
        {
            retval=true;
            break;
	    }
    }
Porque el break; si no usas switch?
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