terça-feira, 16 de abril de 2019

Construindo o seu RPG de Mesa: equilíbrio em valores de batalha.

Continuando a série de posts sobre como Construir um RPG de Mesa (https://vemfazermatematicaegames.blogspot.com/2019/04/construindo-seu-rpg-de-mesa-elaborando.html) vamos problematizar em como construir um RPG de mesa com equilíbrio em valores de batalhas.
Imagine você um player extremamente azarado que tira muito mais valores de 5 a 9 do que valores altos como 15 ou 20 no dado D20, tentando sobreviver na floresta. E você foi justamente o premiado a catar lenha, sendo que depois de 5 dados que rolaram respectivamente 5, 9, 1, 14 e 10 e você morreu de cansaço porque sua estamina é de no máximo 10 e você perdeu 11 de estamina. Super legal, só que não!
Quando você cria uma missão precisa levar em conta situações em que o resultado dos dados pode ferrar ou facilitar sua vida (se quiser saber mais, acesse o link que fala sobre probabilidade: https://mundoeducacao.bol.uol.com.br/matematica/definicoes-basicas-probabilidade.htm) e fazer uma correlação dos poderes do personagem contra o que é cobrado na missão e seus resultados, conforme o esquema abaixo:


Uma saída mostrada acima é trabalhar todos os desafios como valores de X (valores generalizados que não importa o valor dado ao personagem, os demais desafios irão respeitar as regras matemáticas impostas), no qual sempre vai ser levado em conta o valor X da vida do jogador e uma fração do mesmo é retirada ou bonificada de acordo com o que saí no dado D20 (caso você use outro tipo de dado precisa fazer relação das faixas de valores do dado). 
Note que podemos ter duas abordagens, considerar o valor de X sempre como a vida inicial do jogador, que inclusive permite que o jogador morra mesmo sem ter valores nos dados relacionados as penalidades (considere o caso da missão fácil e 10 vezes seguidas obter um valor de dado entre 5 e 12), ou o segundo caso, em que o X vai ser a nova vida do jogador logo antes do combate e isso gera uma situação infinita (pesquise sobre o que é a definição de limite: https://mundoeducacao.bol.uol.com.br/matematica/limite-1.htm e você entenderá o contexto desse "infinito") na qual só é possível morrer com valores de dados relacionados diretamente as penalidades.
Esses cálculos de batalha podem ser anotados em uma ficha personalizada como a mostrada abaixo ou ainda, você pode construir um aplicativo que faça esses cálculos (conforme o post: https://vemfazermatematicaegames.blogspot.com/2018/11/a-matematica-em-uma-batalha-de-rpg.html):

Finalizando, construir um RPG de mesa pode extrapolar o que foi proposto aqui, podendo ter mais ou menos opções, mas a grande satisfação em construir o seu RPG de mesa é inigualável. Agora é com você! Construa seu RPG de Mesa e jogue com seus amigos. Não esqueça de deixar o link do seu projeto nos comentários abaixo para que mais pessoas possam jogar ele também. Até a próxima!

segunda-feira, 15 de abril de 2019

Construindo seu RPG de Mesa: elaborando as possibilidades no roteiro e regras.

No post anterior (https://vemfazermatematicaegames.blogspot.com/2019/04/construindo-o-seu-rpg-de-mesa-o.html) trabalhamos na construção do tabuleiro do nosso RPG de Mesa. Hoje iremos avançar na roteirização e quais regras estarão atreladas as escolhas do jogador. Em primeiro lugar é interessante construir o fluxograma de eventos que podem acontecer no seu RPG de Mesa. Lembrando que estamos continuando a construção a partir do tablado desenvolvido no post anterior, do qual os arquivos se encontram em: https://drive.google.com/drive/folders/1wymj4-RzBQaZpHAdxcLCBsuRFWeP3yAG?usp=sharing.


Com base nesse fluxograma, existem diversas possibilidades (encontros) que podemos ter uma noção abaixo:
  • Vila Inicial: ponto inicial onde os heróis começam e devem decidir seus atributos e qual caminho irão seguir. Trabalho em equipe sempre é crucial. Também é apresentada a missão de derrotar o Rei que rouba dos ricos e dos pobres e fica ainda mais rico! É uma questão de honra derrotá-lo e iniciar uma nova era de esperança para o povo.
  • Sobrevivendo na Floresta: andar por uma floresta sempre é complicado, agora passar uma noite é pior ainda. Diversos desafios o aguardam.
  • Atravessando o rio: rios apresentam inúmeros perigos, correnteza, são extremamente fundos e podem ter uns peixinhos famintos!? Será possível construir uma jangada para superar esses desafios?
  • Pela estrada a fora: dizem que entre escolher o certo ou o duvidoso, o bom negócio é ir pela estrada limpa, porém longa e exaustiva. Você está preparado?
  • Animais Selvagens e a força da natureza: se uma floresta já não bastasse como desafio, que tal o sobreviver a uma alcateia faminta de lobos ou aqueles falcões só esperando pela oportunidade perfeita.
  • Piratas? E agora?: se você achou sua jornada difícil até agora, uma surpresa desagradável o espera: Piratas! E eles são conhecidos como os Loucos do Riozinho!
  • Montanhas desafiadoras: chega uma hora da sua jornada que você decide tomar um ar mais fresco e ter uma visão privilegiada do que está por vir. As montanhas Descanso Eterno vai ser uma escolha que vai transformar sua jornada.
  • Outra noite na floresta: todo o percurso da jornada está fazendo você ficar mais cansado, porém mais experiente. Será que essa experiência será um fator decisivo ao passar uma outra noite em uma floresta?
  • A ilha perdida: durante a sua navegação você vê no horizonte uma ilha não listada no mapa. Teria ela algum tesouro ou um desafio do qual você nunca mais volte? (bônus secreto contra guarda da luz)
  • O pico do mundo: tanto tempo se passou desde que decidiu subir as montanhas Descanso Eterno, mas que a visão privilegiada e uma situação inusitada irão compensar tudo. (bônus secreto contra guarda da luz)
  • Construindo uma ponte: você vagou pela floresta e finalmente ao sair dela se deparou com um estreitamento do rio. Valeria a pena construir uma ponte e estar mais perto do grande objetivo?
  • Uma chuva de pedras: se quando você decidiu ir pela estrada achou que seria seguro do começo ao fim, se enganou redondamente: uma avalanche de pedras vinda do topo das Montanhas Descanso Eterno. Hora de sobreviver a esse teste! 
  • Mortos-vivos!? E agora?: parecia ser apenas mais um cemitério normal, mas aqueles monstros saindo da tumba já anunciaram a catástrofe: hora de se defender de mortos-vivos! (bônus secreto contra guarda morto-vivo)
  • A vila dos ladinos: ao redor do castelo está a vila replena de... patifes! Você mal pisou e já teve algo roubado, agora é hora de recuperar o que foi perdido ou tentar não ser roubado de novo! 
  • Quanto mais longo, pior!: Disseram que a estrada era segura? Só esqueceram de dizer que é impossível de completar ela sem recursos e você literalmente indo pra cova. Como sobreviver a esse extremo?
  • A guarda-imperial: entrar no castelo não é uma tarefa fácil, principalmente porque na porta de entrada está os dois guardiões do Rei: o  morto-vivo Laiter e o paladino da luz Trevis. Embora eles não se gostem muito, atacam como se fossem a melhor dupla do mundo. Vai ser preciso uma grande experiência e talvez uma carta na manga para poder derrotá-los. (uso dos bônus adquiridos)
  • O Rei: conhecido apenas por poucos e com habilidades misteriosas que o mantiveram no poder até agora. Existem lendas que ele pode ler pensamentos e esquivar de ataques. Será que você é capaz de terminar a sua jornada e se consagrar como O Herói!?
Cada um desses encontros pode ser melhor detalhado, conforme um exemplo de carta, que é mostrado abaixo:


Na primeira carta (mais a esquerda) apresenta-se a situação geral de um encontro que está listado no fluxograma descrito acima. Nessa carta irá constar missões necessárias para poder passar para o próximo encontro. Na carta ao lado (mais a direita), está descrita uma das missões e o que acontece quando é rolado o dado D20 em intervalos de valor. Note que vai ser muito importante estruturar os números de vida, poder e de combates com um bom balanceamento para evitar que os heróis fiquem fortes ou fracos demais até chegar ao fim da jornada (esse balanceamento iremos ver alguns detalhes no próximo post) e sua relação com os resultados obtidos com os dados D20. Note como o uso da probabilidade e de noções de equilíbrio numérico serão fortemente usadas. A partir desses modelos é possível construir todas as outras cartas (os exemplos em SVG estão no link listado acima) e imaginar situações, que claro vai ficar por sua conta. No próximo post, vamos falar sobre valores de batalha e como o dado D20 influencia na progressão do jogo. Até a próxima!

sexta-feira, 12 de abril de 2019

Construindo o seu RPG de mesa: o tabuleiro.

Um RPG de mesa pode ser considerado um game de interpretações cuja as escolhas e acontecimentos podem estar vinculados ao uso de dados (D20 na maioria das situações). Nos registros oficiais, o primeiro RPG lançado foi o Dungeons & Dragons (masmorras e Dragões), em 1974. Ele deu origem a diversos outros games nessa perspectiva e inclusive ao famoso desenho Caverna do Dragão. 


Agora, construir o seu próprio RPG de mesa é algo único e especial, que apresenta diversos desafios e que claro, tem muita Matemática. E é isso que será abordado nessa série de posts. Hoje em especial, a criação e caracterização do tablado com a presença dos heróis e vilões.
Quando se começa do zero, é importante ter uma ferramenta de desenho vetorial (aqui usaremos o InkScape) para que possa-se fazer posteriores alterações e melhoramentos (paint tá proibido, viu!). O tablado deve possuir um começo para os heróis, uma série de desafios e um grande objetivo final. Na imagem abaixo, você pode conferir alguns desses elementos:


Os heróis iniciam no vilarejo no canto inferior esquerdo e devem seguir sua jornada até chegar no castelo onde existe o chefão que devem derrotar. Pelo caminho, podem encontrar diversos desafios como: sobreviver em uma floresta, lutar contra piratas, escalar montanhas, atravessar rios, dentre outros. Esse tablado acima mostrado se encontra disponível no seguinte link com alguns outros arquivos de uso 2D e 3D: https://drive.google.com/drive/folders/1wymj4-RzBQaZpHAdxcLCBsuRFWeP3yAG?usp=sharing. Ele foi totalmente desenhado no InkScape exigindo alguns conhecimentos geométricos, mas ele pode ainda ser construído de uma maneira diferente: mesclando o 2D e o 3D.
Para a construção usando o 2D, que pode ser usada uma cortada a laser ou mesmo papelão ou EVA, além do próprio tablado, pode ser construído casas, castelos, árvores, montanhas (com cortes de nivelamento), dentre outras possibilidades. Ao modelar em 2D, além da Geometria Plana, tem as unidades de medida e a possibilidade de transformação do 2D para o 3D. No site do Thingiverse (https://www.thingiverse.com/) se você colocar as palavras chaves em inglês com o termo "lasercut" irá encontrar diversas possibilidades.


Para a construção usando o 3D, uma das únicas alternativas é o uso da impressora 3D, modelar personagens, vilões, animais selvagens, casas, castelos, dentre outros. Ao modelar em 3D você estará aprendendo diversos conceitos da Geometria Espacial e unidades de medida. Caso você não queira modelar em 3D usando o TinkerCad ou o OpenScad, use o site do Thingiverse com as palavras chaves em inglês e irá encontrar diversas opções diferentes.


Por hora é isso. No próximo post iremos abordar as diferentes possibilidades de um enredo e sua estrutura lógica de construção, bem como possíveis regras para que um RPG de mesa funcione corretamente. Até a próxima!

quarta-feira, 10 de abril de 2019

Pygame: Colisão entre objetos - Parte: 02

Conforme o post anterior (https://vemfazermatematicaegames.blogspot.com/2019/04/pygame-colisao-entre-objetos-parte-01.html) iniciamos uma programação para colisão de dois personagens. Entendemos como funciona a programação que utiliza os conceitos de distância entre dois círculos (Geometria Analítica), mas agora iremos entender como é realizado esse cálculo com um personagem que se movimenta pela tela.
Primeiramente observe a programação destacada abaixo:



Como podemos ver, temos a construção das variáveis "xmario" e "ymario"como a soma da posição em X e Y respectivamente mais o valor do raio (lembre que na distância foi utilizado uma "média para os valores de 45 e 65 com o valor de 50 e, isso ocorre por conta de uma circunferência que envolve o Mário que é uma forma mais elipsoide). Também temos a definição do "xcogumelo" e "ycogumelo" para a soma de valores de posição do cogumelo (500, 300) mais o valor de raio 128 (note que nesse caso não foi diferenciado valores para X e Y pois a própria forma do cogumelo se assemelha a uma circunferência).


Com o calculo da distância vamos comparar ponto a ponto os X e Y do Mário em relação ao Cogumelo e os casos que foram apresentados no post anterior serão verificados pela definição "colisão" (que nada mais é do que o cálculo de distância entre pontos quando ela fica menor do que 128 + 50):



Perceba que foi usado um "if" (se) para o caso em que existe colisão dos personagens (circunferências) em que se for exatamente em apenas um ponto (tangência entre as duas circunferências) irá ser desenhada na tela a posição atual do personagem, caso contrário (else ou senão), onde temos o personagem avançando mais do que deveria dentro do outro personagem (circunferências secantes ou mesmo internas) irá ser desenhado a posição do personagem anterior. Esse último acaba acontecendo pois como em X e Y nos movimentamos com valores de 5 em 5, a chance de termos uma tangência entre personagens (circunferências) é pequena e isso acaba dando a ilusão de que o personagem está batendo no outro, sem nunca avançar mais do que deveria.
Incrível o uso de toda essa Matemática só para descrever a colisão entre dois personagens, não é mesmo? Que tal adicionar umas ações para quando os personagens se colidem, ou até mesmo criar um game em que os dois personagens se movimentam pela tela e que o objetivo é um caçar o outro como se fosse um polícia e ladrão (que tal ser multiplayer)? Agora é com você e está nas suas mãos em ir ainda mais longe. Até a próxima!

segunda-feira, 8 de abril de 2019

Pygame: Colisão entre objetos - Parte: 01

No post anterior (https://vemfazermatematicaegames.blogspot.com/2019/04/pygames-criando-um-cenario-e.html) construímos uma programação usando a biblioteca do Pygames para o personagem Mário pudesse andar livremente pelo cenário a partir das setas direcionais do teclado. Mas e se o Mário colidisse com algum outro objeto do cenário? Como programar essa situação? É isso que veremos hoje. Utilize o arquivo Python e as figuras do seguinte link para os testes: https://drive.google.com/drive/folders/1g7vPehglS7ZExeW2it7xTbu7itHM-Fl7?usp=sharing. Veja o seguinte recorte do código:



Basicamente precisamos de algo na programação para detectar a colisão dentre dois objetos. A saída mais elegante e matemática é usando a noção de distância entre dois círculos com uso da Geometria Analítica (que está descrita em partes no código acima). Você deve estar se perguntando, porque dois círculos? A resposta é que estamos fazendo uma aproximação das duas imagens que irão sofrer colisão (o Mário e o Toad(cogumelo)) e se tivéssemos de construir matematicamente uma poligonal que acompanhassem o desenho desses dois personagens, seria um desafio ainda maior, por isso, por hora, vamos nos ater a duas circunferências.
Imagine uma circunferência A com raio de 50 e uma circunferência B com o raio de 128 circunscrevendo o Mário e o Cogumelo respectivamente. Sempre que usarmos a fórmula de distância entre pontos a partir do centro dessas circunferências com a comparação dos seus valores de raios (50 + 128), teremos as posições relativas dessas circunferências e consequentemente a posição de cada um dos personagens:

  • Caso o valor da distância seja maior do que 50 + 128 significa que não existe nenhum ponto de contato entre ambos os personagens (circunferências), portanto não existe colisão.
  • Caso o valor da distância seja igual a 50 + 128 significa que existe um ponto de contato entre ambos os personagens (circunferências), portanto temos colisão (pense como se tivessem se raspando).

  • Caso o valor da distância seja menor do que 50 + 128 significa que existe mais do que um ponto de contato entre ambos os personagens (circunferências), portanto temos uma grande colisão.

E para o nosso game queremos o caso que tenha colisão, portanto na programação usando o if (se) daremos ênfase ao caso em que a distância é menor do que 50+128 (pode considerar o valor de tangência também, caso queira) e obviamente, já definida como se calcula a distância entre pontos via Geometria Analítica. Teoricamente é isso que está embutido no código acima. No próximo post iremos falar da implementação desses conceitos com um dos personagens se movimentando no plano (Mario) e o outro parado (Cogumelo). Até a próxima!

quarta-feira, 3 de abril de 2019

Pygames: criando um cenário e a movimentação de um personagem.

Que tal construir uma programação em que o seu personagem se mova por um cenário pré-definido a partir das setas direcionais? E tudo isso em Python! Vamos lá? Você pode acompanhar toda a construção usando o arquivo fonte e as imagens que estão disponíveis em: https://drive.google.com/drive/folders/1JOVRnSzySzykeqij4o5BVgVyD2Rr7LnM?usp=sharing. Se você precisar de informações adicionais sobre o Python e sua instalação, consulte o seguinte post: https://vemfazermatematicaegames.blogspot.com/2018/10/minha-primeira-historia-em-python.html.



O código abaixo é responsável por construir esse pequeno game onde temos um Mário andando pela tela por meio das setas direcionais:



Caso você queira alterar o nome do game, substitua o nome 'Game do Mário' por um novo nome para o seu game, deixando as aspas. Para alterar tanto cenário como o personagem, você deve renomear no  código, os novos nomes e extensões de arquivos que você tem (em pygame.image.load). Lembre-se de deixar as novas imagens na mesma pasta que o arquivo Python e para o personagem, procure usar imagens do tipo PNG, pois elas não terão um fundo diferente que vai ficar contrastando com o cenário previamente escolhido.
A movimentação do personagem ocorre graças a um conjunto de "se" (if) que fazem verificações a todo momento se as teclas direcionais estão ou não pressionadas (if event.key == pygame.K_LEFT:). Caso a tecla não esteja pressionada, o personagem não anda em X ou Y. Caso, esteja pressionada, ele irá andar o valor 5 , respeitando o plano cartesiano:



Que novas modificações podem ser realizadas? Seria possível ter mais do que um cenário ou diversos personagens na mesma tela? Compartilhe nos comentários suas produções e até a próxima.

Como não perder nenhum compromisso: Meu App Agenda

No nosso dia a dia a agenda é um instrumento de grande importância que as pessoas utilizam para fazer anotações de compromissos ou informaçõ...