# Segundo trabalho prático de Tópicos Especiais em Programação I
**Leonardo F. E. Albergaria e Rafael de O. Cozer
DI/UFES**
## Visão Geral
> O projeto visa recriar, de forma simplificada e utilizando a linguagem C, a interface de batalha dos clássicos jogos "Pokémon" da Nintendo.
> Nesse código, visou-se, também, a implementação de um arquivo de placares, à fim de ranquear os jogadores, os quais obtém pontos a cada batalha vencida.
> Como no primeiro trabalho, o código foi elaborado utilizando-se diversas TAD's. Além disso, foram utilizados novos conceitos, como listas encadeadas e ponteiros de função.
```python
_.----. ____ ,' _\ ___ ___ ____
_,-' `. | | /`. \,-' | \ / | | \ |`.
\ __ \ '-. | / `. ___ | \/ | '-. \ | |
\. \ \ | __ | |/ ,','_ `. | | __ | \| |
\ \/ /,' _`.| ,' / / / / | ,' _`.| | |
\ ,-'/ / \ ,' | \/ / ,`.| / / \ | |
\ \ | \_/ | `-. \ `' /| | || \_/ | |\ |
\ \ \ / `-.`.___,-' | |\ /| \ / | | |
\ \ `.__,'| |`-._ `| |__| \/ | `.__,'| | | |
\_.-' |__| `-._ | '-.| '-.| | |
`' '-._|
```
## Sobre as bibliotecas
### 1. Jogador.h
> Nessa biblioteca implementou-se os trechos de códigos relacionados aos jogadores, como a verificação de nome, a lista de pokémons do jogador, alterar variáveis relacionadas (Quantidade de pokébolas, pokémons e vitórias), bem como, obviamente, atribuir tais dados à estrutura do jogador.
### 2. Pokemon.h
> Biblioteca relacionada aos pokémons e todas suas atribuições. Nesta, implementou-se as estruturas de cada um dos seis pokémons com suas respectivas variáveis, a dispatch table para seleção dos pokémon, assim como uma função para averiguar possíveis efeitos aplicáveis aos pokémon.
EXTRA: Implementou-se, também, uma dispatch table para printar na tela os desenhos dos pokémon durante as batalhas.

### 3. Menu.h
> Biblioteca simples apenas para inicializar e printar o menu principal, bem como o menu para seleção dos pokémon iniciais.
### 4. Ataque.h
> Nessa biblioteca, implementou-se os ataques dos pokémons, bem como trechos de códigos onde calcula-se os danos durante as batalhas, tendo em conta a relação de tipo dos pokémon.
### 5. Batalha.h
> Aqui, implementou-se os trechos de código responsáveis por fazer a batalha acontecer, utilizando dos atributos das bibliotecas anteriores. Trabalhou-se os códigos relacionados aos turnos das batalhas, o menu de opções do jogador durante uma batalha, bem como um trecho de código responsável por gerar um número aleatório, à fim de calcular probabilidades durante as batalhas (Probabilidade de captura, fuga, crítico, efeitos aplicáveis, etc.).
### 6. Placar.h
> Por fim, criou-se a biblioteca de placares, responsável por criar e alterar a lista de placares após cada partida, printando o ranking dos jogadores no arquivo de placares.
##########################################################################
## Uso dos arquivos txt
### Arquivo logs.txt
> Arquivo utilizado para armazenar o histórico das batalhas. O histórico armazenado fica disponível até a próxima vez que o programa for inicializado novamente.
```cpp
1.1 - Mew vs Blastoise
Mew usou Auto-Destruir
Mew - 0.0% HP
Blastoise - 79.3% HP
leonardo perdeu!
1.2 - Pikachu vs Blastoise
Blastoise usou Arma de Água
Pikachu - 83.4% HP
Blastoise - 79.3% HP
Pikachu usou Bater
Pikachu - 83.4% HP
Blastoise - 73.5% HP
```
### Arquivo placares.txt
> Arquivo utilizado para ranquear os jogadores de acordo com sua pontuação obtida.
> Em caso de empate, o ranqueamento é feito por ordem alfabética, independente de maiúsculas ou minusculas.
```cpp
leoNArdo 6
dANIEl 3
Rafael 3
LuCas 1
```