Jogo Da Velha
Jogo Da Velha
1 int main ()
2 {
3 char Tela [ 3 ] [ 3 ] ;
4 .
5 .
6 .
7 }
Ao iniciar cada partida, é necessário que marquemos as células da nossa matriz como ”disponíveis”.
Podemos fazer isso inicializando com ”espaços em branco”, ou com ”NULL” em todas as células.
1
Aplicações para Web II
Prof. Marcelo C. Mussel
1.2 Dados dos participantes
Para cada partida, será necessário armazenar o nome de cada jogador e o símbolo ”X” ou ”O”. O
primeiro jogador terá a possibilidade de escolher qual símbolo irá utilizar. Ao segundo, caberá o outro
símbolo disponível.
1 int main ()
2 {
3 char Tela [3][3] , simJ1 , simbJ2 ;
4 string nomeJ1 , nomeJ2 ;
5
6 ...
7 // r e c e b e n d o os dados
8
25 }
1 int main ()
2 {
3 char Tela [3][3] , simbJ1 , simbJ2 ;
4 // Matriz do jogo , e s í m b o l o de cada j o g a d o r
5 string nomeJ1 , nomeJ2 ;
6 // Nome de cada j o g a d o r
7 int i , j , j o g a d a s;
8 // i e j serão u t i l i z a d a s para que o j o g a d o r i n f o r m e a p o s i ç ã o que
irá jogar
9 // j o g a d a s s e r v i r á para contar cada lance dado
10 bool J1 , J2 ;
11 // a r a m a z e n a r se o j o g a d o r venceu ou não - true ou false
12 char c o n t i n u a;
13 // a r m a z e n a r á se d e s e j a m jogar outra p a r t i d a
14
15 ...
16 }
2
Aplicações para Web II
Prof. Marcelo C. Mussel
1.4 Loop principal
Após a declaração das variáveis, criaremos o loop principal, que verificará se os participantes dese-
jam jogar novamente ou não:
1 int main ()
2 {
3 ...
4
5 do {
6 system ( " clear " ) ; // Limpa a tela
7 // r e c e b e n d o os dados
8
1 int main ()
2 {
3 ...
4 do {
5 ...
6 } while ( j o g a d a s < 9) ;
7 }
ou seja, este bloco irá repetir enquanto ”jogadas” não atingir o limite (menor que 9) e jogador1 não
vencer (false) e jogador2 não vencer.
3
Aplicações para Web II
Prof. Marcelo C. Mussel
1.6 Verificando se um dos jogadores venceu
Enquanto não forem realizadas pelo menos 5 jogadas (3a jogada do primeiro jogador), ninguém
poderá ter vencido.
Como a lógica para verificar se um ou outro já venceu a partida é a mesma, a função que será criada
para essa finalidade, deverá receber os seguintes parâmetros: 1) A matriz; 2) O símbolo do jogador a
ser verificado; 3) A linha a ser verificada; 4) A coluna a ser verificada.
A cada jogada, não é necessário que verifiquemos todas as linhas e todas as colunas. Apenas a
linha e a coluna em que essa jogada foi realizada!:
4
Aplicações para Web II
Prof. Marcelo C. Mussel
1.7 Completando o loop de cada partida
Com a função de verificação do vencedor criada, o loop de cada partida ficará assim:
1 int main ()
2 {
3 ... // após o i n i c i a l i z a r( Tela ) ;
4 do {
5
6 d e s e n h a M a t r i z ( Tela ) ;
7
8 do {
9 cout << nomeJ1 << " , faça sua jogada i n f o r m a n d o linha e coluna : " ;
10 cin >> i >> j ;
11 } while ( Tela [ i ][ j ] != NULL ) ; // v e r i f i c a se a célula está d i s p o n í v e l
12
13 Tela [ i ][ j ] = simbJ1 ;
14
15 j o g a d a s ++;
16
17 d e s e n h a M a t r i z ( Tela ) ;
18
19 if ( j o g a d a s >= 5) {
20 J1 = v e r i f i c a V e n c e d o r ( Tela , simbJ1 , i , j ) ;
21 if ( J1 )
22 break ; // o loop é i n t e r r o m p i d o se o p r i m e i r o jog venceu
23 }
24
34 j o g a d a s ++;
35
36 d e s e n h a M a t r i z ( Tela ) ;
37
38 if ( j o g a d a s >= 5) {
39 J2 = v e r i f i c a V e n c e d o r ( Tela , simbJ2 , i , j ) ;
40 if ( J2 )
41 break ; // o loop é i n t e r r o m p i d o se o s e g u n d o jog venceu
42 }
43 }
44 } while ( j o g a d a s < 9) ;
45 }
5
Aplicações para Web II
Prof. Marcelo C. Mussel
Quando o programa sair desse loop, precisamos verificar o resultado da partida:
1 int main ()
2 {
3 ...
4 do {
5 ...
6 } while (( j o g a d a s < 9) && (! J1 ) && (! J2 ) ) ;
7 if ( J1 ) {
8 cout << nomeJ1 << " venceu !!!!! ";
9 } else if ( J2 ) {
10 cout << nomeJ2 << " venceu !!!! ";
11 } else {
12 cout << " E m p a t o u !!!! ";
13 }
14 }
2 Código completo
1 # i n c l u d e < iostream >
2
3 using n a m e s p a c e std ;
4
6
Aplicações para Web II
Prof. Marcelo C. Mussel
40 // v e r i f i c a n d o a coluna
41 cont = 0;
42 for( int k = 0; k < 3; k ++)
43 {
44 if ( M [ k ][ coluna ] == jog )
45 {
46 cont ++;
47 }
48 }
49 if ( cont == 3)
50 {
51 return true ;
52 }
53 // d i a g o n a l p r i n c i p a l
54 if ( linha == coluna ) // a jogada foi feita nessa d i a g o n a l
55 {
56 cont = 0;
57 for ( int k = 0; k < 3; k ++)
58 {
59 if ( M [ k ][ k ] == jog )
60 {
61 cont ++;
62 }
63 }
64 if ( cont == 3)
65 return true ;
66 }
67 // d i a g o n a l s e c u n d a r i a
68 if ( linha + coluna == 2) // a jogada foi feita nessa d i a g o n a l
69 {
70 cont = 0;
71 for ( int k = 0; k < 3; k ++)
72 {
73 for ( int m = 0; m < 3; m ++)
74 {
75 if (( k + m == 2) && ( M [ k ][ m ] == jog ) )
76 {
77 cont ++;
78 }
79 }
80 }
81 if ( cont == 3)
82 return true ;
83 }
84 return false ;
85 };
86
87 int main ()
88 {
89 char Tela [3][3] , simbJ1 , simbJ2 ;
90 // Matriz do jogo , e s í m b o l o de cada j o g a d o r
91 string nomeJ1 , nomeJ2 ;
92 // Nome de cada j o g a d o r
93 int i , j , j o g a d a s;
94 // i e j serão u t i l i z a d a s para que o j o g a d o r i n f o r m e a p o s i ç ã o que irá
jogar
95 // j o g a d a s s e r v i r á para contar cada lance dado
96 bool J1 , J2 ;
97 // a r a m a z e n a r se o j o g a d o r venceu ou não - true ou false
98 char c o n t i n u a;
99 // a r m a z e n a r á se d e s e j a m jogar outra p a r t i d a
7
Aplicações para Web II
Prof. Marcelo C. Mussel
100
101 do
102 {
103 system ( " clear " ) ; // Limpa a tela
104 // r e c e b e n d o os dados
105
130 do
131 {
132 d e s e n h a M a t r i z ( Tela ) ;
133
134 do
135 {
136 cout << nomeJ1 << " , faça sua jogada i n f o r m a n d o linha e
coluna : " ;
137 cin >> i >> j ;
138 }
139 while ( Tela [ i ][ j ] != NULL ) ; // v e r i f i c a se a célula está
disponível
140
147 if ( j o g a d a s >= 5)
148 {
149 J1 = v e r i f i c a V e n c e d o r ( Tela , simbJ1 , i , j ) ;
150 if ( J1 )
151 break ; // o loop é i n t e r r o m p i d o se o p r i m e i r o jog venceu
152 }
153
157
158
8
Aplicações para Web II
Prof. Marcelo C. Mussel
159 do
160 {
161 cout << nomeJ2 << " , faça sua jogada i n f o r m a n d o linha e
coluna : " ;
162 cin >> i >> j ;
163 }
164 while ( Tela [ i ][ j ] != NULL ) ; // v e r i f i c a se a célula está
disponível
165
168 j o g a d a s ++;
169
170 d e s e n h a M a t r i z ( Tela ) ;
171
172 if ( j o g a d a s >= 5)
173 {
174 J2 = v e r i f i c a V e n c e d o r ( Tela , simbJ2 , i , j ) ;
175 if ( J2 )
176 break ; // o loop é i n t e r r o m p i d o se o s e g u n d o jog
venceu
177 }
178 }
179 }
180 while ( j o g a d a s < 9) ;
181 if ( J1 )
182 cout << nomeJ1 << " venceu !!!!! ";
183 else if ( J2 )
184 cout << nomeJ2 << " venceu !!!! ";
185 else
186 cout << " E m p a t o u !!!! ";
187