HTMLとCSSはなんとなく理解したが、JavaScriptが全然わからない。functionの使い方も、配列の使い方も、僕らがどこへ行くのかも、何もかも。そこで、実際に作ってみたらある程度勉強になるのではないかと思い、ポケモン対戦ゲームを作ってみることにした。これはポケモン対戦ゲームの開発とその中断についての話。

#きっかけ
Showdownというものを知っているだろうか。ウェブサイト上でポケモンの対人バトルが出来るというものだ。ほぼ使ったことはなかったが、存在自体は知っていたため、自分もこのようなものを作ってみようと思い立った。
ポケモンバトルとなると、ポケモンの種族値、努力値配分、性格補正など数値でのデータの処理が多くを占めるはずだ。(22 × わざ威力 × A(C)÷ B(D)÷ 50 + 2)×(0.85から1までの乱数)という式は中学でみんなで対戦している時に覚えたが、一度も使ったことがない。でも今日こそはこれの出番だ。調べたところどうやらPokeAPIというポケモンのデータをなんでも取得できるサービスもあるらしい。行けそうだ、というわけで作り始めた。

#出来たところまで
一応途中までは作った。
まず初代ポケモンをカタカナで選び、決定ボタンを押す。名前が違うと警告が出て、初代ポケモンのリストにあるやつを選ぶと次の入力するところまでページがスクロールされる。それと同時に初代ポケモンのリストの何番目にあるかの数字を取得し、実際のポケモンの図鑑番号から、PokeAPIに通信を送り、種族値を取得する。
次に、性格補正を選ぶ。選択式になっているので変な値を入力される心配はない。+補正と-補正をそれぞれ選び、ユーザーが選んだものが記録される。性格補正は最終的な数値に1.1(0.9)倍されるので、まだ処理は行われない。
そして努力値を配分する。それぞれのステータスに合計510まで、一つに252まで入力できる。数字以外は入力できないようにし、数字も0以上(これが大事で、これがないとAのCの片方-1000にしてほか全部252みたいな事ができてしまう)252以下で合計510以下であることを判定し、問題がなければ次へスクロールされる。ここで実数値={(種族値×2+個体値+努力値÷4)×レベル÷100+5}×性格補正(これはHP以外の計算式)を求め、最終的なポケモンの実数値を記録する。

#困難
ポケモンの実数値の処理までは出来た。が、ここで問題が発生する。実際に対戦をするとなると、それぞれのポケモンが覚えるわざやわざの追加効果、ポケモンのタイプ相性表を実装する必要がある。……どうするんだ、これ。
各ポケモンが覚えるわざは一応PokeAPIから取得できる。そのわざのタイプや命中率、特殊技が物理技かも取得できる。が、ここで難易度が上がり、諦めかける。
わざの追加効果……これは僕には無理だった。例えば”つるぎのまい”をした時に使ったポケモンのA実数値を2倍にするという処理がある。”こうそくいどう”ならS実数値を2倍、”めいそう”ならCとDの実数値を1.5倍。これをわざひとつひとつに効果をJavaScriptで記述するのは相当な作業量である。
そしてポケモンタイプ相性表。複数タイプを持つポケモンの処理は単に掛け算で済ませられそうではある。例えばみず、ほのおタイプのボルケニオンにみずわざは水の0.5倍×ほのおの2倍=1倍(等倍)というように、それぞれの攻撃側のわざのタイプと受け手側のわざのタイプに数値を結びつければよい。18のタイプがあるため、18×18個分の相性を手作業で実装する……。
作業量の削減のためにユーザーが使えるのは御三家の最終進化三体のいずれか、CPUは選ばれなかった御三家のいずれか、というようにすれば三体のポケモンが覚える範囲のわざだけの実装で済ませることが出来るとも考えたが、それで面白いだろうか。 そもそも元案も面白くはない。というわけで開発は凍結した。

ただ、当初の目的であったJavaScriptの勉強にはなった。僕が実装できた範囲まででも書かなければならない部分があって、作っていて楽しかった。ではまた