Help us understand the problem. What is going on with this article?

hubotでポケモンGOつくったら皆遊んでくれた話

More than 3 years have passed since last update.

これはチャットボット Advent Calendar 2016 15日目の記事です。

ポケモンGOと書きましたが、GO的要素はほぼ無いです(死

あらすじ

チームでbotを作ってみたはいいものの…なんかパッとしない…
リマインダーと、オススメのラーメン屋を教えてくれる機能しかない…

PokemonGOがリリースされたから、ポケモンの面白機能を付けよう!そうしよう!

…というわけでブームにあやかってみたら、メンバーの皆がびっくりするくらい使ってくれた機能のご紹介です。

機能概要

SS-2016-12-13-15.49.59.png

うちのチームのbotの戸越くんです。
(※元ネタ:http://www.yurugp.jp/vote/detail.php?id=00000086

get pokemonというと、botがポケモンを捕まえに行ってくれます。
その後、捕まえたポケモンとそのCPを教えてくれます。

それだけです!(今のところ)

中身

  • hubot
  • ES2015
  • pokeapi(http://pokeapi.co/)
  • 翻訳用json(PonDad/pokemon.json
  • ポケモンのドット絵が掲載された海外のページのURL(※なんか色々グレーな気がしますが、割愛)

※APIから画像も返却されるんですがアニメーションgifの方が可愛かったので、外部のURLを参照してます。。

プログラムは至極単純です。

// configに最大値や、APIのURLなどを定義しておく

// 数値をランダム生成してリクエストURL定義
const pokeSelect = Math.floor(Math.random() * config.max) + 1;
options.url = config.api + pokeSelect + '/';
// APIにリクエスト
request.get(options, (err, response, body) => {
    if (response.statusCode === 200) {
        const pokeData = {
            id: body.id,
            name: translateData[body.id - 1].ja, // 翻訳jsonから該当するポケモンの日本語名を取得します
            img: getUrl(body.id, body.name) // 返却値のidをもとにして、画像URLをつくります
        };

        // 数値をランダム生成してポケモンの強さ(CP)を定義
        const cpMax = 2000;
        const pokeCp = Math.floor(Math.random() * cpMax);

        res.send('CP' + pokeCp + '' + pokeData.name + 'を捕まえたゴシ!\n' + pokeData.img);

        // もしCPが1900よりも上だったら驚いてくれます
        if (pokeCp > 1900) {
            res.send('コイツはつよいゴシ!!');
        }
    } else {
        // APIエラーだった場合は、捕まえてきてくれません
        res.send('捕まえるの失敗したゴシ…。');
    }
})

pokeapiは、ポケモン図鑑の番号に合わせてリクエストを送るとポケモンの情報を返してくれます。
なんか色々遊べそうなデータがいろいろありましたが、今回は名前とIDくらいしか使っていません。

なんか大人気

SS-2016-12-13-16.15.23.png

何がウケたのか定かではありませんが、1日1ゲットくらいの感覚でみんなポケモンを捕まえる習慣がついてきたように思えます。

ミュウとか出ると、やたらリアクションがついて盛り上がってます。
かわいい系のポケモンが出ると、一部の人がハートマークを付けてきます。

今後の拡張計画(夢)

捕まえたポケモンのデータを保持したい

現状は、APIからの返却に基づいて都度表示を返しているにすぎません。
ですが、やっぱりポケモントレーナーとしては「捕まえたい」ですよね!

そこで、ポケモンのデータを何かしらの方法で保持して以下のような情報蓄積をしたいと思ってます。

  • いままでに捕まえたポケモンの種類(ポケモン図鑑だ!)
  • 捕まえた同種ポケモンの中で一番高いCPがいくつなのか

zukan pokemonで何%図鑑が埋まったのか見れたり、maxcp pokemon pikachuでいままで捕まえたピカチュウの中で一番高いCPがいくつなのかを見れたりしたいです!

さらにデータが別にあるのなら、Webブラウザから参照できると面白いかも!

ユーザー情報を取り入れる

誰が何を捕まえたのかというデータがあれば、自分が捕まえたポケモンだけを使ってパーティが組める…!

add pokemonparty pikachu remove pokemonparty pikachuとか!

そうなってくると、対戦機能とかも付けたくなってきますね!(白目)

もっと失敗させる

現状はAPIからレスポンスさえあれば、ポケモンのゲットに成功します。
でもPokemonGOってもっとシビアですよね。

そこで、スーパーボールやハイパーボールを使うとゲット率に影響するみたいな仕組みも考えています。

そうすると…、じゃあユーザー毎の持ち物の管理とかも……?ハイパーボール投げ放題っていうのも、ゲーム性に欠けますよね…。

デバック方法なんとかしたい

基本的にはランダム要素なので、たとえばIDが100番未満のポケモンの場合にホニャララする、みたいなことをしたい場合、
ひたすら100番未満が出るまでモンスターボールを投げ続けないといけなくてつらみを感じています。

usagi-f
Frontend Engineer
dmmcom
総合エンタテイメントサイト「DMM.com」を運営。会員数は2,900万人を突破。動画配信、FX、英会話、ゲーム、太陽光発電、3Dプリンタなど40以上のサービスを展開。沖縄での水族館事業参入、ベルギーでのサッカークラブ経営など、様々な事業を手掛ける。また2018年より若手起業家の支援を強化、「DMM VENTURES」による出資や、M&Aなどを積極的に展開している。
https://dmm-corp.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away