---
# System prepended metadata

title: Segundo trabalho prático de Tópicos Especiais em Programação I

---

# 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. 

![](https://i.imgur.com/kTr8OaK.png)

### 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
```