【Java】PokeAPIで遊んでみた(Pokemon.java編)

ネットサーフィンをしていたら面白そうなAPIを見つけたので遊んでみました。

↓↓↓↓**pokeAPI**↓↓↓↓
https://github.com/oscar0812/pokeapi-v2-java

このAPIの**Pokemonクラス**を重点的に調べてみました。
使用するにはpom.xmlに下記の追加に加え、Java15以上でないと使用することが出来ません。
```pom.xml
	<dependency>
  		<groupId>com.github.oscar0812</groupId>
  		<artifactId>pokeapi</artifactId>
  		<version>1.0.0</version>
	</dependency>
```

# 使い方
Clientクラスの **getPokemonById()** 又は **getPokemonByName()** を使用することでポケモンの情報を取得することが出来ます。

```Sample.java
    // ピカチュウの全国図鑑No.で取得
    Pokemon pikachu = Client.getPokemonById(25);
    // ピカチュウの英語名で取得
    Pokemon pikachu = Client.getPokemonByName("pikachu");

```

# Pokemonクラスの構成
Pokemon.java の構成は以下の通りです。
```Pokemon.java
public class Pokemon extends NamedAPIResource {
	private int id;

	private int base_experience;

	private int height;

	private boolean is_default;

	private int order;

	private int weight;

	private ArrayList<PokemonAbility> abilities;

	private ArrayList<PokemonForm> forms;

	private ArrayList<VersionGameIndex> game_indices;

	private ArrayList<PokemonHeldItem> held_items;

	private String location_area_encounters;

	private ArrayList<PokemonMove> moves;

	private PokemonSprites sprites;

	private PokemonSpecies species;

	private ArrayList<PokemonStat> stats;

	private ArrayList<PokemonType> types;
}

```
###### ①id
idとはポケモンに登録されてある **全国図鑑No.** のことを指します。
フシギダネなら1、ヒトカゲなら4、ゼニガメなら7となります。

###### ②base_experience
base_experienceとはポケモンに登録されてある **基礎経験値** のことを指します。
基礎経験値は敵を倒したときに獲得できる経験値に影響します。

>pokemon.wikiより
経験値 = (EXP × A × レベル補正^2.5 + 1) × B × C × D
EXP : 倒されたポケモンのレベル × 倒されたポケモンの基礎経験値 ÷ 5
レベル補正 = (2L + 10) / (L + Lp + 10)
L : 倒されたポケモンのレベル
Lp : 倒したポケモンのレベル
A : (第五世代のみ)トレーナー戦なら1.5、それ以外は1。第七世代では常に1
B : デルパワー・ロトポンの効果。けいけんちパワー+は1.2、++は1.5、+++は2.0、-は0.8、--は0.66、---は0.5。けいけんポンは1.5。
C : 他言語版と交換したポケモンは1.7、同言語と交換したポケモンは1.5、おやが自分であれば1
D : しあわせタマゴを持っていれば1.5、それ以外は1

###### ③height
heightとはポケモンの **高さ** を指します。

###### ④isDefault
isDefaultとはポケモンが **通常フォルムであるか** を指します。
 **例)** デオキシスにはノーマルフォルムに加え、アタックフォルム・ディフェンスフォルム・スピードフォルムの複数のフォルムが存在する。
↓↓↓↓詳しくは↓↓↓↓
https://yakkun.com/bdsp/zukan/n386

###### ⑤weight
weightとはポケモンの **重さ** を指します。

###### ⑥abilities
abilitiesとは **ポケモンの持つ可能性のある"とくせい"の情報、"とくせい"に付随する情報(第何世代で実装されたか・夢特性かどうか等)** を指します。
 **例)** ピカチュウは個体によって"せいでんき"又は"ひらいしん"という特性を持つ可能性があります。

###### ⑦forms
formsとは、 **別フォルムの情報** を指します。
 **例)** デオキシスは複数フォルムが存在するため、各フォルムの情報がListで存在する。

###### ⑧game_indices
game_indicesとは、 **そのポケモンが出ているシリーズの情報** を指します。
 **例)** ポケモン赤緑・ポケモン金銀など

###### ⑨held_items
held_itemsとは、 **ポケモンが野生ででてきた時に持っている可能性のあるどうぐ**を指します。
 **例)** ピカチュウであれば"でんきだま"、ラッキーであれば"しあわせタマゴ"など

#####  ⑩location_area_encounters
location_area_encountersとは、ポケモンに遭遇する場所のURLを取得できます。
このURLを使用することでシリーズごとにどこで出現するかどうかのデータを取得することができます。

#####  ⑪moves
movesとは、**ポケモンがもつ""わざ"についての情報**を指します。現在持っているわざ・レベルで覚えるわざ・わざマシン、ひでんマシンで覚えるわざなどの情報

#####  ⑫sprites
spritesとは、**ポケモンの画像を取得できるURLを複数持っています。**
 **例)** 通常・色違い・戦闘時の画像(味方)・戦闘時の画像(敵)など

#####  ⑬species
speciesとは、**ポケモンの性別・捕まえやすさ・なつき度・たまごグループなど詳細なデータ**を指します。

#####  ⑭stats
statsとは、 **ポケモンのステータス(個体値と努力値)** を指します。
ピカチュウであれば、H35 A55 B40 C50 D50 S90 が個体値。これに努力値をふることでステータスが変化する。

#####  ⑮types
typesとは、**ポケモンのタイプ** を指します。
以上がPokemonクラスが保持している値になります。

# まとめ
今回はPokemonクラスを中心に遊んでみました。なかなか根が深く全てを把握しておりませんが、ゲームの中身を覗いているようで面白かったです。
このAPIを使って勉強ついでにWebAPIを作ってみたいと思います。
なにか間違い等ございましたら、ご指摘の程よろしくお願い致します。