
Um jogo de damas em mbed os
main.cpp@0:e1459cfa4a6a, 2016-12-10 (annotated)
- Committer:
- mayarasi
- Date:
- Sat Dec 10 17:07:22 2016 +0000
- Revision:
- 0:e1459cfa4a6a
enviando
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mayarasi | 0:e1459cfa4a6a | 1 | |
mayarasi | 0:e1459cfa4a6a | 2 | #define MINLINHA 1 |
mayarasi | 0:e1459cfa4a6a | 3 | #define MAXLINHA 8 |
mayarasi | 0:e1459cfa4a6a | 4 | #define MINCOLUNA 1 |
mayarasi | 0:e1459cfa4a6a | 5 | #define MAXCOLUNA 8 |
mayarasi | 0:e1459cfa4a6a | 6 | #define PEDRA_NORMAL_JOGADOR1 '1' |
mayarasi | 0:e1459cfa4a6a | 7 | #define PEDRA_NORMAL_JOGADOR2 '2' |
mayarasi | 0:e1459cfa4a6a | 8 | #define PEDRA_DAMA_JOGADOR1 '3' |
mayarasi | 0:e1459cfa4a6a | 9 | #define PEDRA_DAMA_JOGADOR2 '4' |
mayarasi | 0:e1459cfa4a6a | 10 | #define VAZIO 'S' |
mayarasi | 0:e1459cfa4a6a | 11 | #define JOGADA 'J' |
mayarasi | 0:e1459cfa4a6a | 12 | #define CAPTURADA 'C' |
mayarasi | 0:e1459cfa4a6a | 13 | #define BORDA " " |
mayarasi | 0:e1459cfa4a6a | 14 | |
mayarasi | 0:e1459cfa4a6a | 15 | #define VITORIAS 0 |
mayarasi | 0:e1459cfa4a6a | 16 | #define EMPATES 1 |
mayarasi | 0:e1459cfa4a6a | 17 | #define DERROTAS 2 |
mayarasi | 0:e1459cfa4a6a | 18 | |
mayarasi | 0:e1459cfa4a6a | 19 | #define HUMANO1 '1' |
mayarasi | 0:e1459cfa4a6a | 20 | #define HUMANO2 '2' |
mayarasi | 0:e1459cfa4a6a | 21 | #define MAQUINA1 '3' |
mayarasi | 0:e1459cfa4a6a | 22 | #define MAQUINA2 '4' |
mayarasi | 0:e1459cfa4a6a | 23 | |
mayarasi | 0:e1459cfa4a6a | 24 | #define NOME_HUMANO1 "HUMANO1" |
mayarasi | 0:e1459cfa4a6a | 25 | #define NOME_HUMANO2 "HUMANO2" |
mayarasi | 0:e1459cfa4a6a | 26 | #define NOME_MAQUINA1 "MAQUINA1" |
mayarasi | 0:e1459cfa4a6a | 27 | #define NOME_MAQUINA2 "MAQUINA2" |
mayarasi | 0:e1459cfa4a6a | 28 | #define TAM_NOME 30 |
mayarasi | 0:e1459cfa4a6a | 29 | |
mayarasi | 0:e1459cfa4a6a | 30 | #define ASCII_PEDRA_NORMAL 'O' |
mayarasi | 0:e1459cfa4a6a | 31 | #define ASCII_PEDRA_DAMA 'D' |
mayarasi | 0:e1459cfa4a6a | 32 | |
mayarasi | 0:e1459cfa4a6a | 33 | #define ENTER 13 |
mayarasi | 0:e1459cfa4a6a | 34 | |
mayarasi | 0:e1459cfa4a6a | 35 | //#define __PC__ 1 |
mayarasi | 0:e1459cfa4a6a | 36 | #define __EMBARCADO__ 1 |
mayarasi | 0:e1459cfa4a6a | 37 | |
mayarasi | 0:e1459cfa4a6a | 38 | #ifdef __PC__ |
mayarasi | 0:e1459cfa4a6a | 39 | #define _CRT_SECURE_NO_WARNINGS |
mayarasi | 0:e1459cfa4a6a | 40 | #include <stdio.h> |
mayarasi | 0:e1459cfa4a6a | 41 | #include <memory.h> |
mayarasi | 0:e1459cfa4a6a | 42 | #include <stdlib.h> |
mayarasi | 0:e1459cfa4a6a | 43 | #include <windows.h> |
mayarasi | 0:e1459cfa4a6a | 44 | #include <conio.h> |
mayarasi | 0:e1459cfa4a6a | 45 | #include <string.h> |
mayarasi | 0:e1459cfa4a6a | 46 | #define PRINTF _cprintf |
mayarasi | 0:e1459cfa4a6a | 47 | #define SLEEP sleep |
mayarasi | 0:e1459cfa4a6a | 48 | #define FIM_DE_LINHA "\n" |
mayarasi | 0:e1459cfa4a6a | 49 | #define GETCHE _getche |
mayarasi | 0:e1459cfa4a6a | 50 | |
mayarasi | 0:e1459cfa4a6a | 51 | #define ASCII_BLOCK 219 |
mayarasi | 0:e1459cfa4a6a | 52 | #define ASCII_BORDER_H 205 |
mayarasi | 0:e1459cfa4a6a | 53 | #define ASCII_BORDER_V 186 |
mayarasi | 0:e1459cfa4a6a | 54 | #define ASCII_BORDER_TL 201 |
mayarasi | 0:e1459cfa4a6a | 55 | #define ASCII_BORDER_TR 187 |
mayarasi | 0:e1459cfa4a6a | 56 | #define ASCII_BORDER_BL 200 |
mayarasi | 0:e1459cfa4a6a | 57 | #define ASCII_BORDER_BR 188 |
mayarasi | 0:e1459cfa4a6a | 58 | |
mayarasi | 0:e1459cfa4a6a | 59 | HANDLE hConsoleHandle; |
mayarasi | 0:e1459cfa4a6a | 60 | CONSOLE_SCREEN_BUFFER_INFO *ConsoleInfo; |
mayarasi | 0:e1459cfa4a6a | 61 | |
mayarasi | 0:e1459cfa4a6a | 62 | #define BACKGROUND_WHITE (BACKGROUND_GREEN|BACKGROUND_RED|BACKGROUND_BLUE) |
mayarasi | 0:e1459cfa4a6a | 63 | #define FOREGROUND_WHITE (FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_BLUE) |
mayarasi | 0:e1459cfa4a6a | 64 | #define BACKGROUND_BLACK 0 |
mayarasi | 0:e1459cfa4a6a | 65 | #define FOREGROUND_BLACK 0 |
mayarasi | 0:e1459cfa4a6a | 66 | |
mayarasi | 0:e1459cfa4a6a | 67 | #define COR_FUNDO_BORDA BACKGROUND_BLUE |
mayarasi | 0:e1459cfa4a6a | 68 | #define COR_TEXTO_BORDA FOREGROUND_WHITE |
mayarasi | 0:e1459cfa4a6a | 69 | |
mayarasi | 0:e1459cfa4a6a | 70 | #define COR_FUNDO_CASA_SEM_PEDRA BACKGROUND_WHITE |
mayarasi | 0:e1459cfa4a6a | 71 | #define COR_TEXTO_CASA_SEM_PEDRA FOREGROUND_WHITE |
mayarasi | 0:e1459cfa4a6a | 72 | |
mayarasi | 0:e1459cfa4a6a | 73 | #define COR_FUNDO_CASA_COM_PEDRA BACKGROUND_GREEN |
mayarasi | 0:e1459cfa4a6a | 74 | #define COR_TEXTO_CASA_COM_PEDRA_VAZIO FOREGROUND_GREEN |
mayarasi | 0:e1459cfa4a6a | 75 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADOR1 FOREGROUND_WHITE |
mayarasi | 0:e1459cfa4a6a | 76 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADOR2 FOREGROUND_RED |
mayarasi | 0:e1459cfa4a6a | 77 | |
mayarasi | 0:e1459cfa4a6a | 78 | #define COR_FUNDO_CASA_COM_PEDRA_CAPTURADA (BACKGROUND_GREEN|BACKGROUND_INTENSITY) |
mayarasi | 0:e1459cfa4a6a | 79 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_VAZIO (BACKGROUND_GREEN|BACKGROUND_INTENSITY) |
mayarasi | 0:e1459cfa4a6a | 80 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1 (COR_TEXTO_CASA_COM_PEDRA_JOGADOR1|BACKGROUND_INTENSITY) |
mayarasi | 0:e1459cfa4a6a | 81 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2 (COR_TEXTO_CASA_COM_PEDRA_JOGADOR2|BACKGROUND_INTENSITY) |
mayarasi | 0:e1459cfa4a6a | 82 | |
mayarasi | 0:e1459cfa4a6a | 83 | #define COR_FUNDO_CASA_COM_PEDRA_JOGADA BACKGROUND_BLACK |
mayarasi | 0:e1459cfa4a6a | 84 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_VAZIO BACKGROUND_BLACK |
mayarasi | 0:e1459cfa4a6a | 85 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_JOGADOR1 COR_TEXTO_CASA_COM_PEDRA_JOGADOR1 |
mayarasi | 0:e1459cfa4a6a | 86 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_JOGADOR2 COR_TEXTO_CASA_COM_PEDRA_JOGADOR2 |
mayarasi | 0:e1459cfa4a6a | 87 | |
mayarasi | 0:e1459cfa4a6a | 88 | #define COR_FUNDO_MENSAGEM BACKGROUND_BLACK |
mayarasi | 0:e1459cfa4a6a | 89 | #define COR_TEXTO_MENSAGEM FOREGROUND_WHITE |
mayarasi | 0:e1459cfa4a6a | 90 | |
mayarasi | 0:e1459cfa4a6a | 91 | |
mayarasi | 0:e1459cfa4a6a | 92 | #else |
mayarasi | 0:e1459cfa4a6a | 93 | #include "mbed.h" |
mayarasi | 0:e1459cfa4a6a | 94 | #include "Terminal.h" |
mayarasi | 0:e1459cfa4a6a | 95 | |
mayarasi | 0:e1459cfa4a6a | 96 | //Serial pc( USBTX, USBRX); |
mayarasi | 0:e1459cfa4a6a | 97 | Terminal term(USBTX, USBRX); // tx, rx |
mayarasi | 0:e1459cfa4a6a | 98 | //#define PRINTF pc.printf |
mayarasi | 0:e1459cfa4a6a | 99 | #define PRINTF term.printf |
mayarasi | 0:e1459cfa4a6a | 100 | #define SLEEP Thread::wait |
mayarasi | 0:e1459cfa4a6a | 101 | #define FIM_DE_LINHA "\r\n" |
mayarasi | 0:e1459cfa4a6a | 102 | #define GETCHE pega_tecla_echo |
mayarasi | 0:e1459cfa4a6a | 103 | |
mayarasi | 0:e1459cfa4a6a | 104 | #define ASCII_BLOCK 219 |
mayarasi | 0:e1459cfa4a6a | 105 | #define ASCII_BORDER_H 205 |
mayarasi | 0:e1459cfa4a6a | 106 | #define ASCII_BORDER_V 186 |
mayarasi | 0:e1459cfa4a6a | 107 | #define ASCII_BORDER_TL 201 |
mayarasi | 0:e1459cfa4a6a | 108 | #define ASCII_BORDER_TR 187 |
mayarasi | 0:e1459cfa4a6a | 109 | #define ASCII_BORDER_BL 200 |
mayarasi | 0:e1459cfa4a6a | 110 | #define ASCII_BORDER_BR 188 |
mayarasi | 0:e1459cfa4a6a | 111 | |
mayarasi | 0:e1459cfa4a6a | 112 | #define WHITE 0xFFFFFF |
mayarasi | 0:e1459cfa4a6a | 113 | #define WHITE_DIFERENCIADO 0x888888 |
mayarasi | 0:e1459cfa4a6a | 114 | #define BLACK 0x000000 |
mayarasi | 0:e1459cfa4a6a | 115 | #define GREEN 0x00FF00 |
mayarasi | 0:e1459cfa4a6a | 116 | #define GREEN_DIFERENCIADO 0x008800 |
mayarasi | 0:e1459cfa4a6a | 117 | #define BLUE 0x0000FF |
mayarasi | 0:e1459cfa4a6a | 118 | #define BLUE_DIFERENCIADO 0x000088 |
mayarasi | 0:e1459cfa4a6a | 119 | #define RED 0xFF0000 |
mayarasi | 0:e1459cfa4a6a | 120 | #define RED_DIFERENCIADO 0x880000 |
mayarasi | 0:e1459cfa4a6a | 121 | |
mayarasi | 0:e1459cfa4a6a | 122 | #define COR_FUNDO_BORDA BLUE |
mayarasi | 0:e1459cfa4a6a | 123 | #define COR_TEXTO_BORDA WHITE |
mayarasi | 0:e1459cfa4a6a | 124 | |
mayarasi | 0:e1459cfa4a6a | 125 | #define COR_FUNDO_CASA_SEM_PEDRA WHITE |
mayarasi | 0:e1459cfa4a6a | 126 | #define COR_TEXTO_CASA_SEM_PEDRA WHITE |
mayarasi | 0:e1459cfa4a6a | 127 | |
mayarasi | 0:e1459cfa4a6a | 128 | #define COR_FUNDO_CASA_COM_PEDRA GREEN |
mayarasi | 0:e1459cfa4a6a | 129 | #define COR_TEXTO_CASA_COM_PEDRA_VAZIO GREEN |
mayarasi | 0:e1459cfa4a6a | 130 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADOR1 WHITE |
mayarasi | 0:e1459cfa4a6a | 131 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADOR2 RED |
mayarasi | 0:e1459cfa4a6a | 132 | |
mayarasi | 0:e1459cfa4a6a | 133 | #define COR_FUNDO_CASA_COM_PEDRA_CAPTURADA GREEN_DIFERENCIADO |
mayarasi | 0:e1459cfa4a6a | 134 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_VAZIO GREEN_DIFERENCIADO |
mayarasi | 0:e1459cfa4a6a | 135 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1 WHITE_DIFERENCIADO |
mayarasi | 0:e1459cfa4a6a | 136 | #define COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2 RED_DIFERENCIADO |
mayarasi | 0:e1459cfa4a6a | 137 | |
mayarasi | 0:e1459cfa4a6a | 138 | #define COR_FUNDO_CASA_COM_PEDRA_JOGADA BLACK |
mayarasi | 0:e1459cfa4a6a | 139 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_VAZIO BLACK |
mayarasi | 0:e1459cfa4a6a | 140 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_JOGADOR1 COR_TEXTO_CASA_COM_PEDRA_JOGADOR1 |
mayarasi | 0:e1459cfa4a6a | 141 | #define COR_TEXTO_CASA_COM_PEDRA_JOGADA_JOGADOR2 COR_TEXTO_CASA_COM_PEDRA_JOGADOR2 |
mayarasi | 0:e1459cfa4a6a | 142 | |
mayarasi | 0:e1459cfa4a6a | 143 | #define COR_FUNDO_MENSAGEM BLACK |
mayarasi | 0:e1459cfa4a6a | 144 | #define COR_TEXTO_MENSAGEM WHITE |
mayarasi | 0:e1459cfa4a6a | 145 | |
mayarasi | 0:e1459cfa4a6a | 146 | |
mayarasi | 0:e1459cfa4a6a | 147 | #endif |
mayarasi | 0:e1459cfa4a6a | 148 | |
mayarasi | 0:e1459cfa4a6a | 149 | char tabuleiro_controle[MAXLINHA][MAXCOLUNA], tabuleiro_jogada[MAXLINHA][MAXCOLUNA]; |
mayarasi | 0:e1459cfa4a6a | 150 | int jogadas = 0; |
mayarasi | 0:e1459cfa4a6a | 151 | int jogada_em_que_ultima_pedra_capturada = 0; |
mayarasi | 0:e1459cfa4a6a | 152 | int jogada_em_que_ultima_pedra_nomal_movimentada = 0; |
mayarasi | 0:e1459cfa4a6a | 153 | int jogada_empate_lances_especiais = 0; |
mayarasi | 0:e1459cfa4a6a | 154 | int placar[4][3]; |
mayarasi | 0:e1459cfa4a6a | 155 | //int numero_pedras_para_capturar = -1; |
mayarasi | 0:e1459cfa4a6a | 156 | |
mayarasi | 0:e1459cfa4a6a | 157 | int numero_pedras_capturadas_jogador1 = 0; |
mayarasi | 0:e1459cfa4a6a | 158 | int numero_pedras_capturadas_jogador2 = 0; |
mayarasi | 0:e1459cfa4a6a | 159 | |
mayarasi | 0:e1459cfa4a6a | 160 | int numero_pedras_capturadas_antes_jogador1 = 0; |
mayarasi | 0:e1459cfa4a6a | 161 | int numero_pedras_capturadas_antes_jogador2 = 0; |
mayarasi | 0:e1459cfa4a6a | 162 | |
mayarasi | 0:e1459cfa4a6a | 163 | #ifdef __EMBARCADO__ |
mayarasi | 0:e1459cfa4a6a | 164 | |
mayarasi | 0:e1459cfa4a6a | 165 | char pega_tecla_echo(void) { |
mayarasi | 0:e1459cfa4a6a | 166 | char retorno; |
mayarasi | 0:e1459cfa4a6a | 167 | |
mayarasi | 0:e1459cfa4a6a | 168 | //retorno = pc.getc(); |
mayarasi | 0:e1459cfa4a6a | 169 | retorno = term.getc(); |
mayarasi | 0:e1459cfa4a6a | 170 | //pc.putc(retorno); |
mayarasi | 0:e1459cfa4a6a | 171 | term.putc(retorno); |
mayarasi | 0:e1459cfa4a6a | 172 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 173 | } |
mayarasi | 0:e1459cfa4a6a | 174 | |
mayarasi | 0:e1459cfa4a6a | 175 | #endif |
mayarasi | 0:e1459cfa4a6a | 176 | |
mayarasi | 0:e1459cfa4a6a | 177 | void SELECIONA_COR(int cor_fundo, int cor_texto) { |
mayarasi | 0:e1459cfa4a6a | 178 | |
mayarasi | 0:e1459cfa4a6a | 179 | #ifdef __PC__ |
mayarasi | 0:e1459cfa4a6a | 180 | SetConsoleTextAttribute(hConsoleHandle, cor_fundo | cor_texto); |
mayarasi | 0:e1459cfa4a6a | 181 | #else |
mayarasi | 0:e1459cfa4a6a | 182 | term.foreground(cor_texto); |
mayarasi | 0:e1459cfa4a6a | 183 | term.background(cor_fundo); |
mayarasi | 0:e1459cfa4a6a | 184 | #endif |
mayarasi | 0:e1459cfa4a6a | 185 | |
mayarasi | 0:e1459cfa4a6a | 186 | } |
mayarasi | 0:e1459cfa4a6a | 187 | |
mayarasi | 0:e1459cfa4a6a | 188 | void LOCATE(int coluna, int linha) { |
mayarasi | 0:e1459cfa4a6a | 189 | |
mayarasi | 0:e1459cfa4a6a | 190 | #ifdef __PC__ |
mayarasi | 0:e1459cfa4a6a | 191 | COORD coordScreen; |
mayarasi | 0:e1459cfa4a6a | 192 | |
mayarasi | 0:e1459cfa4a6a | 193 | coordScreen.X = coluna; |
mayarasi | 0:e1459cfa4a6a | 194 | coordScreen.Y = linha; |
mayarasi | 0:e1459cfa4a6a | 195 | SetConsoleCursorPosition(hConsoleHandle, coordScreen); |
mayarasi | 0:e1459cfa4a6a | 196 | #else |
mayarasi | 0:e1459cfa4a6a | 197 | term.locate(coluna, linha); |
mayarasi | 0:e1459cfa4a6a | 198 | #endif |
mayarasi | 0:e1459cfa4a6a | 199 | |
mayarasi | 0:e1459cfa4a6a | 200 | } |
mayarasi | 0:e1459cfa4a6a | 201 | |
mayarasi | 0:e1459cfa4a6a | 202 | |
mayarasi | 0:e1459cfa4a6a | 203 | int lerIteiro(void) { |
mayarasi | 0:e1459cfa4a6a | 204 | |
mayarasi | 0:e1459cfa4a6a | 205 | char buffer[100+1]; |
mayarasi | 0:e1459cfa4a6a | 206 | int indice; |
mayarasi | 0:e1459cfa4a6a | 207 | char lido; |
mayarasi | 0:e1459cfa4a6a | 208 | |
mayarasi | 0:e1459cfa4a6a | 209 | memset(buffer, 0, sizeof(buffer)); |
mayarasi | 0:e1459cfa4a6a | 210 | |
mayarasi | 0:e1459cfa4a6a | 211 | for(indice = 0; indice < sizeof(buffer) - 1; ++indice) { |
mayarasi | 0:e1459cfa4a6a | 212 | lido = GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 213 | |
mayarasi | 0:e1459cfa4a6a | 214 | if(lido == ENTER) { |
mayarasi | 0:e1459cfa4a6a | 215 | break; |
mayarasi | 0:e1459cfa4a6a | 216 | } else { |
mayarasi | 0:e1459cfa4a6a | 217 | buffer[indice] = lido; |
mayarasi | 0:e1459cfa4a6a | 218 | } |
mayarasi | 0:e1459cfa4a6a | 219 | } |
mayarasi | 0:e1459cfa4a6a | 220 | |
mayarasi | 0:e1459cfa4a6a | 221 | return(atoi(buffer)); |
mayarasi | 0:e1459cfa4a6a | 222 | } |
mayarasi | 0:e1459cfa4a6a | 223 | |
mayarasi | 0:e1459cfa4a6a | 224 | #ifdef __PC__ |
mayarasi | 0:e1459cfa4a6a | 225 | |
mayarasi | 0:e1459cfa4a6a | 226 | void cls(HANDLE hConsole) |
mayarasi | 0:e1459cfa4a6a | 227 | { |
mayarasi | 0:e1459cfa4a6a | 228 | COORD coordScreen = { 0, 0 }; /* here's where we'll home the |
mayarasi | 0:e1459cfa4a6a | 229 | cursor */ |
mayarasi | 0:e1459cfa4a6a | 230 | BOOL bSuccess; |
mayarasi | 0:e1459cfa4a6a | 231 | DWORD cCharsWritten; |
mayarasi | 0:e1459cfa4a6a | 232 | CONSOLE_SCREEN_BUFFER_INFO csbi; /* to get buffer info */ |
mayarasi | 0:e1459cfa4a6a | 233 | DWORD dwConSize; /* number of character cells in |
mayarasi | 0:e1459cfa4a6a | 234 | the current buffer */ |
mayarasi | 0:e1459cfa4a6a | 235 | |
mayarasi | 0:e1459cfa4a6a | 236 | /* get the number of character cells in the current buffer */ |
mayarasi | 0:e1459cfa4a6a | 237 | |
mayarasi | 0:e1459cfa4a6a | 238 | SetConsoleTextAttribute(hConsoleHandle, ConsoleInfo->wAttributes); |
mayarasi | 0:e1459cfa4a6a | 239 | |
mayarasi | 0:e1459cfa4a6a | 240 | bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi); |
mayarasi | 0:e1459cfa4a6a | 241 | dwConSize = csbi.dwSize.X * csbi.dwSize.Y; |
mayarasi | 0:e1459cfa4a6a | 242 | |
mayarasi | 0:e1459cfa4a6a | 243 | /* fill the entire screen with blanks */ |
mayarasi | 0:e1459cfa4a6a | 244 | |
mayarasi | 0:e1459cfa4a6a | 245 | bSuccess = FillConsoleOutputCharacter(hConsole, (TCHAR) ' ', |
mayarasi | 0:e1459cfa4a6a | 246 | dwConSize, coordScreen, &cCharsWritten); |
mayarasi | 0:e1459cfa4a6a | 247 | |
mayarasi | 0:e1459cfa4a6a | 248 | /* get the current text attribute */ |
mayarasi | 0:e1459cfa4a6a | 249 | |
mayarasi | 0:e1459cfa4a6a | 250 | bSuccess = GetConsoleScreenBufferInfo(hConsole, &csbi); |
mayarasi | 0:e1459cfa4a6a | 251 | |
mayarasi | 0:e1459cfa4a6a | 252 | /* now set the buffer's attributes accordingly */ |
mayarasi | 0:e1459cfa4a6a | 253 | |
mayarasi | 0:e1459cfa4a6a | 254 | bSuccess = FillConsoleOutputAttribute(hConsole, csbi.wAttributes, |
mayarasi | 0:e1459cfa4a6a | 255 | dwConSize, coordScreen, &cCharsWritten); |
mayarasi | 0:e1459cfa4a6a | 256 | |
mayarasi | 0:e1459cfa4a6a | 257 | /* put the cursor at (0, 0) */ |
mayarasi | 0:e1459cfa4a6a | 258 | |
mayarasi | 0:e1459cfa4a6a | 259 | bSuccess = SetConsoleCursorPosition(hConsole, coordScreen); |
mayarasi | 0:e1459cfa4a6a | 260 | return; |
mayarasi | 0:e1459cfa4a6a | 261 | } |
mayarasi | 0:e1459cfa4a6a | 262 | |
mayarasi | 0:e1459cfa4a6a | 263 | void LimparTela(void) { |
mayarasi | 0:e1459cfa4a6a | 264 | //system("CLS"); |
mayarasi | 0:e1459cfa4a6a | 265 | cls(hConsoleHandle); |
mayarasi | 0:e1459cfa4a6a | 266 | } |
mayarasi | 0:e1459cfa4a6a | 267 | |
mayarasi | 0:e1459cfa4a6a | 268 | #else |
mayarasi | 0:e1459cfa4a6a | 269 | |
mayarasi | 0:e1459cfa4a6a | 270 | void LimparTela(void) { |
mayarasi | 0:e1459cfa4a6a | 271 | //PRINTF("\033[2J\033[1;1H"); |
mayarasi | 0:e1459cfa4a6a | 272 | //PRINTF("\e[1;1H\e[2J"); |
mayarasi | 0:e1459cfa4a6a | 273 | term.cls(); |
mayarasi | 0:e1459cfa4a6a | 274 | } |
mayarasi | 0:e1459cfa4a6a | 275 | |
mayarasi | 0:e1459cfa4a6a | 276 | #endif |
mayarasi | 0:e1459cfa4a6a | 277 | |
mayarasi | 0:e1459cfa4a6a | 278 | char * retorna_nome_jogador(char opcao1, char *nome) { |
mayarasi | 0:e1459cfa4a6a | 279 | |
mayarasi | 0:e1459cfa4a6a | 280 | switch (opcao1) { |
mayarasi | 0:e1459cfa4a6a | 281 | case HUMANO1: |
mayarasi | 0:e1459cfa4a6a | 282 | strcpy(nome, NOME_HUMANO1); |
mayarasi | 0:e1459cfa4a6a | 283 | break; |
mayarasi | 0:e1459cfa4a6a | 284 | case HUMANO2: |
mayarasi | 0:e1459cfa4a6a | 285 | strcpy(nome, NOME_HUMANO2); |
mayarasi | 0:e1459cfa4a6a | 286 | break; |
mayarasi | 0:e1459cfa4a6a | 287 | case MAQUINA1: |
mayarasi | 0:e1459cfa4a6a | 288 | strcpy(nome, NOME_MAQUINA1); |
mayarasi | 0:e1459cfa4a6a | 289 | break; |
mayarasi | 0:e1459cfa4a6a | 290 | case MAQUINA2: |
mayarasi | 0:e1459cfa4a6a | 291 | strcpy(nome, NOME_MAQUINA2); |
mayarasi | 0:e1459cfa4a6a | 292 | break; |
mayarasi | 0:e1459cfa4a6a | 293 | } |
mayarasi | 0:e1459cfa4a6a | 294 | |
mayarasi | 0:e1459cfa4a6a | 295 | return nome; |
mayarasi | 0:e1459cfa4a6a | 296 | } |
mayarasi | 0:e1459cfa4a6a | 297 | |
mayarasi | 0:e1459cfa4a6a | 298 | char * retorna_nome_jogador_tipo_jogo(int indice, char opcao1, char *nome) { |
mayarasi | 0:e1459cfa4a6a | 299 | |
mayarasi | 0:e1459cfa4a6a | 300 | switch(opcao1) { |
mayarasi | 0:e1459cfa4a6a | 301 | case '1': |
mayarasi | 0:e1459cfa4a6a | 302 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 303 | strcpy(nome, NOME_HUMANO1); |
mayarasi | 0:e1459cfa4a6a | 304 | } else { |
mayarasi | 0:e1459cfa4a6a | 305 | strcpy(nome, NOME_HUMANO2); |
mayarasi | 0:e1459cfa4a6a | 306 | } |
mayarasi | 0:e1459cfa4a6a | 307 | break; |
mayarasi | 0:e1459cfa4a6a | 308 | case '2': |
mayarasi | 0:e1459cfa4a6a | 309 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 310 | strcpy(nome, NOME_HUMANO1); |
mayarasi | 0:e1459cfa4a6a | 311 | } else { |
mayarasi | 0:e1459cfa4a6a | 312 | strcpy(nome, NOME_MAQUINA1); |
mayarasi | 0:e1459cfa4a6a | 313 | } |
mayarasi | 0:e1459cfa4a6a | 314 | break; |
mayarasi | 0:e1459cfa4a6a | 315 | case '3': |
mayarasi | 0:e1459cfa4a6a | 316 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 317 | strcpy(nome, NOME_MAQUINA1); |
mayarasi | 0:e1459cfa4a6a | 318 | } else { |
mayarasi | 0:e1459cfa4a6a | 319 | strcpy(nome, NOME_MAQUINA2); |
mayarasi | 0:e1459cfa4a6a | 320 | } |
mayarasi | 0:e1459cfa4a6a | 321 | break; |
mayarasi | 0:e1459cfa4a6a | 322 | } |
mayarasi | 0:e1459cfa4a6a | 323 | |
mayarasi | 0:e1459cfa4a6a | 324 | return nome; |
mayarasi | 0:e1459cfa4a6a | 325 | } |
mayarasi | 0:e1459cfa4a6a | 326 | |
mayarasi | 0:e1459cfa4a6a | 327 | char retorna_jogador(int indice, char opcao1) { |
mayarasi | 0:e1459cfa4a6a | 328 | |
mayarasi | 0:e1459cfa4a6a | 329 | char jogador; |
mayarasi | 0:e1459cfa4a6a | 330 | |
mayarasi | 0:e1459cfa4a6a | 331 | switch(opcao1) { |
mayarasi | 0:e1459cfa4a6a | 332 | case '1': |
mayarasi | 0:e1459cfa4a6a | 333 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 334 | jogador = HUMANO1; |
mayarasi | 0:e1459cfa4a6a | 335 | } else { |
mayarasi | 0:e1459cfa4a6a | 336 | jogador = HUMANO2; |
mayarasi | 0:e1459cfa4a6a | 337 | } |
mayarasi | 0:e1459cfa4a6a | 338 | break; |
mayarasi | 0:e1459cfa4a6a | 339 | case '2': |
mayarasi | 0:e1459cfa4a6a | 340 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 341 | jogador = HUMANO1; |
mayarasi | 0:e1459cfa4a6a | 342 | } else { |
mayarasi | 0:e1459cfa4a6a | 343 | jogador = MAQUINA1; |
mayarasi | 0:e1459cfa4a6a | 344 | } |
mayarasi | 0:e1459cfa4a6a | 345 | break; |
mayarasi | 0:e1459cfa4a6a | 346 | case '3': |
mayarasi | 0:e1459cfa4a6a | 347 | if(indice == 1) { |
mayarasi | 0:e1459cfa4a6a | 348 | jogador = MAQUINA1; |
mayarasi | 0:e1459cfa4a6a | 349 | } else { |
mayarasi | 0:e1459cfa4a6a | 350 | jogador = MAQUINA2; |
mayarasi | 0:e1459cfa4a6a | 351 | } |
mayarasi | 0:e1459cfa4a6a | 352 | break; |
mayarasi | 0:e1459cfa4a6a | 353 | } |
mayarasi | 0:e1459cfa4a6a | 354 | |
mayarasi | 0:e1459cfa4a6a | 355 | return jogador; |
mayarasi | 0:e1459cfa4a6a | 356 | } |
mayarasi | 0:e1459cfa4a6a | 357 | |
mayarasi | 0:e1459cfa4a6a | 358 | void imprime_placar(void) { |
mayarasi | 0:e1459cfa4a6a | 359 | |
mayarasi | 0:e1459cfa4a6a | 360 | char nome[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 361 | int indice, tamanho; |
mayarasi | 0:e1459cfa4a6a | 362 | |
mayarasi | 0:e1459cfa4a6a | 363 | LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 364 | |
mayarasi | 0:e1459cfa4a6a | 365 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 366 | LOCATE(10, 1); |
mayarasi | 0:e1459cfa4a6a | 367 | PRINTF("PLACAR%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 368 | PRINTF("%- *.*s|VITORIAS|EMPATES|DERROTAS%s", TAM_NOME, TAM_NOME, "JOGADOR", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 369 | |
mayarasi | 0:e1459cfa4a6a | 370 | tamanho = TAM_NOME + 1 + strlen("VITORIAS") + 1 + strlen("EMPATES") + 1 + strlen("DERROTAS"); |
mayarasi | 0:e1459cfa4a6a | 371 | |
mayarasi | 0:e1459cfa4a6a | 372 | for (indice = 0; indice < tamanho; ++indice) { |
mayarasi | 0:e1459cfa4a6a | 373 | PRINTF("%c", ASCII_BORDER_H); |
mayarasi | 0:e1459cfa4a6a | 374 | } |
mayarasi | 0:e1459cfa4a6a | 375 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 376 | |
mayarasi | 0:e1459cfa4a6a | 377 | |
mayarasi | 0:e1459cfa4a6a | 378 | |
mayarasi | 0:e1459cfa4a6a | 379 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 380 | PRINTF("%- *.*s|%0*d|%0*d|%0*d%s", |
mayarasi | 0:e1459cfa4a6a | 381 | TAM_NOME, TAM_NOME, retorna_nome_jogador(HUMANO1, nome), |
mayarasi | 0:e1459cfa4a6a | 382 | strlen("VITORIAS"), placar[HUMANO1 - '1'][VITORIAS], |
mayarasi | 0:e1459cfa4a6a | 383 | strlen("EMPATES"), placar[HUMANO1 - '1'][EMPATES], |
mayarasi | 0:e1459cfa4a6a | 384 | strlen("DERROTAS"), placar[HUMANO1 - '1'][DERROTAS], FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 385 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 386 | PRINTF("%- *.*s|%0*d|%0*d|%0*d%s", |
mayarasi | 0:e1459cfa4a6a | 387 | TAM_NOME, TAM_NOME, retorna_nome_jogador(HUMANO2, nome), |
mayarasi | 0:e1459cfa4a6a | 388 | strlen("VITORIAS"), placar[HUMANO2 - '1'][VITORIAS], |
mayarasi | 0:e1459cfa4a6a | 389 | strlen("EMPATES"), placar[HUMANO2 - '1'][EMPATES], |
mayarasi | 0:e1459cfa4a6a | 390 | strlen("DERROTAS"), placar[HUMANO2 - '1'][DERROTAS], FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 391 | #if 0 |
mayarasi | 0:e1459cfa4a6a | 392 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 393 | PRINTF("%- *.*s|%0*d|%0*d|%0*d%s", |
mayarasi | 0:e1459cfa4a6a | 394 | TAM_NOME, TAM_NOME, retorna_nome_jogador(MAQUINA1, nome), |
mayarasi | 0:e1459cfa4a6a | 395 | strlen("VITORIAS"), placar[MAQUINA1 - '1'][VITORIAS], |
mayarasi | 0:e1459cfa4a6a | 396 | strlen("EMPATES"), placar[MAQUINA1 - '1'][EMPATES], |
mayarasi | 0:e1459cfa4a6a | 397 | strlen("DERROTAS"), placar[MAQUINA1 - '1'][DERROTAS], FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 398 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 399 | PRINTF("%- *.*s|%0*d|%0*d|%0*d%s", |
mayarasi | 0:e1459cfa4a6a | 400 | TAM_NOME, TAM_NOME, retorna_nome_jogador(MAQUINA2, nome), |
mayarasi | 0:e1459cfa4a6a | 401 | strlen("VITORIAS"), placar[MAQUINA2 - '1'][VITORIAS], |
mayarasi | 0:e1459cfa4a6a | 402 | strlen("EMPATES"), placar[MAQUINA2 - '1'][EMPATES], |
mayarasi | 0:e1459cfa4a6a | 403 | strlen("DERROTAS"), placar[MAQUINA2 - '1'][DERROTAS], FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 404 | #endif |
mayarasi | 0:e1459cfa4a6a | 405 | |
mayarasi | 0:e1459cfa4a6a | 406 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 407 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 408 | PRINTF("Pressione <Qualquer Tecla>"); |
mayarasi | 0:e1459cfa4a6a | 409 | GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 410 | } |
mayarasi | 0:e1459cfa4a6a | 411 | |
mayarasi | 0:e1459cfa4a6a | 412 | |
mayarasi | 0:e1459cfa4a6a | 413 | void ImprimeMenu(char &jogador1, char &jogador2) { |
mayarasi | 0:e1459cfa4a6a | 414 | |
mayarasi | 0:e1459cfa4a6a | 415 | char opcao1, opcao2; |
mayarasi | 0:e1459cfa4a6a | 416 | int indice; |
mayarasi | 0:e1459cfa4a6a | 417 | char nome[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 418 | |
mayarasi | 0:e1459cfa4a6a | 419 | do { |
mayarasi | 0:e1459cfa4a6a | 420 | LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 421 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 422 | PRINTF("1 - %s X %s%s", NOME_HUMANO1, NOME_HUMANO2, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 423 | #if 0 |
mayarasi | 0:e1459cfa4a6a | 424 | PRINTF("2 - %s X %s%s", NOME_HUMANO1, NOME_MAQUINA1, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 425 | PRINTF("3 - %s X %s%s", NOME_MAQUINA1, NOME_MAQUINA2, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 426 | #endif |
mayarasi | 0:e1459cfa4a6a | 427 | //PRINTF("4 - PLACAR%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 428 | PRINTF("2 - PLACAR%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 429 | |
mayarasi | 0:e1459cfa4a6a | 430 | opcao1 = GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 431 | |
mayarasi | 0:e1459cfa4a6a | 432 | //if(opcao1 == '4') { |
mayarasi | 0:e1459cfa4a6a | 433 | if (opcao1 == '2') { |
mayarasi | 0:e1459cfa4a6a | 434 | imprime_placar(); |
mayarasi | 0:e1459cfa4a6a | 435 | } |
mayarasi | 0:e1459cfa4a6a | 436 | |
mayarasi | 0:e1459cfa4a6a | 437 | } while( opcao1 < '1' || opcao1 > '1' ); |
mayarasi | 0:e1459cfa4a6a | 438 | |
mayarasi | 0:e1459cfa4a6a | 439 | do { |
mayarasi | 0:e1459cfa4a6a | 440 | indice = 0; |
mayarasi | 0:e1459cfa4a6a | 441 | LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 442 | ++indice; |
mayarasi | 0:e1459cfa4a6a | 443 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 444 | PRINTF("%d - %s INICIA O JOGO%s", indice, retorna_nome_jogador_tipo_jogo(indice, opcao1, nome), FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 445 | ++indice; |
mayarasi | 0:e1459cfa4a6a | 446 | PRINTF("%d - %s INICIA O JOGO%s", indice, retorna_nome_jogador_tipo_jogo(indice, opcao1, nome), FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 447 | |
mayarasi | 0:e1459cfa4a6a | 448 | opcao2 = GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 449 | } while( opcao2 < '1' || opcao2 > '2' ); |
mayarasi | 0:e1459cfa4a6a | 450 | |
mayarasi | 0:e1459cfa4a6a | 451 | if(opcao2 == '1') { |
mayarasi | 0:e1459cfa4a6a | 452 | jogador1 = retorna_jogador(1, opcao1); |
mayarasi | 0:e1459cfa4a6a | 453 | jogador2 = retorna_jogador(2, opcao1); |
mayarasi | 0:e1459cfa4a6a | 454 | } else { |
mayarasi | 0:e1459cfa4a6a | 455 | jogador1 = retorna_jogador(2, opcao1); |
mayarasi | 0:e1459cfa4a6a | 456 | jogador2 = retorna_jogador(1, opcao1); |
mayarasi | 0:e1459cfa4a6a | 457 | } |
mayarasi | 0:e1459cfa4a6a | 458 | |
mayarasi | 0:e1459cfa4a6a | 459 | LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 460 | |
mayarasi | 0:e1459cfa4a6a | 461 | } |
mayarasi | 0:e1459cfa4a6a | 462 | |
mayarasi | 0:e1459cfa4a6a | 463 | void InicializarTabuleiro(char jogador_que_inicia, char segundo_jogador) { |
mayarasi | 0:e1459cfa4a6a | 464 | |
mayarasi | 0:e1459cfa4a6a | 465 | int indice1, indice2; |
mayarasi | 0:e1459cfa4a6a | 466 | |
mayarasi | 0:e1459cfa4a6a | 467 | memset(tabuleiro_jogada, VAZIO, sizeof(tabuleiro_controle)); |
mayarasi | 0:e1459cfa4a6a | 468 | |
mayarasi | 0:e1459cfa4a6a | 469 | for(indice1 = 0; indice1 < MAXCOLUNA; ++indice1) { |
mayarasi | 0:e1459cfa4a6a | 470 | //for(indice2 = 0; indice2 < ((MAXLINHA/2)-1); ++indice2) { |
mayarasi | 0:e1459cfa4a6a | 471 | for (indice2 = 0; indice2 < 1; ++indice2) { |
mayarasi | 0:e1459cfa4a6a | 472 | if( (indice2 == 0) || (indice2 == 2) ){ |
mayarasi | 0:e1459cfa4a6a | 473 | if((indice1%2) == 1) { |
mayarasi | 0:e1459cfa4a6a | 474 | tabuleiro_jogada[indice2][indice1] = segundo_jogador; |
mayarasi | 0:e1459cfa4a6a | 475 | } |
mayarasi | 0:e1459cfa4a6a | 476 | } else { |
mayarasi | 0:e1459cfa4a6a | 477 | if((indice1%2) == 0) { |
mayarasi | 0:e1459cfa4a6a | 478 | tabuleiro_jogada[indice2][indice1] = segundo_jogador; |
mayarasi | 0:e1459cfa4a6a | 479 | } |
mayarasi | 0:e1459cfa4a6a | 480 | } |
mayarasi | 0:e1459cfa4a6a | 481 | } |
mayarasi | 0:e1459cfa4a6a | 482 | } |
mayarasi | 0:e1459cfa4a6a | 483 | |
mayarasi | 0:e1459cfa4a6a | 484 | for(indice1 = 0; indice1 < MAXCOLUNA; ++indice1) { |
mayarasi | 0:e1459cfa4a6a | 485 | for(indice2 = (MAXLINHA - 1); indice2 > (MAXLINHA/2); --indice2) { |
mayarasi | 0:e1459cfa4a6a | 486 | if(indice2 == 6){ |
mayarasi | 0:e1459cfa4a6a | 487 | if((indice1%2) == 1) { |
mayarasi | 0:e1459cfa4a6a | 488 | tabuleiro_jogada[indice2][indice1] = jogador_que_inicia; |
mayarasi | 0:e1459cfa4a6a | 489 | } |
mayarasi | 0:e1459cfa4a6a | 490 | } else { |
mayarasi | 0:e1459cfa4a6a | 491 | if((indice1%2) == 0) { |
mayarasi | 0:e1459cfa4a6a | 492 | tabuleiro_jogada[indice2][indice1] = jogador_que_inicia; |
mayarasi | 0:e1459cfa4a6a | 493 | } |
mayarasi | 0:e1459cfa4a6a | 494 | } |
mayarasi | 0:e1459cfa4a6a | 495 | } |
mayarasi | 0:e1459cfa4a6a | 496 | } |
mayarasi | 0:e1459cfa4a6a | 497 | |
mayarasi | 0:e1459cfa4a6a | 498 | memcpy(tabuleiro_controle, tabuleiro_jogada, sizeof(tabuleiro_jogada)); |
mayarasi | 0:e1459cfa4a6a | 499 | } |
mayarasi | 0:e1459cfa4a6a | 500 | |
mayarasi | 0:e1459cfa4a6a | 501 | void ImprimirTabuleiro(char jogador1, char jogador2) { |
mayarasi | 0:e1459cfa4a6a | 502 | |
mayarasi | 0:e1459cfa4a6a | 503 | char nome1[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 504 | char nome2[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 505 | int linha, coluna; |
mayarasi | 0:e1459cfa4a6a | 506 | |
mayarasi | 0:e1459cfa4a6a | 507 | LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 508 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 509 | |
mayarasi | 0:e1459cfa4a6a | 510 | LOCATE(10, 1); |
mayarasi | 0:e1459cfa4a6a | 511 | PRINTF("PARTIDA DE DAMAS "); |
mayarasi | 0:e1459cfa4a6a | 512 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 513 | PRINTF("%s", retorna_nome_jogador(jogador1, nome1)); |
mayarasi | 0:e1459cfa4a6a | 514 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 515 | PRINTF("(%d) VERSUS ", numero_pedras_capturadas_jogador1); |
mayarasi | 0:e1459cfa4a6a | 516 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 517 | PRINTF("%s", retorna_nome_jogador(jogador2, nome2)); |
mayarasi | 0:e1459cfa4a6a | 518 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 519 | PRINTF("(%d) % s", numero_pedras_capturadas_jogador2, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 520 | |
mayarasi | 0:e1459cfa4a6a | 521 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 522 | PRINTF("%s", BORDA); |
mayarasi | 0:e1459cfa4a6a | 523 | |
mayarasi | 0:e1459cfa4a6a | 524 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 525 | PRINTF(" 12345678 %s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 526 | |
mayarasi | 0:e1459cfa4a6a | 527 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 528 | PRINTF("%s", BORDA); |
mayarasi | 0:e1459cfa4a6a | 529 | |
mayarasi | 0:e1459cfa4a6a | 530 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 531 | PRINTF(" %c", ASCII_BORDER_TL); |
mayarasi | 0:e1459cfa4a6a | 532 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 533 | PRINTF("%c", ASCII_BORDER_H); |
mayarasi | 0:e1459cfa4a6a | 534 | } |
mayarasi | 0:e1459cfa4a6a | 535 | PRINTF("%c%s", ASCII_BORDER_TR, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 536 | |
mayarasi | 0:e1459cfa4a6a | 537 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 538 | |
mayarasi | 0:e1459cfa4a6a | 539 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 540 | PRINTF("%s", BORDA); |
mayarasi | 0:e1459cfa4a6a | 541 | |
mayarasi | 0:e1459cfa4a6a | 542 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 543 | PRINTF("%d%c", linha + 1, ASCII_BORDER_V); |
mayarasi | 0:e1459cfa4a6a | 544 | if (linha % 2 == 0) { |
mayarasi | 0:e1459cfa4a6a | 545 | // Este tipo de linha comeca com um tipo de casa na qual |
mayarasi | 0:e1459cfa4a6a | 546 | // as pedras nao podem se movimentar |
mayarasi | 0:e1459cfa4a6a | 547 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 548 | if (coluna % 2 == 0) { |
mayarasi | 0:e1459cfa4a6a | 549 | SELECIONA_COR(COR_FUNDO_CASA_SEM_PEDRA, COR_TEXTO_CASA_SEM_PEDRA); |
mayarasi | 0:e1459cfa4a6a | 550 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 551 | } |
mayarasi | 0:e1459cfa4a6a | 552 | else { |
mayarasi | 0:e1459cfa4a6a | 553 | switch (tabuleiro_jogada[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 554 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 555 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 556 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 557 | break; |
mayarasi | 0:e1459cfa4a6a | 558 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 559 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 560 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 561 | break; |
mayarasi | 0:e1459cfa4a6a | 562 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 563 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 564 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 565 | break; |
mayarasi | 0:e1459cfa4a6a | 566 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 567 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 568 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 569 | break; |
mayarasi | 0:e1459cfa4a6a | 570 | case VAZIO: |
mayarasi | 0:e1459cfa4a6a | 571 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_VAZIO); |
mayarasi | 0:e1459cfa4a6a | 572 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 573 | break; |
mayarasi | 0:e1459cfa4a6a | 574 | case JOGADA: |
mayarasi | 0:e1459cfa4a6a | 575 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_JOGADA, COR_TEXTO_CASA_COM_PEDRA_JOGADA_VAZIO); |
mayarasi | 0:e1459cfa4a6a | 576 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 577 | break; |
mayarasi | 0:e1459cfa4a6a | 578 | case CAPTURADA: |
mayarasi | 0:e1459cfa4a6a | 579 | switch (tabuleiro_controle[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 580 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 581 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 582 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 583 | break; |
mayarasi | 0:e1459cfa4a6a | 584 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 585 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 586 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 587 | break; |
mayarasi | 0:e1459cfa4a6a | 588 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 589 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 590 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 591 | break; |
mayarasi | 0:e1459cfa4a6a | 592 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 593 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 594 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 595 | break; |
mayarasi | 0:e1459cfa4a6a | 596 | } |
mayarasi | 0:e1459cfa4a6a | 597 | break; |
mayarasi | 0:e1459cfa4a6a | 598 | } |
mayarasi | 0:e1459cfa4a6a | 599 | } |
mayarasi | 0:e1459cfa4a6a | 600 | } |
mayarasi | 0:e1459cfa4a6a | 601 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 602 | PRINTF("%c", ASCII_BORDER_V); |
mayarasi | 0:e1459cfa4a6a | 603 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 604 | } |
mayarasi | 0:e1459cfa4a6a | 605 | else { |
mayarasi | 0:e1459cfa4a6a | 606 | // Este tipo de linha comeca com um tipo de casa na qual |
mayarasi | 0:e1459cfa4a6a | 607 | // as pedras podem se movimentar |
mayarasi | 0:e1459cfa4a6a | 608 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 609 | if (coluna % 2 == 1) { |
mayarasi | 0:e1459cfa4a6a | 610 | SELECIONA_COR(COR_FUNDO_CASA_SEM_PEDRA, COR_TEXTO_CASA_SEM_PEDRA); |
mayarasi | 0:e1459cfa4a6a | 611 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 612 | } |
mayarasi | 0:e1459cfa4a6a | 613 | else { |
mayarasi | 0:e1459cfa4a6a | 614 | switch (tabuleiro_jogada[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 615 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 616 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 617 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 618 | break; |
mayarasi | 0:e1459cfa4a6a | 619 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 620 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 621 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 622 | break; |
mayarasi | 0:e1459cfa4a6a | 623 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 624 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 625 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 626 | break; |
mayarasi | 0:e1459cfa4a6a | 627 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 628 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 629 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 630 | break; |
mayarasi | 0:e1459cfa4a6a | 631 | case VAZIO: |
mayarasi | 0:e1459cfa4a6a | 632 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA, COR_TEXTO_CASA_COM_PEDRA_VAZIO); |
mayarasi | 0:e1459cfa4a6a | 633 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 634 | break; |
mayarasi | 0:e1459cfa4a6a | 635 | case JOGADA: |
mayarasi | 0:e1459cfa4a6a | 636 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_JOGADA, COR_TEXTO_CASA_COM_PEDRA_JOGADA_VAZIO); |
mayarasi | 0:e1459cfa4a6a | 637 | PRINTF(" "); |
mayarasi | 0:e1459cfa4a6a | 638 | break; |
mayarasi | 0:e1459cfa4a6a | 639 | case CAPTURADA: |
mayarasi | 0:e1459cfa4a6a | 640 | switch (tabuleiro_controle[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 641 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 642 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 643 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 644 | break; |
mayarasi | 0:e1459cfa4a6a | 645 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 646 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR1); |
mayarasi | 0:e1459cfa4a6a | 647 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 648 | break; |
mayarasi | 0:e1459cfa4a6a | 649 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 650 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 651 | PRINTF("%c", ASCII_PEDRA_NORMAL); |
mayarasi | 0:e1459cfa4a6a | 652 | break; |
mayarasi | 0:e1459cfa4a6a | 653 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 654 | SELECIONA_COR(COR_FUNDO_CASA_COM_PEDRA_CAPTURADA, COR_TEXTO_CASA_COM_PEDRA_CAPTURADA_JOGADOR2); |
mayarasi | 0:e1459cfa4a6a | 655 | PRINTF("%c", ASCII_PEDRA_DAMA); |
mayarasi | 0:e1459cfa4a6a | 656 | break; |
mayarasi | 0:e1459cfa4a6a | 657 | } |
mayarasi | 0:e1459cfa4a6a | 658 | break; |
mayarasi | 0:e1459cfa4a6a | 659 | } |
mayarasi | 0:e1459cfa4a6a | 660 | } |
mayarasi | 0:e1459cfa4a6a | 661 | } |
mayarasi | 0:e1459cfa4a6a | 662 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 663 | PRINTF("%c", ASCII_BORDER_V); |
mayarasi | 0:e1459cfa4a6a | 664 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 665 | } |
mayarasi | 0:e1459cfa4a6a | 666 | } |
mayarasi | 0:e1459cfa4a6a | 667 | |
mayarasi | 0:e1459cfa4a6a | 668 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 669 | PRINTF("%s", BORDA); |
mayarasi | 0:e1459cfa4a6a | 670 | |
mayarasi | 0:e1459cfa4a6a | 671 | SELECIONA_COR(COR_FUNDO_BORDA, COR_TEXTO_BORDA); |
mayarasi | 0:e1459cfa4a6a | 672 | PRINTF(" %c", ASCII_BORDER_BL); |
mayarasi | 0:e1459cfa4a6a | 673 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 674 | PRINTF("%c", ASCII_BORDER_H); |
mayarasi | 0:e1459cfa4a6a | 675 | } |
mayarasi | 0:e1459cfa4a6a | 676 | PRINTF("%c%s", ASCII_BORDER_BR, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 677 | } |
mayarasi | 0:e1459cfa4a6a | 678 | |
mayarasi | 0:e1459cfa4a6a | 679 | // 0 - Movimento simples |
mayarasi | 0:e1459cfa4a6a | 680 | // 1 - Movimento com multiplas capturas |
mayarasi | 0:e1459cfa4a6a | 681 | int Movimento_Multiplo(void) { |
mayarasi | 0:e1459cfa4a6a | 682 | |
mayarasi | 0:e1459cfa4a6a | 683 | int linha, coluna; |
mayarasi | 0:e1459cfa4a6a | 684 | |
mayarasi | 0:e1459cfa4a6a | 685 | return 0; |
mayarasi | 0:e1459cfa4a6a | 686 | |
mayarasi | 0:e1459cfa4a6a | 687 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 688 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 689 | if (tabuleiro_jogada[linha][coluna] == JOGADA) { |
mayarasi | 0:e1459cfa4a6a | 690 | // nao pode jogar sem capturar em uma jogada com multiplas capturas |
mayarasi | 0:e1459cfa4a6a | 691 | return 1; |
mayarasi | 0:e1459cfa4a6a | 692 | } |
mayarasi | 0:e1459cfa4a6a | 693 | } |
mayarasi | 0:e1459cfa4a6a | 694 | } |
mayarasi | 0:e1459cfa4a6a | 695 | return 0; |
mayarasi | 0:e1459cfa4a6a | 696 | } |
mayarasi | 0:e1459cfa4a6a | 697 | |
mayarasi | 0:e1459cfa4a6a | 698 | // 0 - Movimento de pedra simples nao eh para traz |
mayarasi | 0:e1459cfa4a6a | 699 | // 1 - Movimento de pedra simples eh para traz |
mayarasi | 0:e1459cfa4a6a | 700 | int Movimento_Para_Traz(int linha_origem, int linha_destino, char jogador1, char jogador_vez) { |
mayarasi | 0:e1459cfa4a6a | 701 | |
mayarasi | 0:e1459cfa4a6a | 702 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 703 | |
mayarasi | 0:e1459cfa4a6a | 704 | // O jogador 1 sempre começa o jogo e ele sempre inicia a partir da parte de baixo do tabuleiro |
mayarasi | 0:e1459cfa4a6a | 705 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 706 | if ((linha_origem - linha_destino) <= 0) { |
mayarasi | 0:e1459cfa4a6a | 707 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 708 | } |
mayarasi | 0:e1459cfa4a6a | 709 | } |
mayarasi | 0:e1459cfa4a6a | 710 | else { |
mayarasi | 0:e1459cfa4a6a | 711 | if ((linha_destino - linha_origem) <= 0) { |
mayarasi | 0:e1459cfa4a6a | 712 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 713 | } |
mayarasi | 0:e1459cfa4a6a | 714 | } |
mayarasi | 0:e1459cfa4a6a | 715 | |
mayarasi | 0:e1459cfa4a6a | 716 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 717 | } |
mayarasi | 0:e1459cfa4a6a | 718 | |
mayarasi | 0:e1459cfa4a6a | 719 | // retorna numero de pedras que faltam capturar |
mayarasi | 0:e1459cfa4a6a | 720 | int Existe_Pedra_Para_Capturar(void) { |
mayarasi | 0:e1459cfa4a6a | 721 | |
mayarasi | 0:e1459cfa4a6a | 722 | return 0; |
mayarasi | 0:e1459cfa4a6a | 723 | #if 0 |
mayarasi | 0:e1459cfa4a6a | 724 | if ( (numero_pedras_para_capturar == -1) || (numero_pedras_para_capturar == 0) ) { |
mayarasi | 0:e1459cfa4a6a | 725 | return 0; |
mayarasi | 0:e1459cfa4a6a | 726 | } |
mayarasi | 0:e1459cfa4a6a | 727 | return numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 728 | #endif |
mayarasi | 0:e1459cfa4a6a | 729 | } |
mayarasi | 0:e1459cfa4a6a | 730 | |
mayarasi | 0:e1459cfa4a6a | 731 | char Posiciona_Pedra(int linha_origem, int coluna_origem, int linha_destino, int coluna_destino, char jogador_vez, char jogador1) { |
mayarasi | 0:e1459cfa4a6a | 732 | char retorno; |
mayarasi | 0:e1459cfa4a6a | 733 | |
mayarasi | 0:e1459cfa4a6a | 734 | // O jogador 1 sempre começa o jogo e ele sempre inicia a partir da parte de baixo do tabuleiro |
mayarasi | 0:e1459cfa4a6a | 735 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 736 | //if ( (linha_destino == (MINLINHA - 1)) && ( (numero_pedras_para_capturar == -1) || (numero_pedras_para_capturar == 0)) ) { |
mayarasi | 0:e1459cfa4a6a | 737 | if (linha_destino == (MINLINHA - 1)) { |
mayarasi | 0:e1459cfa4a6a | 738 | retorno = PEDRA_DAMA_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 739 | } |
mayarasi | 0:e1459cfa4a6a | 740 | else { |
mayarasi | 0:e1459cfa4a6a | 741 | retorno = tabuleiro_jogada[linha_origem][coluna_origem]; |
mayarasi | 0:e1459cfa4a6a | 742 | } |
mayarasi | 0:e1459cfa4a6a | 743 | } |
mayarasi | 0:e1459cfa4a6a | 744 | else { |
mayarasi | 0:e1459cfa4a6a | 745 | //if ((linha_destino == (MAXLINHA - 1)) && ((numero_pedras_para_capturar == -1) || (numero_pedras_para_capturar == 0))) { |
mayarasi | 0:e1459cfa4a6a | 746 | if (linha_destino == (MAXLINHA - 1)) { |
mayarasi | 0:e1459cfa4a6a | 747 | retorno = PEDRA_DAMA_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 748 | } |
mayarasi | 0:e1459cfa4a6a | 749 | else { |
mayarasi | 0:e1459cfa4a6a | 750 | retorno = tabuleiro_jogada[linha_origem][coluna_origem]; |
mayarasi | 0:e1459cfa4a6a | 751 | } |
mayarasi | 0:e1459cfa4a6a | 752 | } |
mayarasi | 0:e1459cfa4a6a | 753 | |
mayarasi | 0:e1459cfa4a6a | 754 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 755 | } |
mayarasi | 0:e1459cfa4a6a | 756 | |
mayarasi | 0:e1459cfa4a6a | 757 | // 0 - Esta no caminho maximo de captura |
mayarasi | 0:e1459cfa4a6a | 758 | // 1 - Nao esta no caminho maximo de captura |
mayarasi | 0:e1459cfa4a6a | 759 | int Caminho_Maximo_Captura(int linha_origem, int coluna_origem, int linha_destino, int coluna_destino) { |
mayarasi | 0:e1459cfa4a6a | 760 | // @todo fazer funcao |
mayarasi | 0:e1459cfa4a6a | 761 | //int retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 762 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 763 | |
mayarasi | 0:e1459cfa4a6a | 764 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 765 | } |
mayarasi | 0:e1459cfa4a6a | 766 | |
mayarasi | 0:e1459cfa4a6a | 767 | void Calcula_Quantidade_Maxima_Capturas(char jogador_vez, char jogador1, char jogador2) { |
mayarasi | 0:e1459cfa4a6a | 768 | |
mayarasi | 0:e1459cfa4a6a | 769 | // @todo fazer funcao |
mayarasi | 0:e1459cfa4a6a | 770 | |
mayarasi | 0:e1459cfa4a6a | 771 | return; |
mayarasi | 0:e1459cfa4a6a | 772 | |
mayarasi | 0:e1459cfa4a6a | 773 | //if (numero_pedras_para_capturar > 0) { |
mayarasi | 0:e1459cfa4a6a | 774 | // return; // funcao ja foi executada |
mayarasi | 0:e1459cfa4a6a | 775 | //} |
mayarasi | 0:e1459cfa4a6a | 776 | |
mayarasi | 0:e1459cfa4a6a | 777 | } |
mayarasi | 0:e1459cfa4a6a | 778 | |
mayarasi | 0:e1459cfa4a6a | 779 | void contabiliza_pedra(char jogador_vez, char jogador1, char jogador2) { |
mayarasi | 0:e1459cfa4a6a | 780 | |
mayarasi | 0:e1459cfa4a6a | 781 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 782 | ++numero_pedras_capturadas_jogador1; |
mayarasi | 0:e1459cfa4a6a | 783 | } |
mayarasi | 0:e1459cfa4a6a | 784 | else { |
mayarasi | 0:e1459cfa4a6a | 785 | ++numero_pedras_capturadas_jogador2; |
mayarasi | 0:e1459cfa4a6a | 786 | } |
mayarasi | 0:e1459cfa4a6a | 787 | } |
mayarasi | 0:e1459cfa4a6a | 788 | |
mayarasi | 0:e1459cfa4a6a | 789 | // 0 - Movimento Invalido |
mayarasi | 0:e1459cfa4a6a | 790 | // 1 - Movimento Valido |
mayarasi | 0:e1459cfa4a6a | 791 | int Movimento_Valido(int &linha_origem, int &coluna_origem, int &linha_destino, int &coluna_destino, char jogador_vez, char jogador1, char jogador2) { |
mayarasi | 0:e1459cfa4a6a | 792 | |
mayarasi | 0:e1459cfa4a6a | 793 | char pedra_normal = 1; |
mayarasi | 0:e1459cfa4a6a | 794 | char pedra_normal_oponente; |
mayarasi | 0:e1459cfa4a6a | 795 | char pedra_dama_oponente; |
mayarasi | 0:e1459cfa4a6a | 796 | char pedra_normal_jogador; |
mayarasi | 0:e1459cfa4a6a | 797 | char pedra_dama_jogador; |
mayarasi | 0:e1459cfa4a6a | 798 | int unidade_linha, unidade_coluna, linha_aux, coluna_aux, pedras_capturadas; |
mayarasi | 0:e1459cfa4a6a | 799 | int linha_pedra_capturada, coluna_pedra_capturada; |
mayarasi | 0:e1459cfa4a6a | 800 | |
mayarasi | 0:e1459cfa4a6a | 801 | // Valida se existe uma pedra deste jogador no tabuleiro de jogada na posicao de origem. |
mayarasi | 0:e1459cfa4a6a | 802 | // O tabuleiro de jogada server para guardar a memoria de uma jogada com multiplas capturas, |
mayarasi | 0:e1459cfa4a6a | 803 | // por isso que´eh utilizado para validar as jogadas. |
mayarasi | 0:e1459cfa4a6a | 804 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 805 | pedra_normal_jogador = PEDRA_NORMAL_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 806 | pedra_dama_jogador = PEDRA_DAMA_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 807 | pedra_normal_oponente = PEDRA_NORMAL_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 808 | pedra_dama_oponente = PEDRA_DAMA_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 809 | if (tabuleiro_jogada[linha_origem][coluna_origem] == PEDRA_NORMAL_JOGADOR1) { |
mayarasi | 0:e1459cfa4a6a | 810 | } else if (tabuleiro_jogada[linha_origem][coluna_origem] == PEDRA_DAMA_JOGADOR1) { |
mayarasi | 0:e1459cfa4a6a | 811 | pedra_normal = 0; |
mayarasi | 0:e1459cfa4a6a | 812 | } else { |
mayarasi | 0:e1459cfa4a6a | 813 | return 0; // pedra nao pertence ao jogador |
mayarasi | 0:e1459cfa4a6a | 814 | } |
mayarasi | 0:e1459cfa4a6a | 815 | } |
mayarasi | 0:e1459cfa4a6a | 816 | else { |
mayarasi | 0:e1459cfa4a6a | 817 | pedra_normal_jogador = PEDRA_NORMAL_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 818 | pedra_dama_jogador = PEDRA_DAMA_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 819 | pedra_normal_oponente = PEDRA_NORMAL_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 820 | pedra_dama_oponente = PEDRA_DAMA_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 821 | if (tabuleiro_jogada[linha_origem][coluna_origem] == PEDRA_NORMAL_JOGADOR2) { |
mayarasi | 0:e1459cfa4a6a | 822 | } else if (tabuleiro_jogada[linha_origem][coluna_origem] == PEDRA_DAMA_JOGADOR2) { |
mayarasi | 0:e1459cfa4a6a | 823 | pedra_normal = 0; |
mayarasi | 0:e1459cfa4a6a | 824 | } |
mayarasi | 0:e1459cfa4a6a | 825 | else { |
mayarasi | 0:e1459cfa4a6a | 826 | return 0; // pedra nao pertence ao jogador |
mayarasi | 0:e1459cfa4a6a | 827 | } |
mayarasi | 0:e1459cfa4a6a | 828 | } |
mayarasi | 0:e1459cfa4a6a | 829 | |
mayarasi | 0:e1459cfa4a6a | 830 | Calcula_Quantidade_Maxima_Capturas(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 831 | |
mayarasi | 0:e1459cfa4a6a | 832 | if (pedra_normal) { |
mayarasi | 0:e1459cfa4a6a | 833 | // pedra jogada eh normal |
mayarasi | 0:e1459cfa4a6a | 834 | // valida se a coordenada de destino eh valida para uma captura |
mayarasi | 0:e1459cfa4a6a | 835 | if ((linha_origem - linha_destino) == 2) { |
mayarasi | 0:e1459cfa4a6a | 836 | if ((coluna_origem - coluna_destino) == 2) { |
mayarasi | 0:e1459cfa4a6a | 837 | if (Caminho_Maximo_Captura(linha_origem, coluna_origem, linha_destino, coluna_destino)) { |
mayarasi | 0:e1459cfa4a6a | 838 | return 0; // Eh obrigatorio executar a jogada que |
mayarasi | 0:e1459cfa4a6a | 839 | // captura o maximo de pedras do adversario |
mayarasi | 0:e1459cfa4a6a | 840 | } |
mayarasi | 0:e1459cfa4a6a | 841 | // diagonal para cima e para esquerda |
mayarasi | 0:e1459cfa4a6a | 842 | if ( (tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) || |
mayarasi | 0:e1459cfa4a6a | 843 | (tabuleiro_jogada[linha_destino][coluna_destino] == JOGADA) ) { // a posicao destino deve estar vazia ou foi uma jogada |
mayarasi | 0:e1459cfa4a6a | 844 | if (tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] == pedra_normal_oponente) { |
mayarasi | 0:e1459cfa4a6a | 845 | // pedra normal do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 846 | tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 847 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 848 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 849 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 850 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 851 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 852 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 853 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 854 | } |
mayarasi | 0:e1459cfa4a6a | 855 | else if (tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] == pedra_dama_oponente) { |
mayarasi | 0:e1459cfa4a6a | 856 | // pedra dama do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 857 | tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 858 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 859 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 860 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 861 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 862 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 863 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 864 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 865 | } |
mayarasi | 0:e1459cfa4a6a | 866 | else { |
mayarasi | 0:e1459cfa4a6a | 867 | // pedra capturada invalida!! |
mayarasi | 0:e1459cfa4a6a | 868 | return 0; |
mayarasi | 0:e1459cfa4a6a | 869 | } |
mayarasi | 0:e1459cfa4a6a | 870 | } |
mayarasi | 0:e1459cfa4a6a | 871 | else { |
mayarasi | 0:e1459cfa4a6a | 872 | return 0; // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 873 | } |
mayarasi | 0:e1459cfa4a6a | 874 | } |
mayarasi | 0:e1459cfa4a6a | 875 | else if ((coluna_destino - coluna_origem) == 2) { |
mayarasi | 0:e1459cfa4a6a | 876 | if (Caminho_Maximo_Captura(linha_origem, coluna_origem, linha_destino, coluna_destino)) { |
mayarasi | 0:e1459cfa4a6a | 877 | return 0; // Eh obrigatorio executar a jogada que |
mayarasi | 0:e1459cfa4a6a | 878 | // captura o maximo de pedras do adversario |
mayarasi | 0:e1459cfa4a6a | 879 | } |
mayarasi | 0:e1459cfa4a6a | 880 | // diagonal para cima e para direita |
mayarasi | 0:e1459cfa4a6a | 881 | if ((tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) || |
mayarasi | 0:e1459cfa4a6a | 882 | (tabuleiro_jogada[linha_destino][coluna_destino] == JOGADA)) { // a posicao destino deve estar vazia ou foi uma jogada |
mayarasi | 0:e1459cfa4a6a | 883 | if (tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] == pedra_normal_oponente) { |
mayarasi | 0:e1459cfa4a6a | 884 | // pedra normal do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 885 | tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 886 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 887 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 888 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 889 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 890 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 891 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 892 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 893 | } |
mayarasi | 0:e1459cfa4a6a | 894 | else if (tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] == pedra_dama_oponente) { |
mayarasi | 0:e1459cfa4a6a | 895 | // pedra dama do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 896 | tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 897 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 898 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 899 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 900 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 901 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 902 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 903 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 904 | } |
mayarasi | 0:e1459cfa4a6a | 905 | else { |
mayarasi | 0:e1459cfa4a6a | 906 | // pedra capturada invalida!! |
mayarasi | 0:e1459cfa4a6a | 907 | return 0; |
mayarasi | 0:e1459cfa4a6a | 908 | } |
mayarasi | 0:e1459cfa4a6a | 909 | } |
mayarasi | 0:e1459cfa4a6a | 910 | else { |
mayarasi | 0:e1459cfa4a6a | 911 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 912 | return 0; |
mayarasi | 0:e1459cfa4a6a | 913 | } |
mayarasi | 0:e1459cfa4a6a | 914 | } |
mayarasi | 0:e1459cfa4a6a | 915 | else { |
mayarasi | 0:e1459cfa4a6a | 916 | // uma jogada de uma pedra normal apenas pode capturar uma pedra para esquerda ou para direita em diagonal |
mayarasi | 0:e1459cfa4a6a | 917 | return 0; |
mayarasi | 0:e1459cfa4a6a | 918 | } |
mayarasi | 0:e1459cfa4a6a | 919 | } else if ((linha_destino - linha_origem) == 2) { |
mayarasi | 0:e1459cfa4a6a | 920 | if ((coluna_origem - coluna_destino) == 2) { |
mayarasi | 0:e1459cfa4a6a | 921 | if (Caminho_Maximo_Captura(linha_origem, coluna_origem, linha_destino, coluna_destino)) { |
mayarasi | 0:e1459cfa4a6a | 922 | return 0; // Eh obrigatorio executar a jogada que |
mayarasi | 0:e1459cfa4a6a | 923 | // captura o maximo de pedras do adversario |
mayarasi | 0:e1459cfa4a6a | 924 | } |
mayarasi | 0:e1459cfa4a6a | 925 | // diagonal para baixo e para esquerda |
mayarasi | 0:e1459cfa4a6a | 926 | if ((tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) || |
mayarasi | 0:e1459cfa4a6a | 927 | (tabuleiro_jogada[linha_destino][coluna_destino] == JOGADA)) { // a posicao destino deve estar vazia ou foi uma jogada |
mayarasi | 0:e1459cfa4a6a | 928 | if (tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] == pedra_normal_oponente) { |
mayarasi | 0:e1459cfa4a6a | 929 | // pedra normal do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 930 | tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 931 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 932 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 933 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 934 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 935 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 936 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 937 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 938 | } |
mayarasi | 0:e1459cfa4a6a | 939 | else if (tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] == pedra_dama_oponente) { |
mayarasi | 0:e1459cfa4a6a | 940 | // pedra dama do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 941 | tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 942 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 943 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 944 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 945 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 946 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 947 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 948 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 949 | } |
mayarasi | 0:e1459cfa4a6a | 950 | else { |
mayarasi | 0:e1459cfa4a6a | 951 | // pedra capturada invalida!! |
mayarasi | 0:e1459cfa4a6a | 952 | return 0; |
mayarasi | 0:e1459cfa4a6a | 953 | } |
mayarasi | 0:e1459cfa4a6a | 954 | } |
mayarasi | 0:e1459cfa4a6a | 955 | else { |
mayarasi | 0:e1459cfa4a6a | 956 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 957 | return 0; |
mayarasi | 0:e1459cfa4a6a | 958 | } |
mayarasi | 0:e1459cfa4a6a | 959 | } |
mayarasi | 0:e1459cfa4a6a | 960 | else if ((coluna_destino - coluna_origem) == 2) { |
mayarasi | 0:e1459cfa4a6a | 961 | if (Caminho_Maximo_Captura(linha_origem, coluna_origem, linha_destino, coluna_destino)) { |
mayarasi | 0:e1459cfa4a6a | 962 | return 0; // Eh obrigatorio executar a jogada que |
mayarasi | 0:e1459cfa4a6a | 963 | // captura o maximo de pedras do adversario |
mayarasi | 0:e1459cfa4a6a | 964 | } |
mayarasi | 0:e1459cfa4a6a | 965 | // diagonal para baixo e para direita |
mayarasi | 0:e1459cfa4a6a | 966 | if ((tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) || |
mayarasi | 0:e1459cfa4a6a | 967 | (tabuleiro_jogada[linha_destino][coluna_destino] == JOGADA)) { // a posicao destino deve estar vazia ou foi uma jogada |
mayarasi | 0:e1459cfa4a6a | 968 | if (tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] == pedra_normal_oponente) { |
mayarasi | 0:e1459cfa4a6a | 969 | // pedra normal do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 970 | tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 971 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 972 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 973 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 974 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 975 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 976 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 977 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 978 | } |
mayarasi | 0:e1459cfa4a6a | 979 | else if (tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] == pedra_dama_oponente) { |
mayarasi | 0:e1459cfa4a6a | 980 | // pedra dama do oponente capturada |
mayarasi | 0:e1459cfa4a6a | 981 | tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 982 | //--numero_pedras_para_capturar; |
mayarasi | 0:e1459cfa4a6a | 983 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 984 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 985 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 986 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 987 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 988 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 989 | } |
mayarasi | 0:e1459cfa4a6a | 990 | else { |
mayarasi | 0:e1459cfa4a6a | 991 | // pedra capturada invalida!! |
mayarasi | 0:e1459cfa4a6a | 992 | return 0; |
mayarasi | 0:e1459cfa4a6a | 993 | } |
mayarasi | 0:e1459cfa4a6a | 994 | } |
mayarasi | 0:e1459cfa4a6a | 995 | else { |
mayarasi | 0:e1459cfa4a6a | 996 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 997 | return 0; |
mayarasi | 0:e1459cfa4a6a | 998 | } |
mayarasi | 0:e1459cfa4a6a | 999 | } |
mayarasi | 0:e1459cfa4a6a | 1000 | else { |
mayarasi | 0:e1459cfa4a6a | 1001 | // uma jogada de uma pedra normal apenas pode capturar uma pedra para esquerda ou para direita em diagonal |
mayarasi | 0:e1459cfa4a6a | 1002 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1003 | } |
mayarasi | 0:e1459cfa4a6a | 1004 | } |
mayarasi | 0:e1459cfa4a6a | 1005 | else if ((linha_origem - linha_destino) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1006 | if (Movimento_Para_Traz(linha_origem, linha_destino, jogador1, jogador_vez)) { |
mayarasi | 0:e1459cfa4a6a | 1007 | return 0; // Uma pedra simples nao pode se movimentar para traz |
mayarasi | 0:e1459cfa4a6a | 1008 | } |
mayarasi | 0:e1459cfa4a6a | 1009 | else if (Existe_Pedra_Para_Capturar()) { |
mayarasi | 0:e1459cfa4a6a | 1010 | return 0; // Eh obrigatorio capturar uma pedra |
mayarasi | 0:e1459cfa4a6a | 1011 | } |
mayarasi | 0:e1459cfa4a6a | 1012 | else if (Movimento_Multiplo()) { |
mayarasi | 0:e1459cfa4a6a | 1013 | return 0; // Movimento de multiplas capturas, nao pode fazer um movimento simples apos a captura |
mayarasi | 0:e1459cfa4a6a | 1014 | } |
mayarasi | 0:e1459cfa4a6a | 1015 | // pedra fez um movimento, nao esta capturando uma pedra |
mayarasi | 0:e1459cfa4a6a | 1016 | if ((coluna_origem - coluna_destino) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1017 | // diagonal para cima e para esquerda |
mayarasi | 0:e1459cfa4a6a | 1018 | if (tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) { // a posicao destino deve estar vazia |
mayarasi | 0:e1459cfa4a6a | 1019 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1020 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1021 | jogador_vez, jogador1);; |
mayarasi | 0:e1459cfa4a6a | 1022 | jogada_em_que_ultima_pedra_nomal_movimentada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1023 | tabuleiro_jogada[linha_origem][coluna_origem] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1024 | } |
mayarasi | 0:e1459cfa4a6a | 1025 | else { |
mayarasi | 0:e1459cfa4a6a | 1026 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1027 | } |
mayarasi | 0:e1459cfa4a6a | 1028 | } |
mayarasi | 0:e1459cfa4a6a | 1029 | else if ((coluna_destino - coluna_origem) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1030 | // diagonal para cima e para direita |
mayarasi | 0:e1459cfa4a6a | 1031 | if (tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) { // a posicao destino deve estar vazia |
mayarasi | 0:e1459cfa4a6a | 1032 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1033 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1034 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 1035 | jogada_em_que_ultima_pedra_nomal_movimentada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1036 | tabuleiro_jogada[linha_origem][coluna_origem] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1037 | } |
mayarasi | 0:e1459cfa4a6a | 1038 | else { |
mayarasi | 0:e1459cfa4a6a | 1039 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 1040 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1041 | } |
mayarasi | 0:e1459cfa4a6a | 1042 | } |
mayarasi | 0:e1459cfa4a6a | 1043 | else { |
mayarasi | 0:e1459cfa4a6a | 1044 | // uma jogada de uma pedra normal apenas pode andar uma casa para esquerda ou para direita em diagonal |
mayarasi | 0:e1459cfa4a6a | 1045 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1046 | } |
mayarasi | 0:e1459cfa4a6a | 1047 | } |
mayarasi | 0:e1459cfa4a6a | 1048 | else if ((linha_destino - linha_origem) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1049 | if (Movimento_Para_Traz(linha_origem, linha_destino, jogador1, jogador_vez)) { |
mayarasi | 0:e1459cfa4a6a | 1050 | return 0; // Uma pedra simples nao pode se movimentar para traz |
mayarasi | 0:e1459cfa4a6a | 1051 | } |
mayarasi | 0:e1459cfa4a6a | 1052 | else if (Existe_Pedra_Para_Capturar()) { |
mayarasi | 0:e1459cfa4a6a | 1053 | return 0; // Eh obrigatorio capturar uma pedra |
mayarasi | 0:e1459cfa4a6a | 1054 | } |
mayarasi | 0:e1459cfa4a6a | 1055 | else if (Movimento_Multiplo()) { |
mayarasi | 0:e1459cfa4a6a | 1056 | return 0; // Movimento de multiplas capturas, nao pode fazer um movimento simples apos a captura |
mayarasi | 0:e1459cfa4a6a | 1057 | } |
mayarasi | 0:e1459cfa4a6a | 1058 | if ((coluna_origem - coluna_destino) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1059 | // diagonal para baixo e para esquerda |
mayarasi | 0:e1459cfa4a6a | 1060 | if (tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) { // a posicao destino deve estar vazia |
mayarasi | 0:e1459cfa4a6a | 1061 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1062 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1063 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 1064 | jogada_em_que_ultima_pedra_nomal_movimentada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1065 | tabuleiro_jogada[linha_origem][coluna_origem] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1066 | } |
mayarasi | 0:e1459cfa4a6a | 1067 | else { |
mayarasi | 0:e1459cfa4a6a | 1068 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 1069 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1070 | } |
mayarasi | 0:e1459cfa4a6a | 1071 | } |
mayarasi | 0:e1459cfa4a6a | 1072 | else if ((coluna_destino - coluna_origem) == 1) { |
mayarasi | 0:e1459cfa4a6a | 1073 | // diagonal para baixo e para direita |
mayarasi | 0:e1459cfa4a6a | 1074 | if (tabuleiro_jogada[linha_destino][coluna_destino] == VAZIO) { // a posicao destino deve estar vazia |
mayarasi | 0:e1459cfa4a6a | 1075 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1076 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1077 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 1078 | jogada_em_que_ultima_pedra_nomal_movimentada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1079 | tabuleiro_jogada[linha_origem][coluna_origem] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1080 | } |
mayarasi | 0:e1459cfa4a6a | 1081 | else { |
mayarasi | 0:e1459cfa4a6a | 1082 | // casa destino ocupada!! |
mayarasi | 0:e1459cfa4a6a | 1083 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1084 | } |
mayarasi | 0:e1459cfa4a6a | 1085 | } |
mayarasi | 0:e1459cfa4a6a | 1086 | else { |
mayarasi | 0:e1459cfa4a6a | 1087 | // uma jogada de uma pedra normal apenas pode andar uma casa para esquerda ou para direita em diagonal |
mayarasi | 0:e1459cfa4a6a | 1088 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1089 | } |
mayarasi | 0:e1459cfa4a6a | 1090 | } |
mayarasi | 0:e1459cfa4a6a | 1091 | else { |
mayarasi | 0:e1459cfa4a6a | 1092 | // pedra normal executou um movimento invalido!! |
mayarasi | 0:e1459cfa4a6a | 1093 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1094 | } |
mayarasi | 0:e1459cfa4a6a | 1095 | } else { |
mayarasi | 0:e1459cfa4a6a | 1096 | |
mayarasi | 0:e1459cfa4a6a | 1097 | if (tabuleiro_jogada[linha_destino][coluna_destino] != VAZIO) { |
mayarasi | 0:e1459cfa4a6a | 1098 | return 0; // A dama nao pode movimentar-se para uma casa ocupada |
mayarasi | 0:e1459cfa4a6a | 1099 | } |
mayarasi | 0:e1459cfa4a6a | 1100 | |
mayarasi | 0:e1459cfa4a6a | 1101 | linha_aux = linha_origem; |
mayarasi | 0:e1459cfa4a6a | 1102 | coluna_aux = coluna_origem; |
mayarasi | 0:e1459cfa4a6a | 1103 | if (coluna_origem > coluna_destino) { |
mayarasi | 0:e1459cfa4a6a | 1104 | unidade_coluna = -1; |
mayarasi | 0:e1459cfa4a6a | 1105 | } |
mayarasi | 0:e1459cfa4a6a | 1106 | else { |
mayarasi | 0:e1459cfa4a6a | 1107 | unidade_coluna = 1; |
mayarasi | 0:e1459cfa4a6a | 1108 | } |
mayarasi | 0:e1459cfa4a6a | 1109 | |
mayarasi | 0:e1459cfa4a6a | 1110 | if (linha_origem > linha_destino) { |
mayarasi | 0:e1459cfa4a6a | 1111 | unidade_linha = -1; |
mayarasi | 0:e1459cfa4a6a | 1112 | } |
mayarasi | 0:e1459cfa4a6a | 1113 | else { |
mayarasi | 0:e1459cfa4a6a | 1114 | unidade_linha = 1; |
mayarasi | 0:e1459cfa4a6a | 1115 | } |
mayarasi | 0:e1459cfa4a6a | 1116 | |
mayarasi | 0:e1459cfa4a6a | 1117 | pedras_capturadas = 0; |
mayarasi | 0:e1459cfa4a6a | 1118 | |
mayarasi | 0:e1459cfa4a6a | 1119 | do { |
mayarasi | 0:e1459cfa4a6a | 1120 | linha_aux += unidade_linha; |
mayarasi | 0:e1459cfa4a6a | 1121 | coluna_aux += unidade_coluna; |
mayarasi | 0:e1459cfa4a6a | 1122 | |
mayarasi | 0:e1459cfa4a6a | 1123 | if ((tabuleiro_jogada[linha_aux][coluna_aux] == pedra_normal_jogador) || |
mayarasi | 0:e1459cfa4a6a | 1124 | (tabuleiro_jogada[linha_aux][coluna_aux] == pedra_dama_jogador)) { |
mayarasi | 0:e1459cfa4a6a | 1125 | return 0; // Dama nao pode pular pedras do mesmo jogador |
mayarasi | 0:e1459cfa4a6a | 1126 | } else if ((tabuleiro_jogada[linha_aux][coluna_aux] == pedra_normal_oponente) || |
mayarasi | 0:e1459cfa4a6a | 1127 | (tabuleiro_jogada[linha_aux][coluna_aux] == pedra_dama_oponente)) { |
mayarasi | 0:e1459cfa4a6a | 1128 | ++pedras_capturadas; // A dama capturou uma pedra do oponente |
mayarasi | 0:e1459cfa4a6a | 1129 | linha_pedra_capturada = linha_aux; |
mayarasi | 0:e1459cfa4a6a | 1130 | coluna_pedra_capturada = coluna_aux; |
mayarasi | 0:e1459cfa4a6a | 1131 | } |
mayarasi | 0:e1459cfa4a6a | 1132 | |
mayarasi | 0:e1459cfa4a6a | 1133 | if (pedras_capturadas > 1) { |
mayarasi | 0:e1459cfa4a6a | 1134 | return 0; // A dama nao pode capturar mais de uma pedra em um unico movimento |
mayarasi | 0:e1459cfa4a6a | 1135 | } |
mayarasi | 0:e1459cfa4a6a | 1136 | |
mayarasi | 0:e1459cfa4a6a | 1137 | } while (linha_aux != linha_destino); |
mayarasi | 0:e1459cfa4a6a | 1138 | |
mayarasi | 0:e1459cfa4a6a | 1139 | if ((pedras_capturadas == 0) && (Existe_Pedra_Para_Capturar() || Movimento_Multiplo())) { |
mayarasi | 0:e1459cfa4a6a | 1140 | return 0; // Eh obrigatorio a captura |
mayarasi | 0:e1459cfa4a6a | 1141 | } else if (Caminho_Maximo_Captura(linha_origem, coluna_origem, linha_destino, coluna_destino)) { |
mayarasi | 0:e1459cfa4a6a | 1142 | return 0; // Eh obrigatorio executar a jogada que |
mayarasi | 0:e1459cfa4a6a | 1143 | // captura o maximo de pedras do adversario |
mayarasi | 0:e1459cfa4a6a | 1144 | } |
mayarasi | 0:e1459cfa4a6a | 1145 | |
mayarasi | 0:e1459cfa4a6a | 1146 | if (pedras_capturadas == 1) { |
mayarasi | 0:e1459cfa4a6a | 1147 | contabiliza_pedra(jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1148 | jogada_em_que_ultima_pedra_capturada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1149 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1150 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1151 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 1152 | tabuleiro_jogada[linha_origem][coluna_origem] = JOGADA; |
mayarasi | 0:e1459cfa4a6a | 1153 | tabuleiro_jogada[linha_pedra_capturada][coluna_pedra_capturada] = CAPTURADA; |
mayarasi | 0:e1459cfa4a6a | 1154 | } |
mayarasi | 0:e1459cfa4a6a | 1155 | else { |
mayarasi | 0:e1459cfa4a6a | 1156 | tabuleiro_jogada[linha_destino][coluna_destino] = |
mayarasi | 0:e1459cfa4a6a | 1157 | Posiciona_Pedra(linha_origem, coluna_origem, linha_destino, coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1158 | jogador_vez, jogador1); |
mayarasi | 0:e1459cfa4a6a | 1159 | jogada_em_que_ultima_pedra_nomal_movimentada = jogadas + 1; |
mayarasi | 0:e1459cfa4a6a | 1160 | tabuleiro_jogada[linha_origem][coluna_origem] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1161 | } |
mayarasi | 0:e1459cfa4a6a | 1162 | } |
mayarasi | 0:e1459cfa4a6a | 1163 | |
mayarasi | 0:e1459cfa4a6a | 1164 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1165 | } |
mayarasi | 0:e1459cfa4a6a | 1166 | |
mayarasi | 0:e1459cfa4a6a | 1167 | // 0 - Faixa invalida |
mayarasi | 0:e1459cfa4a6a | 1168 | // 1 - Faixa valida |
mayarasi | 0:e1459cfa4a6a | 1169 | int Faixa_Valida(int linha_origem, int coluna_origem, int linha_destino, int coluna_destino) { |
mayarasi | 0:e1459cfa4a6a | 1170 | |
mayarasi | 0:e1459cfa4a6a | 1171 | int retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1172 | |
mayarasi | 0:e1459cfa4a6a | 1173 | // Testa a faixa de valores |
mayarasi | 0:e1459cfa4a6a | 1174 | if ( (linha_origem < 0) || (linha_origem > (MAXLINHA - 1)) ) { |
mayarasi | 0:e1459cfa4a6a | 1175 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1176 | } |
mayarasi | 0:e1459cfa4a6a | 1177 | else if ((linha_destino < 0) || (linha_destino > (MAXLINHA - 1))) { |
mayarasi | 0:e1459cfa4a6a | 1178 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1179 | } |
mayarasi | 0:e1459cfa4a6a | 1180 | else if ((coluna_origem < 0) || (coluna_origem > (MAXCOLUNA - 1))) { |
mayarasi | 0:e1459cfa4a6a | 1181 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1182 | } |
mayarasi | 0:e1459cfa4a6a | 1183 | else if ((coluna_destino < 0) || (coluna_destino > (MAXCOLUNA - 1))) { |
mayarasi | 0:e1459cfa4a6a | 1184 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1185 | } |
mayarasi | 0:e1459cfa4a6a | 1186 | // Testa se eh uma casa de movimentacao de pedra |
mayarasi | 0:e1459cfa4a6a | 1187 | else if ( (linha_origem % 2 == 0) && (coluna_origem % 2 == 0) ) { |
mayarasi | 0:e1459cfa4a6a | 1188 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1189 | } |
mayarasi | 0:e1459cfa4a6a | 1190 | else if ((linha_destino % 2 == 0) && (coluna_destino % 2 == 0)) { |
mayarasi | 0:e1459cfa4a6a | 1191 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1192 | } |
mayarasi | 0:e1459cfa4a6a | 1193 | else if ((linha_origem % 2 == 1) && (coluna_origem % 2 == 1)) { |
mayarasi | 0:e1459cfa4a6a | 1194 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1195 | } |
mayarasi | 0:e1459cfa4a6a | 1196 | else if ((linha_destino % 2 == 1) && (coluna_destino % 2 == 1)) { |
mayarasi | 0:e1459cfa4a6a | 1197 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1198 | } |
mayarasi | 0:e1459cfa4a6a | 1199 | |
mayarasi | 0:e1459cfa4a6a | 1200 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1201 | } |
mayarasi | 0:e1459cfa4a6a | 1202 | |
mayarasi | 0:e1459cfa4a6a | 1203 | void Entrada(int &linha_origem, int &coluna_origem, int &linha_destino, int &coluna_destino, char jogador_vez, char jogador1, char jogador2){ |
mayarasi | 0:e1459cfa4a6a | 1204 | |
mayarasi | 0:e1459cfa4a6a | 1205 | char nome[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 1206 | |
mayarasi | 0:e1459cfa4a6a | 1207 | do { |
mayarasi | 0:e1459cfa4a6a | 1208 | //LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 1209 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1210 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 1211 | PRINTF("Jogador %s entre com a coordenada de origem da pedra a ser movida.%s", retorna_nome_jogador(jogador_vez, nome), FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1212 | PRINTF("Entre com o valor da linha(1-8): "); |
mayarasi | 0:e1459cfa4a6a | 1213 | linha_origem = lerIteiro() - 1; |
mayarasi | 0:e1459cfa4a6a | 1214 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1215 | PRINTF("Entre com o valor de coluna(1-8): "); |
mayarasi | 0:e1459cfa4a6a | 1216 | coluna_origem = lerIteiro() - 1; |
mayarasi | 0:e1459cfa4a6a | 1217 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1218 | |
mayarasi | 0:e1459cfa4a6a | 1219 | PRINTF("Jogador %s entre com a coordenada de destino da pedra a ser movida.%s", retorna_nome_jogador(jogador_vez, nome), FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1220 | PRINTF("Entre com o valor de linha(1-8): "); |
mayarasi | 0:e1459cfa4a6a | 1221 | linha_destino = lerIteiro() - 1; |
mayarasi | 0:e1459cfa4a6a | 1222 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1223 | PRINTF("Entre com o valor de coluna(1-8): "); |
mayarasi | 0:e1459cfa4a6a | 1224 | coluna_destino = lerIteiro() - 1; |
mayarasi | 0:e1459cfa4a6a | 1225 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1226 | |
mayarasi | 0:e1459cfa4a6a | 1227 | if (Faixa_Valida(linha_origem, coluna_origem, linha_destino, coluna_destino) && |
mayarasi | 0:e1459cfa4a6a | 1228 | Movimento_Valido(linha_origem, coluna_origem, linha_destino, coluna_destino, jogador_vez, jogador1, jogador2)) { |
mayarasi | 0:e1459cfa4a6a | 1229 | break; |
mayarasi | 0:e1459cfa4a6a | 1230 | } else { |
mayarasi | 0:e1459cfa4a6a | 1231 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1232 | PRINTF("Movimento invalido!! Pressione <Qualquer Tecla>"); |
mayarasi | 0:e1459cfa4a6a | 1233 | GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 1234 | } |
mayarasi | 0:e1459cfa4a6a | 1235 | } while (1); |
mayarasi | 0:e1459cfa4a6a | 1236 | } |
mayarasi | 0:e1459cfa4a6a | 1237 | |
mayarasi | 0:e1459cfa4a6a | 1238 | void Numero_Oponentes(int &jogador1_pedra_normal, int &jogador1_pedra_dama, |
mayarasi | 0:e1459cfa4a6a | 1239 | int &jogador2_pedra_normal, int &jogador2_pedra_dama) { |
mayarasi | 0:e1459cfa4a6a | 1240 | |
mayarasi | 0:e1459cfa4a6a | 1241 | int linha, coluna; |
mayarasi | 0:e1459cfa4a6a | 1242 | |
mayarasi | 0:e1459cfa4a6a | 1243 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 1244 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 1245 | switch (tabuleiro_jogada[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 1246 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1247 | ++jogador1_pedra_normal; |
mayarasi | 0:e1459cfa4a6a | 1248 | break; |
mayarasi | 0:e1459cfa4a6a | 1249 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1250 | ++jogador1_pedra_dama; |
mayarasi | 0:e1459cfa4a6a | 1251 | break; |
mayarasi | 0:e1459cfa4a6a | 1252 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1253 | ++jogador2_pedra_normal; |
mayarasi | 0:e1459cfa4a6a | 1254 | break; |
mayarasi | 0:e1459cfa4a6a | 1255 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1256 | ++jogador2_pedra_dama; |
mayarasi | 0:e1459cfa4a6a | 1257 | break; |
mayarasi | 0:e1459cfa4a6a | 1258 | } |
mayarasi | 0:e1459cfa4a6a | 1259 | } |
mayarasi | 0:e1459cfa4a6a | 1260 | } |
mayarasi | 0:e1459cfa4a6a | 1261 | } |
mayarasi | 0:e1459cfa4a6a | 1262 | |
mayarasi | 0:e1459cfa4a6a | 1263 | // 0 - Existem oponentes |
mayarasi | 0:e1459cfa4a6a | 1264 | // 1 - Sem oponentes |
mayarasi | 0:e1459cfa4a6a | 1265 | int Sem_Oponentes(void) { |
mayarasi | 0:e1459cfa4a6a | 1266 | |
mayarasi | 0:e1459cfa4a6a | 1267 | int jogador1_pedra_normal = 0, jogador1_pedra_dama = 0, |
mayarasi | 0:e1459cfa4a6a | 1268 | jogador2_pedra_normal = 0, jogador2_pedra_dama = 0; |
mayarasi | 0:e1459cfa4a6a | 1269 | |
mayarasi | 0:e1459cfa4a6a | 1270 | Numero_Oponentes(jogador1_pedra_normal, jogador1_pedra_dama, |
mayarasi | 0:e1459cfa4a6a | 1271 | jogador2_pedra_normal, jogador2_pedra_dama); |
mayarasi | 0:e1459cfa4a6a | 1272 | |
mayarasi | 0:e1459cfa4a6a | 1273 | if ( (jogador1_pedra_normal || jogador1_pedra_dama) && (jogador2_pedra_normal || jogador2_pedra_dama) ) { |
mayarasi | 0:e1459cfa4a6a | 1274 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1275 | } |
mayarasi | 0:e1459cfa4a6a | 1276 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1277 | } |
mayarasi | 0:e1459cfa4a6a | 1278 | |
mayarasi | 0:e1459cfa4a6a | 1279 | // 0 - Sem condicoes especiais |
mayarasi | 0:e1459cfa4a6a | 1280 | // 1 - Com comdicoes especiais |
mayarasi | 0:e1459cfa4a6a | 1281 | int Codicoes_Especiais(void) { |
mayarasi | 0:e1459cfa4a6a | 1282 | // @todo falta terminar as codicoes especiais |
mayarasi | 0:e1459cfa4a6a | 1283 | |
mayarasi | 0:e1459cfa4a6a | 1284 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1285 | |
mayarasi | 0:e1459cfa4a6a | 1286 | int jogador1_pedra_normal = 0, jogador1_pedra_dama = 0, |
mayarasi | 0:e1459cfa4a6a | 1287 | jogador2_pedra_normal = 0, jogador2_pedra_dama = 0; |
mayarasi | 0:e1459cfa4a6a | 1288 | |
mayarasi | 0:e1459cfa4a6a | 1289 | Numero_Oponentes(jogador1_pedra_normal, jogador1_pedra_dama, |
mayarasi | 0:e1459cfa4a6a | 1290 | jogador2_pedra_normal, jogador2_pedra_dama); |
mayarasi | 0:e1459cfa4a6a | 1291 | |
mayarasi | 0:e1459cfa4a6a | 1292 | if ((jogador1_pedra_normal == 0) && |
mayarasi | 0:e1459cfa4a6a | 1293 | (jogador2_pedra_normal == 0) && |
mayarasi | 0:e1459cfa4a6a | 1294 | (jogador1_pedra_dama == 2) && |
mayarasi | 0:e1459cfa4a6a | 1295 | (jogador2_pedra_dama == 2)) { |
mayarasi | 0:e1459cfa4a6a | 1296 | // 2 damas contras 2 damas |
mayarasi | 0:e1459cfa4a6a | 1297 | } |
mayarasi | 0:e1459cfa4a6a | 1298 | |
mayarasi | 0:e1459cfa4a6a | 1299 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1300 | } |
mayarasi | 0:e1459cfa4a6a | 1301 | |
mayarasi | 0:e1459cfa4a6a | 1302 | // 0 - Sem empate |
mayarasi | 0:e1459cfa4a6a | 1303 | // 1 - Emapate |
mayarasi | 0:e1459cfa4a6a | 1304 | int Verifica_Empate(void) { |
mayarasi | 0:e1459cfa4a6a | 1305 | |
mayarasi | 0:e1459cfa4a6a | 1306 | // @todo Verificar como iniciar as condicoes especiais |
mayarasi | 0:e1459cfa4a6a | 1307 | |
mayarasi | 0:e1459cfa4a6a | 1308 | return 0; |
mayarasi | 0:e1459cfa4a6a | 1309 | |
mayarasi | 0:e1459cfa4a6a | 1310 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1311 | |
mayarasi | 0:e1459cfa4a6a | 1312 | if( ((jogadas - jogada_em_que_ultima_pedra_capturada) == 20) || |
mayarasi | 0:e1459cfa4a6a | 1313 | ((jogadas - jogada_em_que_ultima_pedra_nomal_movimentada) == 20) ) { |
mayarasi | 0:e1459cfa4a6a | 1314 | // Apos 20 lances sucessivos de damas, sem captura ou deslocamento de pedra, |
mayarasi | 0:e1459cfa4a6a | 1315 | // a partida eh declarada empatada |
mayarasi | 0:e1459cfa4a6a | 1316 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1317 | } |
mayarasi | 0:e1459cfa4a6a | 1318 | else if ( (jogada_empate_lances_especiais) && |
mayarasi | 0:e1459cfa4a6a | 1319 | ((jogadas - jogada_empate_lances_especiais) == 5) && |
mayarasi | 0:e1459cfa4a6a | 1320 | Codicoes_Especiais() ) { |
mayarasi | 0:e1459cfa4a6a | 1321 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1322 | } |
mayarasi | 0:e1459cfa4a6a | 1323 | |
mayarasi | 0:e1459cfa4a6a | 1324 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1325 | } |
mayarasi | 0:e1459cfa4a6a | 1326 | |
mayarasi | 0:e1459cfa4a6a | 1327 | // 0 - Existe pedra a ser movimentada |
mayarasi | 0:e1459cfa4a6a | 1328 | // 1 - Nao existe pedra a ser movimentada |
mayarasi | 0:e1459cfa4a6a | 1329 | int Existe_Pedra_Movimento(int linha_destino, int coluna_destino, char jogador1, char jogador2, char jogador) { |
mayarasi | 0:e1459cfa4a6a | 1330 | |
mayarasi | 0:e1459cfa4a6a | 1331 | int retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1332 | |
mayarasi | 0:e1459cfa4a6a | 1333 | if (jogador == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1334 | if ((linha_destino - 1 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1335 | (coluna_destino - 1 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1336 | (tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1337 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1338 | } |
mayarasi | 0:e1459cfa4a6a | 1339 | else if ((linha_destino - 1 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1340 | (coluna_destino + 1 < MAXCOLUNA) && |
mayarasi | 0:e1459cfa4a6a | 1341 | (tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1342 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1343 | } |
mayarasi | 0:e1459cfa4a6a | 1344 | } |
mayarasi | 0:e1459cfa4a6a | 1345 | else { |
mayarasi | 0:e1459cfa4a6a | 1346 | if ((linha_destino + 1 < MAXLINHA) && |
mayarasi | 0:e1459cfa4a6a | 1347 | (coluna_destino + 1 < MAXCOLUNA) && |
mayarasi | 0:e1459cfa4a6a | 1348 | (tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1349 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1350 | } |
mayarasi | 0:e1459cfa4a6a | 1351 | else if ((linha_destino + 1 < MAXLINHA) && |
mayarasi | 0:e1459cfa4a6a | 1352 | (coluna_destino - 1 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1353 | (tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1354 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1355 | } |
mayarasi | 0:e1459cfa4a6a | 1356 | } |
mayarasi | 0:e1459cfa4a6a | 1357 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1358 | } |
mayarasi | 0:e1459cfa4a6a | 1359 | |
mayarasi | 0:e1459cfa4a6a | 1360 | // 0 - Existe pedra a ser capturada |
mayarasi | 0:e1459cfa4a6a | 1361 | // 1 - Nao existe pedra a ser capturada |
mayarasi | 0:e1459cfa4a6a | 1362 | int Existe_Pedra_Capturar(int linha_destino, int coluna_destino, char jogador1, char jogador2, char jogador) { |
mayarasi | 0:e1459cfa4a6a | 1363 | |
mayarasi | 0:e1459cfa4a6a | 1364 | int retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1365 | char pedra_nomal, pedra_dama; |
mayarasi | 0:e1459cfa4a6a | 1366 | |
mayarasi | 0:e1459cfa4a6a | 1367 | if (jogador == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1368 | pedra_nomal = PEDRA_NORMAL_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 1369 | pedra_dama = PEDRA_DAMA_JOGADOR2; |
mayarasi | 0:e1459cfa4a6a | 1370 | } |
mayarasi | 0:e1459cfa4a6a | 1371 | else { |
mayarasi | 0:e1459cfa4a6a | 1372 | pedra_nomal = PEDRA_NORMAL_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 1373 | pedra_dama = PEDRA_DAMA_JOGADOR1; |
mayarasi | 0:e1459cfa4a6a | 1374 | } |
mayarasi | 0:e1459cfa4a6a | 1375 | |
mayarasi | 0:e1459cfa4a6a | 1376 | if ((linha_destino + 2 < MAXLINHA) && |
mayarasi | 0:e1459cfa4a6a | 1377 | (coluna_destino + 2 < MAXCOLUNA) && |
mayarasi | 0:e1459cfa4a6a | 1378 | ((tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] == pedra_nomal) || |
mayarasi | 0:e1459cfa4a6a | 1379 | (tabuleiro_jogada[linha_destino + 1][coluna_destino + 1] == pedra_dama)) && |
mayarasi | 0:e1459cfa4a6a | 1380 | (tabuleiro_jogada[linha_destino + 2][coluna_destino + 2] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1381 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1382 | } |
mayarasi | 0:e1459cfa4a6a | 1383 | else if ((linha_destino + 2 < MAXLINHA) && |
mayarasi | 0:e1459cfa4a6a | 1384 | (coluna_destino - 2 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1385 | ((tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] == pedra_nomal) || |
mayarasi | 0:e1459cfa4a6a | 1386 | (tabuleiro_jogada[linha_destino + 1][coluna_destino - 1] == pedra_dama)) && |
mayarasi | 0:e1459cfa4a6a | 1387 | (tabuleiro_jogada[linha_destino + 2][coluna_destino - 2] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1388 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1389 | } |
mayarasi | 0:e1459cfa4a6a | 1390 | else if ((linha_destino - 2 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1391 | (coluna_destino - 2 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1392 | ((tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] == pedra_nomal) || |
mayarasi | 0:e1459cfa4a6a | 1393 | (tabuleiro_jogada[linha_destino - 1][coluna_destino - 1] == pedra_dama)) && |
mayarasi | 0:e1459cfa4a6a | 1394 | (tabuleiro_jogada[linha_destino - 2][coluna_destino - 2] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1395 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1396 | } |
mayarasi | 0:e1459cfa4a6a | 1397 | else if ((linha_destino - 2 >= 0) && |
mayarasi | 0:e1459cfa4a6a | 1398 | (coluna_destino + 2 < MAXCOLUNA) && |
mayarasi | 0:e1459cfa4a6a | 1399 | ((tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] == pedra_nomal) || |
mayarasi | 0:e1459cfa4a6a | 1400 | (tabuleiro_jogada[linha_destino - 1][coluna_destino + 1] == pedra_dama)) && |
mayarasi | 0:e1459cfa4a6a | 1401 | (tabuleiro_jogada[linha_destino - 2][coluna_destino + 2] == VAZIO)) { |
mayarasi | 0:e1459cfa4a6a | 1402 | retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1403 | } |
mayarasi | 0:e1459cfa4a6a | 1404 | |
mayarasi | 0:e1459cfa4a6a | 1405 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1406 | } |
mayarasi | 0:e1459cfa4a6a | 1407 | |
mayarasi | 0:e1459cfa4a6a | 1408 | // 0 - Nao existe jogada para o jogador selecionado |
mayarasi | 0:e1459cfa4a6a | 1409 | // 1 - Existe jogada para o jogador selecionado |
mayarasi | 0:e1459cfa4a6a | 1410 | int Existe_Jogada(char jogador1, char jogador2, char jogador) { |
mayarasi | 0:e1459cfa4a6a | 1411 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1412 | int linha, coluna; |
mayarasi | 0:e1459cfa4a6a | 1413 | |
mayarasi | 0:e1459cfa4a6a | 1414 | |
mayarasi | 0:e1459cfa4a6a | 1415 | if (jogador == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1416 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 1417 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 1418 | if (tabuleiro_jogada[linha][coluna] == PEDRA_NORMAL_JOGADOR1) { |
mayarasi | 0:e1459cfa4a6a | 1419 | if (!Existe_Pedra_Movimento(linha, coluna, jogador1, jogador2, jogador)) { |
mayarasi | 0:e1459cfa4a6a | 1420 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1421 | } |
mayarasi | 0:e1459cfa4a6a | 1422 | else if (!Existe_Pedra_Capturar(linha, coluna, jogador1, jogador2, jogador)) { |
mayarasi | 0:e1459cfa4a6a | 1423 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1424 | } |
mayarasi | 0:e1459cfa4a6a | 1425 | } |
mayarasi | 0:e1459cfa4a6a | 1426 | } |
mayarasi | 0:e1459cfa4a6a | 1427 | } |
mayarasi | 0:e1459cfa4a6a | 1428 | } |
mayarasi | 0:e1459cfa4a6a | 1429 | else { |
mayarasi | 0:e1459cfa4a6a | 1430 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 1431 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 1432 | if (tabuleiro_jogada[linha][coluna] == PEDRA_NORMAL_JOGADOR2) { |
mayarasi | 0:e1459cfa4a6a | 1433 | if (!Existe_Pedra_Movimento(linha, coluna, jogador1, jogador2, jogador)) { |
mayarasi | 0:e1459cfa4a6a | 1434 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1435 | } |
mayarasi | 0:e1459cfa4a6a | 1436 | else if (!Existe_Pedra_Capturar(linha, coluna, jogador1, jogador2, jogador)) { |
mayarasi | 0:e1459cfa4a6a | 1437 | return 1; |
mayarasi | 0:e1459cfa4a6a | 1438 | } |
mayarasi | 0:e1459cfa4a6a | 1439 | } |
mayarasi | 0:e1459cfa4a6a | 1440 | } |
mayarasi | 0:e1459cfa4a6a | 1441 | } |
mayarasi | 0:e1459cfa4a6a | 1442 | } |
mayarasi | 0:e1459cfa4a6a | 1443 | return retorno; |
mayarasi | 0:e1459cfa4a6a | 1444 | } |
mayarasi | 0:e1459cfa4a6a | 1445 | |
mayarasi | 0:e1459cfa4a6a | 1446 | int Analisar(int linha_origem, int coluna_origem, int linha_destino, int coluna_destino, |
mayarasi | 0:e1459cfa4a6a | 1447 | char &jogador_vez, char jogador1, char jogador2){ |
mayarasi | 0:e1459cfa4a6a | 1448 | |
mayarasi | 0:e1459cfa4a6a | 1449 | int linha, coluna; |
mayarasi | 0:e1459cfa4a6a | 1450 | char nome[TAM_NOME + 1]; |
mayarasi | 0:e1459cfa4a6a | 1451 | int retorno = 0; |
mayarasi | 0:e1459cfa4a6a | 1452 | |
mayarasi | 0:e1459cfa4a6a | 1453 | ++jogadas; |
mayarasi | 0:e1459cfa4a6a | 1454 | |
mayarasi | 0:e1459cfa4a6a | 1455 | // Verifica se existem oponentes |
mayarasi | 0:e1459cfa4a6a | 1456 | if (Sem_Oponentes()) { |
mayarasi | 0:e1459cfa4a6a | 1457 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1458 | placar[jogador1 - '1'][VITORIAS] += 1; |
mayarasi | 0:e1459cfa4a6a | 1459 | placar[jogador2 - '1'][DERROTAS] += 1; |
mayarasi | 0:e1459cfa4a6a | 1460 | } |
mayarasi | 0:e1459cfa4a6a | 1461 | else { |
mayarasi | 0:e1459cfa4a6a | 1462 | placar[jogador2 - '1'][VITORIAS] += 1; |
mayarasi | 0:e1459cfa4a6a | 1463 | placar[jogador1 - '1'][DERROTAS] += 1; |
mayarasi | 0:e1459cfa4a6a | 1464 | } |
mayarasi | 0:e1459cfa4a6a | 1465 | //LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 1466 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1467 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 1468 | PRINTF("Jogador %s VENCEU!! com %d jogadas.%s", retorna_nome_jogador(jogador_vez, nome), jogadas, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1469 | PRINTF("Pressione <Qualquer Tecla>"); |
mayarasi | 0:e1459cfa4a6a | 1470 | GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 1471 | jogadas = 0; |
mayarasi | 0:e1459cfa4a6a | 1472 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1473 | } |
mayarasi | 0:e1459cfa4a6a | 1474 | // Verifica empate |
mayarasi | 0:e1459cfa4a6a | 1475 | else if (Verifica_Empate()) { |
mayarasi | 0:e1459cfa4a6a | 1476 | placar[jogador1 - '1'][EMPATES] += 1; |
mayarasi | 0:e1459cfa4a6a | 1477 | placar[jogador2 - '1'][EMPATES] += 1; |
mayarasi | 0:e1459cfa4a6a | 1478 | //LimparTela(); |
mayarasi | 0:e1459cfa4a6a | 1479 | PRINTF("%s", FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1480 | SELECIONA_COR(COR_FUNDO_MENSAGEM, COR_TEXTO_MENSAGEM); |
mayarasi | 0:e1459cfa4a6a | 1481 | PRINTF("Jogadores %s e %s EMPATARAM!! apos %d jogadas.%s", retorna_nome_jogador(jogador1, nome), |
mayarasi | 0:e1459cfa4a6a | 1482 | retorna_nome_jogador(jogador2, nome), jogadas, FIM_DE_LINHA); |
mayarasi | 0:e1459cfa4a6a | 1483 | PRINTF("Pressione <Qualquer Tecla>"); |
mayarasi | 0:e1459cfa4a6a | 1484 | GETCHE(); |
mayarasi | 0:e1459cfa4a6a | 1485 | jogadas = 0; |
mayarasi | 0:e1459cfa4a6a | 1486 | retorno = 1; |
mayarasi | 0:e1459cfa4a6a | 1487 | } |
mayarasi | 0:e1459cfa4a6a | 1488 | // Verifica mudanca de vez de jogador |
mayarasi | 0:e1459cfa4a6a | 1489 | else {//if ( (numero_pedras_para_capturar == 0) || (numero_pedras_para_capturar == -1) ) { |
mayarasi | 0:e1459cfa4a6a | 1490 | |
mayarasi | 0:e1459cfa4a6a | 1491 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 1492 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 1493 | switch (tabuleiro_jogada[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 1494 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1495 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1496 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1497 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1498 | break; |
mayarasi | 0:e1459cfa4a6a | 1499 | default: |
mayarasi | 0:e1459cfa4a6a | 1500 | tabuleiro_jogada[linha][coluna] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1501 | break; |
mayarasi | 0:e1459cfa4a6a | 1502 | } |
mayarasi | 0:e1459cfa4a6a | 1503 | } |
mayarasi | 0:e1459cfa4a6a | 1504 | } |
mayarasi | 0:e1459cfa4a6a | 1505 | memcpy(tabuleiro_controle, tabuleiro_jogada, sizeof(tabuleiro_jogada)); |
mayarasi | 0:e1459cfa4a6a | 1506 | |
mayarasi | 0:e1459cfa4a6a | 1507 | // @todo falta verificar o caso em que o jogador nao tem casa para jogar |
mayarasi | 0:e1459cfa4a6a | 1508 | if (jogador_vez == jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1509 | if (numero_pedras_capturadas_jogador1 > numero_pedras_capturadas_antes_jogador1) { |
mayarasi | 0:e1459cfa4a6a | 1510 | if (Existe_Pedra_Capturar(linha_destino, coluna_destino, jogador1, jogador2, jogador1)) { |
mayarasi | 0:e1459cfa4a6a | 1511 | jogador_vez = jogador2; |
mayarasi | 0:e1459cfa4a6a | 1512 | } |
mayarasi | 0:e1459cfa4a6a | 1513 | } |
mayarasi | 0:e1459cfa4a6a | 1514 | else if (Existe_Jogada(jogador1, jogador2, jogador2)) { |
mayarasi | 0:e1459cfa4a6a | 1515 | jogador_vez = jogador2; |
mayarasi | 0:e1459cfa4a6a | 1516 | } |
mayarasi | 0:e1459cfa4a6a | 1517 | } |
mayarasi | 0:e1459cfa4a6a | 1518 | else { |
mayarasi | 0:e1459cfa4a6a | 1519 | if (numero_pedras_capturadas_jogador2 > numero_pedras_capturadas_antes_jogador2) { |
mayarasi | 0:e1459cfa4a6a | 1520 | if (Existe_Pedra_Capturar(linha_destino, coluna_destino, jogador1, jogador2, jogador2)) { |
mayarasi | 0:e1459cfa4a6a | 1521 | jogador_vez = jogador1; |
mayarasi | 0:e1459cfa4a6a | 1522 | } |
mayarasi | 0:e1459cfa4a6a | 1523 | } |
mayarasi | 0:e1459cfa4a6a | 1524 | else if (Existe_Jogada(jogador1, jogador2, jogador1)) { |
mayarasi | 0:e1459cfa4a6a | 1525 | jogador_vez = jogador1; |
mayarasi | 0:e1459cfa4a6a | 1526 | } |
mayarasi | 0:e1459cfa4a6a | 1527 | } |
mayarasi | 0:e1459cfa4a6a | 1528 | //numero_pedras_para_capturar = -1; |
mayarasi | 0:e1459cfa4a6a | 1529 | |
mayarasi | 0:e1459cfa4a6a | 1530 | numero_pedras_capturadas_antes_jogador1 = numero_pedras_capturadas_jogador1; |
mayarasi | 0:e1459cfa4a6a | 1531 | numero_pedras_capturadas_antes_jogador2 = numero_pedras_capturadas_jogador2; |
mayarasi | 0:e1459cfa4a6a | 1532 | #if 0 |
mayarasi | 0:e1459cfa4a6a | 1533 | for (linha = 0; linha < MAXLINHA; ++linha) { |
mayarasi | 0:e1459cfa4a6a | 1534 | for (coluna = 0; coluna < MAXCOLUNA; ++coluna) { |
mayarasi | 0:e1459cfa4a6a | 1535 | switch (tabuleiro_jogada[linha][coluna]) { |
mayarasi | 0:e1459cfa4a6a | 1536 | case PEDRA_NORMAL_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1537 | case PEDRA_DAMA_JOGADOR1: |
mayarasi | 0:e1459cfa4a6a | 1538 | case PEDRA_NORMAL_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1539 | case PEDRA_DAMA_JOGADOR2: |
mayarasi | 0:e1459cfa4a6a | 1540 | break; |
mayarasi | 0:e1459cfa4a6a | 1541 | default : |
mayarasi | 0:e1459cfa4a6a | 1542 | tabuleiro_jogada[linha][coluna] = VAZIO; |
mayarasi | 0:e1459cfa4a6a | 1543 | break; |
mayarasi | 0:e1459cfa4a6a | 1544 | } |
mayarasi | 0:e1459cfa4a6a | 1545 | } |
mayarasi | 0:e1459cfa4a6a | 1546 | } |
mayarasi | 0:e1459cfa4a6a | 1547 | memcpy(tabuleiro_controle, tabuleiro_jogada, sizeof(tabuleiro_jogada)); |
mayarasi | 0:e1459cfa4a6a | 1548 | #endif |
mayarasi | 0:e1459cfa4a6a | 1549 | } |
mayarasi | 0:e1459cfa4a6a | 1550 | |
mayarasi | 0:e1459cfa4a6a | 1551 | return(retorno); |
mayarasi | 0:e1459cfa4a6a | 1552 | } |
mayarasi | 0:e1459cfa4a6a | 1553 | |
mayarasi | 0:e1459cfa4a6a | 1554 | void Jogar(char jogador1, char jogador2) { |
mayarasi | 0:e1459cfa4a6a | 1555 | |
mayarasi | 0:e1459cfa4a6a | 1556 | char fim = '0'; |
mayarasi | 0:e1459cfa4a6a | 1557 | char jogador_vez; |
mayarasi | 0:e1459cfa4a6a | 1558 | int linha_origem, coluna_origem, linha_destino, coluna_destino; |
mayarasi | 0:e1459cfa4a6a | 1559 | |
mayarasi | 0:e1459cfa4a6a | 1560 | InicializarTabuleiro(jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1561 | |
mayarasi | 0:e1459cfa4a6a | 1562 | jogador_vez = jogador1; |
mayarasi | 0:e1459cfa4a6a | 1563 | |
mayarasi | 0:e1459cfa4a6a | 1564 | do { |
mayarasi | 0:e1459cfa4a6a | 1565 | ImprimirTabuleiro(jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1566 | |
mayarasi | 0:e1459cfa4a6a | 1567 | Entrada(linha_origem, coluna_origem, linha_destino, coluna_destino,jogador_vez, jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1568 | |
mayarasi | 0:e1459cfa4a6a | 1569 | if(Analisar(linha_origem, coluna_origem, linha_destino, coluna_destino, jogador_vez, jogador1, jogador2)) { |
mayarasi | 0:e1459cfa4a6a | 1570 | fim = '1'; |
mayarasi | 0:e1459cfa4a6a | 1571 | } |
mayarasi | 0:e1459cfa4a6a | 1572 | } while(fim != '1'); |
mayarasi | 0:e1459cfa4a6a | 1573 | } |
mayarasi | 0:e1459cfa4a6a | 1574 | |
mayarasi | 0:e1459cfa4a6a | 1575 | int main() { |
mayarasi | 0:e1459cfa4a6a | 1576 | |
mayarasi | 0:e1459cfa4a6a | 1577 | char jogador1, jogador2; |
mayarasi | 0:e1459cfa4a6a | 1578 | |
mayarasi | 0:e1459cfa4a6a | 1579 | #ifdef __PC__ |
mayarasi | 0:e1459cfa4a6a | 1580 | |
mayarasi | 0:e1459cfa4a6a | 1581 | hConsoleHandle = GetStdHandle(STD_OUTPUT_HANDLE); |
mayarasi | 0:e1459cfa4a6a | 1582 | ConsoleInfo = new CONSOLE_SCREEN_BUFFER_INFO(); |
mayarasi | 0:e1459cfa4a6a | 1583 | GetConsoleScreenBufferInfo(hConsoleHandle, ConsoleInfo); |
mayarasi | 0:e1459cfa4a6a | 1584 | |
mayarasi | 0:e1459cfa4a6a | 1585 | #else |
mayarasi | 0:e1459cfa4a6a | 1586 | |
mayarasi | 0:e1459cfa4a6a | 1587 | //pc.baud(115200); |
mayarasi | 0:e1459cfa4a6a | 1588 | term.baud(115200); |
mayarasi | 0:e1459cfa4a6a | 1589 | |
mayarasi | 0:e1459cfa4a6a | 1590 | #endif |
mayarasi | 0:e1459cfa4a6a | 1591 | |
mayarasi | 0:e1459cfa4a6a | 1592 | // Zerando o placar |
mayarasi | 0:e1459cfa4a6a | 1593 | memset(placar, 0, sizeof(placar)); |
mayarasi | 0:e1459cfa4a6a | 1594 | |
mayarasi | 0:e1459cfa4a6a | 1595 | while(true) { |
mayarasi | 0:e1459cfa4a6a | 1596 | |
mayarasi | 0:e1459cfa4a6a | 1597 | ImprimeMenu(jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1598 | |
mayarasi | 0:e1459cfa4a6a | 1599 | Jogar(jogador1, jogador2); |
mayarasi | 0:e1459cfa4a6a | 1600 | } |
mayarasi | 0:e1459cfa4a6a | 1601 | } |