0% acharam este documento útil (0 voto)
11 visualizações9 páginas

Jogo Da Velha

O documento descreve o desenvolvimento do jogo da velha em C++, detalhando a construção da interface, a inicialização da matriz, a coleta de dados dos jogadores e a lógica para verificar o vencedor. Inclui funções para desenhar a matriz, verificar se um jogador venceu e gerenciar o loop principal do jogo. O código completo é apresentado, mostrando a implementação das funcionalidades discutidas.

Enviado por

deboracbazara
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
11 visualizações9 páginas

Jogo Da Velha

O documento descreve o desenvolvimento do jogo da velha em C++, detalhando a construção da interface, a inicialização da matriz, a coleta de dados dos jogadores e a lógica para verificar o vencedor. Inclui funções para desenhar a matriz, verificar se um jogador venceu e gerenciar o loop principal do jogo. O código completo é apresentado, mostrando a implementação das funcionalidades discutidas.

Enviado por

deboracbazara
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 9

Aplicações para Web II

Prof. Marcelo C. Mussel


1 Construindo o Jogo da Velha - passo à passo
Para facilitar o desenvolvimento desse jogo, iremos mapear as funcionalidades necessárias, e desenvolvê-
las através de funções específicas, para cada parte do projeto.

1.1 A interface do jogo - Matriz


A interface do nosso jogo, será constituida por uma matriz de caracteres de dimensões 3x3. No int
main() faremos a declaração:

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.1.1 Função para inicializar a matriz

1 void i n i c i a l i z a r( char M [][3]) {


2 for ( int i = 0; i < 3; i ++)
3 for ( int j = 0; j < 3; j ++)
4 M [ i ][ j ] = NULL ;
5 };

1.1.2 Função para apresentar a matriz na tela


No inicio da partida, e após cada lance de um dos jogadores, precisamos exibir a matriz na tela.

1 void d e s e n h a M a t r i z ( char M [][3]) {


2 system ( " clear " ) ;
3 cout << " - - - - - - - - - - - - - - - - - - - - -" << endl ;
4 for ( int i = 0; i < 3; i ++) {
5 for ( int j = 0; j < 3; j ++) {
6 cout << " | " << M [ i ][ j ] << " |";
7 }
8 cout << endl << " - - - - - - - - - - - - - - - - - - - - -" << endl ;
9 }
10 };

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

9 cout << " J o g a d o r 1 , digite seu nome : " ;


10 cin >> nomeJ1 ;
11 // g a r a n t i n d o que o p r i m e i r o j o g a d o r e s c o l h e r á
12 // apenas X ou O
13 do {
14 cout << " E s c o l h a: X ou O : ";
15 cin >> simbJ1 ;
16 } while ( simbJ1 != ’X ’ && simbJ1 != ’O ’) ;
17
18 cout << " J o g a d o r 2 , digite seu nome : " ;
19 cin >> nomeJ2 ;
20 if ( simbJ1 == ’X ’)
21 simbJ2 = ’O ’;
22 else
23 simbJ2 = ’X ’;
24

25 }

1.3 Demais variáveis necessárias


Existem 3 possibilidades para uma partida terminar: Jogador 1 - venceu; Jogador 2 venceu ou
Empatou. Para isso, criaremos 3 variáveis: 2 booleanas → Uma para cada jogador, que armazenará se
ele venceu ou não. 1 do tipo int, onde contaremos cada jogada. (máximo de 9).

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

9 cout << " J o g a d o r 1 , digite seu nome : ";


10 cin >> nomeJ1 ;
11 // g a r a n t i n d o que o p r i m e i r o j o g a d o r e s c o l h e r á
12 // apenas X ou O
13 do {
14 cout << " E s c o l h a: X ou O : ";
15 cin >> simbJ1 ;
16 } while ( simbJ1 != ’X ’ && simbJ1 != ’O ’) ;
17

18 cout << " J o g a d o r 2 , digite seu nome : ";


19 cin >> nomeJ2 ;
20 if ( simbJ1 == ’X ’)
21 simbJ2 = ’O ’;
22 else
23 simbJ2 = ’X ’;
24

25 j o g a d a s = 0; // c o n t a d o r para v e r i f i c a r se deu empate


26 J1 = false ; // a r m a z e n a se j o g a d o r 1 venceu
27 J2 = false ; // a r m a z e n a se j o g a d o r 2 venceu
28
29 i n i c i a l i z a r( Tela ) ; // p r e p a r a a matriz
30

31 ..... // aqui e n t r a r á o loop de cada p a r t i d a


32

33 cout << " Vocês d e s e j a m jogar n o v a m e n t e: ( s ou n ) : ";


34 cin >> c o n t i n u a;
35 } while ( c o n t i n u a == ’s ’ || c o n t i n u a == ’S ’) ;
36
37 }

1.5 Loop de cada partida


Como dissemos anteriormente, uma partida pode terminar de 3 formas. o Loop irá verificar se
o máximo de jogadas foi atingido. A cada jogada, será verificado se aquele jogador venceu. Caso
afirmativo, o loop será interrompido.

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!:

1 bool v e r i f i c a V e n c e d o r ( char M [3][3] , char jog , int linha , int coluna ) {


2 // v e r i f i c a n d o a linha
3 int cont = 0;
4 for ( int k = 0; k < 3; k ++) {
5 if ( M [ linha ][ k ] == jog ) {
6 cont ++;
7 }
8 }
9 if ( cont == 3) {
10 return true ;
11 }
12 // v e r i f i c a n d o a coluna
13 cont = 0;
14 for ( int k = 0; k < 3; k ++) {
15 if ( M [ k ][ coluna ] == jog ) {
16 cont ++;
17 }
18 }
19 if ( cont == 3) {
20 return true ;
21 }
22 // d i a g o n a l p r i n c i p a l
23 if ( linha == coluna ) { // a jogada foi feita nessa d i a g o n a l
24 cont = 0;
25 for ( int k = 0; k < 3; k ++) {
26 if ( M [ k ][ k ] == jog ) {
27 cont ++;
28 }
29 }
30 if ( cont == 3)
31 return true ;
32 }
33 // d i a g o n a l s e c u n d a r i a
34 if ( linha + coluna == 2) { // a jogada foi feita nessa d i a g o n a l
35 cont = 0;
36 for ( int k = 0; k < 3; k ++) {
37 for( int m = 0; m < 3; m ++) {
38 if (( k + m == 2) && ( M [ k ][ m ] == jog ) ) {
39 cont ++;
40 }
41 }
42 }
43 if ( cont == 3)
44 return true ;
45 }
46 return false ;
47 };

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

25 if ( j o g a d a s < 9) { // quant . é impar . J1 terá uma jogada a mais


26
27 do {
28 cout << nomeJ2 << " , faça sua jogada i n f o r m a n d o linha e coluna : ";
29 cin >> i >> j ;
30 } 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
31
32 Tela [ i ][ j ] = simbJ2 ;
33

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

5 void i n i c i a l i z a r( char M [][3])


6 {
7 for( int i = 0; i < 3; i ++)
8 for ( int j = 0; j < 3; j ++)
9 M [ i ][ j ] = NULL ;
10 };
11

12 void d e s e n h a M a t r i z ( char M [][3])


13 {
14 system ( " clear " ) ;
15 cout << " - - - - - - - - - - - - - - - - - - - - -" << endl ;
16 for( int i = 0; i < 3; i ++)
17 {
18 for ( int j = 0; j < 3; j ++)
19 {
20 cout << " | " << M [ i ][ j ] << " |";
21 }
22 cout << endl << " - - - - - - - - - - - - - - - - - - - - -" << endl ;
23 }
24 };
25 bool v e r i f i c a V e n c e d o r ( char M [][3] , char jog , int linha , int coluna )
26 {
27 // v e r i f i c a n d o a linha
28 int cont = 0;
29 for( int k = 0; k < 3; k ++)
30 {
31 if ( M [ linha ][ k ] == jog )
32 {
33 cont ++;
34 }
35 }
36 if ( cont == 3)
37 {
38 return true ;
39 }

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

106 cout << " J o g a d o r 1 , digite seu nome : ";


107 cin >> nomeJ1 ;
108 // g a r a n t i n d o que o p r i m e i r o j o g a d o r e s c o l h e r á
109 // apenas X ou O
110 do
111 {
112 cout << " E s c o l h a: X ou O : ";
113 cin >> simbJ1 ;
114 }
115 while ( simbJ1 != ’X ’ && simbJ1 != ’O ’) ;
116

117 cout << " J o g a d o r 2 , digite seu nome : ";


118 cin >> nomeJ2 ;
119 if ( simbJ1 == ’X ’)
120 simbJ2 = ’O ’;
121 else
122 simbJ2 = ’X ’;
123

124 j o g a d a s = 0; // c o n t a d o r para v e r i f i c a r se deu empate


125 J1 = false ; // a r m a z e n a se j o g a d o r 1 venceu
126 J2 = false ; // a r m a z e n a se j o g a d o r 2 venceu
127

128 i n i c i a l i z a r( Tela ) ; // p r e p a r a a matriz


129

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

141 Tela [ i ][ j ] = simbJ1 ;


142
143 j o g a d a s ++;
144
145 d e s e n h a M a t r i z ( Tela ) ;
146

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

154 if ( j o g a d a s < 9) // quant . é impar . J1 terá uma jogada a mais


155 {
156

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

166 Tela [ i ][ j ] = simbJ2 ;


167

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

188 cout << " \ nVocês d e s e j a m jogar n o v a m e n t e: ( s ou n ) : ";


189 cin >> c o n t i n u a;
190 }
191 while ( c o n t i n u a == ’s ’ || c o n t i n u a == ’S ’) ;
192
193 return 0;
194 }

Você também pode gostar

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy