├── Apostila_CCpp.pdf ├── README.md └── desafio_final.cpp /Apostila_CCpp.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/cs-ufrn/minicurso_CCpp/master/Apostila_CCpp.pdf -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Minicurso de C/C++ 2 | Repositório público com os arquivos referentes ao minicuso de C/C++. 3 | -------------------------------------------------------------------------------- /desafio_final.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | using namespace std::this_thread; // sleep_for, sleep_until 9 | using namespace std::chrono; // nanoseconds, system_clock, seconds 10 | 11 | bool checa_num(string str); 12 | void dupla_escolha(void); 13 | char X_ou_O(int jogador_da_vez); 14 | bool altera_matriz_jogo(int escolha_jogador, int vez_jogador, char matriz_jogo[][3]); 15 | int verifica_vencedor(char matriz_jogo[][3]); 16 | void mostra_matriz(char matriz_jogo[][3]); 17 | void vencedor_ou_velha(int vencedor); 18 | 19 | int main() { 20 | int vencedor = 0; 21 | char matriz_jogo[3][3] = {{'1', '2', '3'}, 22 | {'4', '5', '6'}, 23 | {'7', '8', '9'}}; 24 | 25 | while(vencedor == 0){ 26 | int vez_jogador = 0; 27 | int escolha_jogador = 0; 28 | string aux_str; 29 | 30 | for(int i=1; i < 3; i++){ 31 | vez_jogador = i; 32 | 33 | cout << "=====================================" << endl; 34 | cout << " NOTA: " << endl; 35 | cout << " Jogador 1 = X " << endl; 36 | cout << " Jogador 2 = O " << endl; 37 | cout << "=====================================" << endl; 38 | 39 | cout << endl; //pula uma linha 40 | 41 | cout << "Vez do jogador " << vez_jogador << endl; 42 | cout << "Escolha onde quer jogar: " << endl; 43 | 44 | mostra_matriz(matriz_jogo); 45 | 46 | cin >> aux_str; 47 | 48 | if(checa_num(aux_str)){ //checa se a escolha é um número válido 49 | stringstream(aux_str) >> escolha_jogador; 50 | } 51 | else{ 52 | escolha_jogador = 0; 53 | } 54 | 55 | if(!altera_matriz_jogo(escolha_jogador, vez_jogador, matriz_jogo)){ //checa se a escolha foi errada 56 | i--; //retorna a vez do jogador 57 | }; 58 | 59 | vencedor = verifica_vencedor(matriz_jogo); 60 | if(vencedor != 0){ //checa se há vencedor 61 | break; //quebra o laço for no caso do jogador 1 ser campeão ou der velha 62 | } 63 | 64 | } 65 | } 66 | 67 | vencedor_ou_velha(vencedor); //Imprime quem venceu ou se deu velha 68 | 69 | mostra_matriz(matriz_jogo); 70 | 71 | return 0; //termina o código principal retornando 0. 72 | } 73 | 74 | bool checa_num(string str){ //checa se a string possui apenas números 75 | for (int i = 0; i < str.length(); i++){ 76 | if (isdigit(str[i]) == false){ 77 | return false; 78 | } 79 | } 80 | return true; 81 | } 82 | 83 | void dupla_escolha(void){ //imprime mensagens para o jogador q escolher uma casa já escolhida previamente 84 | cout << "ERRO: O número escolhido já foi escolhido anteriormente por você ou por outro jogador." << endl; 85 | cout << "Tente novamente." << endl; 86 | sleep_for(seconds(3)); //congela o prompt por 3 segundos 87 | } 88 | 89 | char X_ou_O(int jogador_da_vez){ //retorna o símbolo pra cada jogador 90 | if(jogador_da_vez == 1){ 91 | return 'X'; 92 | } 93 | else{ 94 | return 'O'; 95 | } 96 | } 97 | 98 | void mostra_matriz(char matriz_jogo[][3]){ //imprime a matriz_jogo em forma de tabuleiro 99 | 100 | cout << endl;//pula uma linha 101 | 102 | for(int j=0; j < 3; j++){ 103 | cout << " " << matriz_jogo[j][0] << " | " << matriz_jogo[j][1] << " | " << matriz_jogo[j][2] << endl; 104 | 105 | if(j != 2){ 106 | cout << " ----------" << endl; 107 | } 108 | } 109 | cout << endl;//pula uma linha 110 | } 111 | 112 | bool altera_matriz_jogo(int escolha_jogador, int vez_jogador, char matriz_jogo[][3]){ //altera a matriz de acordo com a escolha 113 | //do jogador 114 | 115 | if(escolha_jogador == 1){ 116 | if(matriz_jogo[0][0] != 'X' && matriz_jogo[0][0] != 'O'){ 117 | 118 | matriz_jogo[0][0] = X_ou_O(vez_jogador); 119 | 120 | return true; 121 | } 122 | else{ 123 | dupla_escolha(); 124 | return false; 125 | } 126 | } 127 | else if(escolha_jogador == 2){ 128 | if(matriz_jogo[0][1] != 'X' && matriz_jogo[0][1] != 'O'){ 129 | 130 | matriz_jogo[0][1] = X_ou_O(vez_jogador); 131 | 132 | return true; 133 | } 134 | else{ 135 | dupla_escolha(); 136 | return false; 137 | } 138 | } 139 | else if(escolha_jogador == 3){ 140 | if(matriz_jogo[0][2] != 'X' && matriz_jogo[0][2] != 'O'){ 141 | 142 | matriz_jogo[0][2] = X_ou_O(vez_jogador); 143 | 144 | return true; 145 | } 146 | else{ 147 | dupla_escolha(); 148 | return false; 149 | } 150 | } 151 | else if(escolha_jogador == 4){ 152 | if(matriz_jogo[1][0] != 'X' && matriz_jogo[1][0] != 'O'){ 153 | 154 | matriz_jogo[1][0] = X_ou_O(vez_jogador); 155 | return true; 156 | } 157 | else{ 158 | dupla_escolha(); 159 | return false; 160 | } 161 | } 162 | else if(escolha_jogador == 5){ 163 | if(matriz_jogo[1][1] != 'X' && matriz_jogo[1][1] != 'O'){ 164 | 165 | matriz_jogo[1][1] = X_ou_O(vez_jogador); 166 | 167 | return true; 168 | } 169 | else{ 170 | dupla_escolha(); 171 | return false; 172 | } 173 | 174 | } 175 | else if(escolha_jogador == 6){ 176 | if(matriz_jogo[1][2] != 'X' && matriz_jogo[1][2] != 'O'){ 177 | 178 | matriz_jogo[1][2] = X_ou_O(vez_jogador); 179 | 180 | return true; 181 | } 182 | else{ 183 | dupla_escolha(); 184 | return false; 185 | } 186 | } 187 | else if(escolha_jogador == 7){ 188 | if(matriz_jogo[2][0] != 'X' && matriz_jogo[2][0] != 'O'){ 189 | 190 | matriz_jogo[2][0] = X_ou_O(vez_jogador); 191 | 192 | return true; 193 | } 194 | else{ 195 | dupla_escolha(); 196 | return false; 197 | } 198 | 199 | } 200 | else if(escolha_jogador == 8){ 201 | if(matriz_jogo[2][1] != 'X' && matriz_jogo[2][1] != 'O'){ 202 | 203 | matriz_jogo[2][1] = X_ou_O(vez_jogador); 204 | 205 | return true; 206 | } 207 | else{ 208 | dupla_escolha(); 209 | return false; 210 | } 211 | 212 | } 213 | else if(escolha_jogador == 9){ 214 | if(matriz_jogo[2][2] != 'X' && matriz_jogo[2][2] != 'O'){ 215 | 216 | matriz_jogo[2][2] = X_ou_O(vez_jogador); 217 | 218 | return true; 219 | } 220 | else{ 221 | dupla_escolha(); 222 | return false; 223 | } 224 | } 225 | else{ //imprime mensagem de erro 226 | cout << "ERRO: O valor indicado não é válido, informe outro valor de acordo com os números disponíveis no tabuleiro." << endl; 227 | sleep_for(seconds(3)); 228 | 229 | return false; 230 | } 231 | } 232 | 233 | int verifica_vencedor(char matriz_jogo[][3]){ //Retorna o vencedor, caso exista, o empate (como 3) ou 0 para continuar o jogo 234 | 235 | //Verifica se existem colunas iguais 236 | for(int col = 0; col < 3; col++){ 237 | if(matriz_jogo[0][col] == matriz_jogo[1][col] && matriz_jogo[1][col] == matriz_jogo[2][col]){ 238 | if(matriz_jogo[0][col] == 'X'){ 239 | return 1; 240 | } 241 | else{ 242 | return 2; 243 | } 244 | } 245 | } 246 | 247 | //Verifica se existem colunas iguais 248 | for(int lin = 0; lin < 3; lin++){ 249 | if(matriz_jogo[lin][0] == matriz_jogo[lin][1] && matriz_jogo[lin][1] == matriz_jogo[lin][2]){ 250 | if(matriz_jogo[lin][0] == 'X'){ 251 | return 1; 252 | } 253 | else{ 254 | return 2; 255 | } 256 | } 257 | } 258 | //Verifica se a diagonal direita (\) tem elementos iguais 259 | if(matriz_jogo[0][0] == matriz_jogo[1][1] && matriz_jogo[1][1] == matriz_jogo[2][2]){ 260 | if(matriz_jogo[0][0] == 'X'){ 261 | return 1; 262 | } 263 | else{ 264 | return 2; 265 | } 266 | } 267 | 268 | //Verifica se a diagonal esquerda (/) tem elementos iguais 269 | else if(matriz_jogo[0][2] == matriz_jogo[1][1] && matriz_jogo[1][1] == matriz_jogo[2][0]){ 270 | if(matriz_jogo[0][2] == 'X'){ 271 | return 1; 272 | } 273 | else{ 274 | return 2; 275 | } 276 | } 277 | 278 | else if((matriz_jogo[0][0] == 'X' || matriz_jogo[0][0] == 'O') && 279 | (matriz_jogo[0][1] == 'X' || matriz_jogo[0][1] == 'O') && 280 | (matriz_jogo[0][2] == 'X' || matriz_jogo[0][2] == 'O') && 281 | (matriz_jogo[1][0] == 'X' || matriz_jogo[1][0] == 'O') && 282 | (matriz_jogo[1][1] == 'X' || matriz_jogo[1][1] == 'O') && 283 | (matriz_jogo[1][2] == 'X' || matriz_jogo[1][2] == 'O') && 284 | (matriz_jogo[2][0] == 'X' || matriz_jogo[2][0] == 'O') && 285 | (matriz_jogo[2][1] == 'X' || matriz_jogo[2][1] == 'O') && 286 | (matriz_jogo[2][2] == 'X' || matriz_jogo[2][2] == 'O')){ 287 | return 3; 288 | } 289 | 290 | else{ //Se não houver vencedores retorna 0 291 | return 0; 292 | } 293 | 294 | } 295 | 296 | void vencedor_ou_velha(int vencedor){ //Imprime o vencedor ou a mensagem de empate 297 | if(vencedor == 3){ 298 | cout << '\n' << endl; //pula duas linhas 299 | cout << "=====================================" << endl; 300 | cout << " Deu velha! " << endl; 301 | cout << "=====================================" << endl; 302 | } 303 | else{ 304 | cout << '\n' << endl; //pula duas linhas 305 | cout << "=====================================" << endl; 306 | cout << " Jogador " << vencedor << " venceu! " << endl; 307 | cout << "=====================================" << endl; 308 | } 309 | } 310 | --------------------------------------------------------------------------------