Pular para o conteúdo principal

Gamão em Clipper

 STATIC aTabuleiro[24]

STATIC aBarra := {"", ""}

STATIC nRemovidas := {0, 0}

STATIC nVez := 1

STATIC aDados[4], nJogadas := 0


#DEFINE BRANCA "B"

#DEFINE PRETA  "P"


PROCEDURE MAIN

   LOCAL i, resp


   DO WHILE .T.

      CLS

      ? "Jogo de Gamão - Jogador (BRANCAS) vs Computador (PRETAS)"

      ? "Pressione qualquer tecla para começar..."

      INKEY(0)


      // Inicializa o tabuleiro

      FOR i := 1 TO 24

         aTabuleiro[i] := ""

      NEXT


      aTabuleiro[1]  := REPLICATE(PRETA, 2)

      aTabuleiro[6]  := REPLICATE(BRANCA, 5)

      aTabuleiro[8]  := REPLICATE(BRANCA, 3)

      aTabuleiro[12] := REPLICATE(PRETA, 5)

      aTabuleiro[13] := REPLICATE(BRANCA, 5)

      aTabuleiro[17] := REPLICATE(PRETA, 3)

      aTabuleiro[19] := REPLICATE(PRETA, 5)

      aTabuleiro[24] := REPLICATE(BRANCA, 2)


      aBarra[1] := ""

      aBarra[2] := ""

      nRemovidas[1] := 0

      nRemovidas[2] := 0

      nVez := 1


      // Loop principal da partida

      DO WHILE .T.

         CLS

         ExibeTabuleiro()

         IF nVez == 1

            ? "Sua vez (BRANCAS)"

            JogadaJogador()

         ELSE

            ? "Vez do Computador (PRETAS)..."

            JogadaComputador()

         ENDIF

         VerificaVitoria()

         nVez := 3 - nVez

      ENDDO


      // Após fim de jogo

      @ 22, 5 SAY "Deseja jogar novamente? (S/N): "

      resp := UPPER(CHR(INKEY(0)))

      IF resp != "S"

         EXIT

      ENDIF

   ENDDO

RETURN



PROCEDURE ExibeTabuleiro()

   LOCAL i, linha := 3, coluna


   @ linha, 5 SAY "     13 14 15 16 17 18   19 20 21 22 23 24"

   @ linha+1, 5 SAY "    -------------------+-------------------"


   // Linha superior do tabuleiro (pontos 13 a 24)

   FOR i := 13 TO 24

      coluna := (i - 13) * 3 + 6

      @ linha+2, coluna SAY IIF(LEN(aTabuleiro[i]) == 0, " .", SUBSTR(aTabuleiro[i],1,1) + LTRIM(STR(LEN(aTabuleiro[i]))))

   NEXT


   @ linha+3, 5 SAY "    -------------------+-------------------"


   // Linha inferior do tabuleiro (pontos 12 a 1)

   FOR i := 12 TO 1 STEP -1

      coluna := (12 - i) * 3 + 6

      @ linha+4, coluna SAY IIF(LEN(aTabuleiro[i]) == 0, " .", SUBSTR(aTabuleiro[i],1,1) + LTRIM(STR(LEN(aTabuleiro[i]))))

   NEXT


   @ linha+5, 5 SAY "      12 11 10  9  8  7    6  5  4  3  2  1"


   // Barra

   @ linha+7, 5 SAY "Barra - Brancas (B): " + STR(LEN(aBarra[1])) + "  Pretas (P): " + STR(LEN(aBarra[2]))


   // Peças removidas

   @ linha+8, 5 SAY "Peças removidas - Brancas: " + STR(nRemovidas[1]) + "  Pretas: " + STR(nRemovidas[2])

RETURN



PROCEDURE JogadaJogador()

   LOCAL d1, d2, i, jogadasUsadas := 0, usado[4], movsRestantes

   LOCAL origem, destino


   // Rolar dados

   d1 := 1 + INT(RAND() * 6)

   d2 := 1 + INT(RAND() * 6)


   IF d1 == d2

      nJogadas := 4

      FOR i := 1 TO 4

         aDados[i] := d1

         usado[i] := .F.

      NEXT

   ELSE

      nJogadas := 2

      aDados[1] := d1

      aDados[2] := d2

      usado[1] := .F.

      usado[2] := .F.

   ENDIF


   @ 15, 5 SAY "Dados: " + STR(d1) + " e " + STR(d2)


   movsRestantes := nJogadas


   WHILE movsRestantes > 0

      ExibeTabuleiro()

      @ 17, 5 SAY "Jogadas restantes: " + STR(movsRestantes)

      @ 18, 5 SAY "Informe origem da peça (1-24): "

      INPUT origem

      IF origem < 1 .OR. origem > 24

         @ 19, 5 SAY "Origem inválida!"

         LOOP

      ENDIF

      IF SUBSTR(aTabuleiro[origem], 1, 1) != BRANCA

         @ 19, 5 SAY "Sem peça branca nessa posição!"

         LOOP

      ENDIF


      // Escolher qual dado usar para mover

      @ 20, 5 SAY "Escolha o dado para usar (valores disponíveis): "

      FOR i := 1 TO nJogadas

         IF !usado[i]

            ? "Dado ", i, ": ", aDados[i]

         ENDIF

      NEXT

      @ 21, 5 SAY "Informe índice do dado a usar: "

      INPUT i

      IF i < 1 .OR. i > nJogadas .OR. usado[i]

         @ 22, 5 SAY "Dado inválido!"

         LOOP

      ENDIF


      destino := origem + aDados[i]


      IF destino > 24

         IF PodeRetirar(BRANCA)

            aTabuleiro[origem] := SUBSTR(aTabuleiro[origem], 2)

            nRemovidas[1] += 1

            usado[i] := .T.

            movsRestantes -= 1

            @ 23, 5 SAY "Peça branca removida do tabuleiro!"

            CONTINUE

         ELSE

            @ 23, 5 SAY "Não pode remover ainda!"

            LOOP

         ENDIF

      ENDIF


      IF OponenteTemMaisDe1Peca(destino, BRANCA)

         @ 23, 5 SAY "Destino bloqueado!"

         LOOP

      ENDIF


      // Captura?

      IF SUBSTR(aTabuleiro[destino], 1, 1) == PRETA .AND. LEN(aTabuleiro[destino]) == 1

         aBarra[2] += PRETA

         aTabuleiro[destino] := ""

      ENDIF


      // Move peça

      aTabuleiro[origem] := SUBSTR(aTabuleiro[origem], 2)

      aTabuleiro[destino] := BRANCA + aTabuleiro[destino]


      usado[i] := .T.

      movsRestantes -= 1

   ENDDO

RETURN



PROCEDURE JogadaComputador()

   LOCAL d1, d2, i, usado[4], movsRestantes, origem, destino, movAchado := .F.


   // Rolar dados

   d1 := 1 + INT(RAND() * 6)

   d2 := 1 + INT(RAND() * 6)


   IF d1 == d2

      nJogadas := 4

      FOR i := 1 TO 4

         aDados[i] := d1

         usado[i] := .F.

      NEXT

   ELSE

      nJogadas := 2

      aDados[1] := d1

      aDados[2] := d2

      usado[1] := .F.

      usado[2] := .F.

   ENDIF


   movsRestantes := nJogadas


   WHILE movsRestantes > 0

      movAchado := .F.


      FOR origem := 24 TO 1 STEP -1

         IF SUBSTR(aTabuleiro[origem], 1, 1) == PRETA

            FOR i := 1 TO nJogadas

               IF !usado[i]

                  destino := origem - aDados[i]

                  IF destino < 1

                     IF PodeRetirar(PRETA)

                        aTabuleiro[origem] := SUBSTR(aTabuleiro[origem], 2)

                        nRemovidas[2] += 1

                        usado[i] := .T.

                        movsRestantes -= 1

                        movAchado := .T.

                        EXIT FOR

                     ENDIF

                  ELSEIF !OponenteTemMaisDe1Peca(destino, PRETA)

                     IF SUBSTR(aTabuleiro[destino], 1, 1) == BRANCA .AND. LEN(aTabuleiro[destino]) == 1

                        aBarra[1] += BRANCA

                        aTabuleiro[destino] := ""

                     ENDIF

                     aTabuleiro[origem] := SUBSTR(aTabuleiro[origem], 2)

                     aTabuleiro[destino] := PRETA + aTabuleiro[destino]

                     usado[i] := .T.

                     movsRestantes -= 1

                     movAchado := .T.

                     EXIT FOR

                  ENDIF

               ENDIF

               IF movAchado

                  EXIT FOR

               ENDIF

            NEXT

         ENDIF

         IF movAchado

            EXIT FOR

         ENDIF

      NEXT


      IF !movAchado

         EXIT

      ENDIF

   ENDDO

RETURN



FUNCTION OponenteTemMaisDe1Peca(pos, cor)

   LOCAL oponente := IIF(cor == BRANCA, PRETA, BRANCA)

   RETURN (SUBSTR(aTabuleiro[pos], 1, 1) == oponente .AND. LEN(aTabuleiro[pos]) > 1)

ENDFUNCTION



FUNCTION PodeRetirar(cor)

   LOCAL i

   IF cor == BRANCA

      FOR i := 1 TO 18

         IF SUBSTR(aTabuleiro[i], 1, 1) == BRANCA

            RETURN .F.

         ENDIF

      NEXT

      RETURN .T.

   ELSE

      FOR i := 7 TO 24

         IF SUBSTR(aTabuleiro[i], 1, 1) == PRETA

            RETURN .F.

         ENDIF

      NEXT

      RETURN .T.

   ENDIF

ENDFUNCTION



PROCEDURE VerificaVitoria()

   IF nRemovidas[1] >= 15

      CLS

      ? "Parabéns! Você (BRANCAS) venceu!"

      EXIT

   ELSEIF nRemovidas[2] >= 15

      CLS

      ? "O Computador (PRETAS) venceu! Tente novamente."

      EXIT

   ENDIF

RETURN

Comentários

Postagens mais visitadas deste blog

Sites de Torneios

- Backgammon Galaxy: maior comunidade online para jogos casuais e torneios sérios[4]. - MegaJogos: oferece gamão online gratuito para jogar contra pessoas ou computador[3]. - Poli: permite jogar Backgammon online gratuito, contra amigos ou computador, em desktop e dispositivos móveis[7].**: maior comunidade online para jogos casuais e torneios sérios[4]. - MegaJogos: oferece gamão online gratuito para jogar contra pessoas ou computador[3]. - Poki: permite jogar Backgammon online gratuito, contra amigos ou computador, em desktop e dispositivos móveis[7]. Fontes: 3] Como Jogar Gamão Online - Aprenda as Regras Oficiais - MegaJogos https://www.megajogos.com.br/gamao-online/regras [4] Backgammon Galaxy - Play Online for Free https://www.backgammongalaxy.com [7] BACKGAMMON ONLINE - Jogue Grátis Online! - Poki https://poki.com/br/g/backgammon-html5

Torneios do ItsYourTurn

 Aqui está a tradução completa para o português do Brasil : Usuários Registrados Ajuda! Login do Jogador JOGAR Status do jogo Novo jogo Sala de Espera Partida Automática CONVERSAR Minhas mensagens Enviar mensagem Indique a um amigo! ESPIAR Área de Rankings Área de Torneios Quem está aqui? Buscar perfis de usuários Singularidade CONTA Editar perfil do usuário Editar tabuleiros de jogo Editar gráficos do jogo Lista de amigos Editar lista de ignorados Alterar senha Editar pontuações Torne-se um membro! Sair Visitantes Criar novo usuário Tela Principal Área de Torneios Sala de Espera Quem está aqui? Informações Regras do Jogo Dicas e funcionalidades Depoimentos de usuários Mais de 3.000.000 de contas registradas Regras do Torneio Antes de Participar: Certifique-se de ler as regras abaixo. Há um limite de tempo por jogada nos jogos de torneio. Se um jogador não fizer sua jogada dentro do tempo, ele ou ela perde a partida. Não há previsão de f...

Regras

O jogo de gamão é um tradicional jogo de tabuleiro, conhecido como backgammon na língua inglesa, é um onde o vencedor é aquele que consegue retirar todas as suas peças do tabuleiro primeiro. Para jogar Gamão, são necessários 2 participantes, um tabuleiro de gamão, 15 peças pretas, 15 peças brancas e dois dados clássicos de 6 lados. com 24 casas triangulares agrupadas de 6 em 6 e divididas em 4 partes. Jogadores - 2 Peças ou pedras - 15 pretas, 15 brancas Tabuleiro - 24 casas de cores intercaladas agrupadas de 6 em 6 e divididas em 4 partes Objetivo: Retirar todas as peças do tabuleiro antes do adversário. Como Jogar Gamão Defina o primeiro jogador jogando os dados Mova as peças com base nos valores tirados nos dados Dados iguais permitem o dobro de movimentos Não é permitido mover suas peças para casas com mais de duas peças adversárias Se a casa de destino tiver apenas uma peça do adversário, ela pode ser capturada Comece a retirar suas peças do tabuleiro quando todas est...