3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ポケモンの対戦シュミレータを作ってる話

Posted at

はじめに

こんにちは、4月から都内のSES企業で働いてる佐々木と申します。
先月ぐらいから勉強がてら毎日少しずつ作ってるポケモン対戦シミュレータが少しぐらい形になってきたので今日はそちらを紹介していきたいと思います。

概要

https://github.com/sasakirione/PokemonClone
・仕事ではそこまでコーディングする機会がないので1実際にガッツリコーディングする経験を積みたい
・TDDをやってみたい
・単純にポケモンが好き
・オブジェクト指向的な設計の勉強をはじめて試してみたくなった
・とりあえず研修で勉強してある程度基礎ができてるであろうJavaをある程度のレベルまで持っていきたい

以上の理由からJavaとなんちゃってTDDでポケモンの対戦シミュレータを作ってみました。

使い方

もちろんGUIアプリケーションではないのでわざわざ使う人も少ないと思いますが一応簡単な使い方を解説していきたいと思います。テストコード見て貰えばなんとなく分かると思いますが、一応まとめておきます。
まず使用するポケモンのオブジェクトを作ります。

Pokemon pokemon = pokemonDataGet.getObjectByID(788, 0, new int[]{252, 0, 0, 252, 0, 0}, 1, "たべのこし", "ひかえめ");

pokemonDataGet.getObjectByIDはstaticメソッドなのでそのまま呼び出してください。引数は左から図鑑番号、フォーム番号、努力値、特性、道具、性格です。
次に試合のフィールドのオブジェクトを作ります。

PokemonStadium stadium = new PokemonStadium(pokemon1, pokemon2);

あとは実際に技を打つだけです。
次のように技名をいれます。

stadium.forwardTurn("めいそう", "ハイドロポンプ");

前者がpokemon1の、後者がpokemon2の繰り出す技です、実際の順序はきちんとSで決まります。
ただこれでは試合がどうなってるのかが分かりません。なので試合のログを表示する機能も作っています。

BattleLog.getLogAll();

ちなみに次のような感じでログが表示されます。

Aは ウーラオス(れんげきのかた) を繰り出した!
Bは ミミッキュ を繰り出した!
ウーラオス(れんげきのかた) の すいりゅうれんだ のこうげきだ!
ミミッキュの ばけのかわ
ばけのかわが みがわりに なった!
ミミッキュの ばけのかわが はがれた!
114/130 緑
急所に 当たった!
45/130 黄色
急所に 当たった!
0/130 赤色
3回 当たった!
ミミッキュ はたおれた

以上が大体の使い方です。

現状

できること

  • 攻撃を打てます(技データベースは5世代まで+αから剣盾非対応技を除いた分だけあります)
  • ポケモンの交代ができます
  • 一部連続技が出せます
  • 命中率があります
  • 急所に当たります
  • 確定急所の技が確定で急所になります
  • げきりんなどの数ターン暴れ回る系の技が使えます
  • 一部変化技が出せます(ただここで紹介した使い方では使えませんすいません)
  • 性格の考慮
  • 一部特性や道具が使えます(詳しくは定数クラスをご覧ください)
  • まひします(ただSが下がるだけです)

できるようにしたいこと

  • ここで紹介した方法で変化技をだす
  • 第6世代以降の技も追加する
  • 技の追加効果の実装
  • 残りの特性や道具の実装
  • まひ以外の状態異常の実装
  • トレーナーの概念を追加(3体瀕死になったら試合終了する)

etc...

思った事

やっぱりプログラミングは実践あるのみ

オブジェクト指向をちゃんと勉強しはじめてから初めてガッツリ書くコードだったんですが、やっぱり頭では分かってても身体では分かってない事が多すぎるなって感じる毎日です。あるとき突然、あそこで言ってたのはこういうことだったのか!みたいな発見が実際に知ってからある程度経った時に急にくることが何度もありました。そのたびに「ちょっと前の俺、こんなコード書いててアホちゃうか?」みたいな事を毎日思っています。まあ書いた直後に思う事もよくあるんですけどね。

テストがないとこわい

なんちゃってTDDをやってて思ったのがテストがないと怖いということです。もちろんテストの粒度とかガバガバでしょうしあんまりキャッチ力がないかもしれませんが、それでもやっぱりテストがあるのは安心感があります。というかテストを書く事によりちょっとリファクタリングしただけですぐ凡ミスで赤くなるのを体験するとどうしてもテストは絶対に必要だなって感じるようになってきました。そして同じような話ですがテストがあると安心してリファクタリングができるのでリファクタリングが楽しい!

最後に

なんとなくポケモンが好きだからポケモンの対戦シュミレータを作り始めましたが、いま思うと勉強にはかなりいい題材だったかなと思います。ぼくはどうしても飽き性なのでそろそろ飽きてきたので新しいプログラムを作ろうかなって思ってるのですが、これからも少しずつこっちも更新を続けていきたいと思います。第9世代出るまでにある程度完成するといいなぁ・・・

  1. 一応設計工程から入らせてもらってますがレガシーすぎてずっとExcelを弄っています。

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?