Um jogo de damas em mbed os

Dependencies:   Terminal

Committer:
mayarasi
Date:
Sat Dec 10 17:07:22 2016 +0000
Revision:
0:e1459cfa4a6a
enviando

Who changed what in which revision?

UserRevisionLine numberNew 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 }