3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

バーコードバ⚪︎ラーをつくってみた

Last updated at Posted at 2025-12-18

事の発端

ある日、近所の電子パーツ屋でジャンク市が開催されていました。
そこで、社内の「ものづくり部」メンバーで遊びに行きました。
店内を物色していると、箱に詰められた大量のバーコードリーダーを発見!!!
image.png
その価格、なんと1台100円!!!

その瞬間、頭をよぎったのは――

バーコードバトラー

バーコードバトラーだ!
我々にはバーコードバトラーしかない!!!!!!

…というわけで、
今回は 「バーコードバトラー」 を作ってみることにしました。

バーコードバトラーーーーーーーーーー!!!!!!!

皆様、「バーコードバトラー」をご存知でしょうか?

私は『こち亀』で存在を知り、
YouTubeにアップされているプレイ動画で
「なんとなくの雰囲気」を知っている程度です。

せっかくなので、ここで Wikipedia を開いて確認してみましょう。

バーコードバトラー(Barcode Battler)は、1991年にエポック社から発売された電子ゲーム機。または、そのシリーズ。

本体に備わったスリットにバーコードの付いたカードを読みとらせ、その数値情報からキャラクターやアイテムのデータを生成し、1vs1(バーコードバトラーII2 C0では最大4人)で遊ぶゲーム。専用のカードが同梱されてはいるが、一般商品などについているバーコードを使ってオリジナルキャラクターを作ることができるというのが肝である。

ゲームモード選択後、カードを本体にスライドさせることでデータを読み取らせ、液晶に生命力(HP)、攻撃力(ST)、守備力(DF)などのデータを持つキャラクターを表示させる。対戦モードの場合、二人がそれぞれ持ち寄ったバーコードを読み取らせた後、ランダムあるいは潜在能力(液晶に表示されない隠しパラメータ)により先攻・後攻が決められる。その後、戦闘が開始される。

ゲーム自体は非常にシンプルであり、プレイヤーの操作はゲームモードを選択すること、バーコードを読み込ませることと、交互に訪れる各自のターンに「攻撃」か「回復」を選択することのみである(バーコードバトラーII以降は魔法の使用も可能となった)。

まとめると、

  1. バーコードを読み取り
  2. 生命力・攻撃力・守備力を何らかのアルゴリズムを用いて算出
  3. ランダム or 潜在能力 で先攻・後攻を決定
  4. 戦闘開始

上記4ステップで戦闘が開始される流れですね。

楽しそうですね!早速作っていきましょう!!

バーコードリーダーの仕様

メーカー/型式

オプトエレクトロニクス社製 OPL-6845S-V-WHT-USB

読み取れるバーコード

UPC-A, UPC-A Add-on, UPC-E, UPC-E Add-on, EAN/JAN-13, EAN-13 Add-on, EAN/JAN-8, EAN-8 Add-on, Code 39, NW-7 (Codabar), Industrial 2 of 5, Interleaved 2 of 5, Code 93, Code 128, GS1-128, MSI/Plessey, Matrix 2of5, Code 11, GS1 DataBar, GS1 DataBar Limited, GS1 DataBar Expanded

日本で流通している基本的なバーコードはほとんど対応できます

PCへの入力方式

Full-Speed 12 Mbps USB(HID/COM)プラグ-A

今回のバーコードリーダーはUSB仕様、
読み取り時にキーボード入力(読み取った番号+Enter)される仕様だった

実際に作ってみた

気軽に遊びたいので、今回はWeb上で動くようにします。
Ruby on Rails 入門のついでに作成しました。

また、不正なバーコードが読み取られて競技として成立しないことを考慮し、バーコードを検証します。

そこで、Yahoo!ショッピングの商品検索APIを用いて、
「実際に商品がこの世に存在するのか」を検証します。

また、商品ごとに面白いキャラクター名を付けたいので、
Gemini 2.5 Flash-Lite を用いて、キャラクター名を生成させることとしました。
ついでに、バーコードに対する各特性も生成させてみることにしました。

ゲームの名称

「バーコードファイター」
バーコードを使って戦わせるから、「バーコードファイター」。

システムプロンプト

Geminiで生成させる際の雑に考えたシステムプロンプトはこちら

ユーザーから与えられた商品名や説明を使って、
面白く親しみのある、ソーシャルゲームに出てくるようなかわいいキャラクター名を作成し、生命力/攻撃力/守備力を出力してください。
値のMAXは 999999 です。なるべくランダム性があり、数値のMAXは大きいことも考慮して決定させてください。
また、連続した数字はインパクト的に寒いネタなので、できる限りやめてください。稀に出すことは許可されます。
バトルで燃えるような、インパクトのある値がいいです。

リクエストボディ

構造化出力を使ってバトルの際に使いやすくしています。

{
  systemInstruction: {
    parts: [
      {
        text: "{システムプロンプト本文}",
      },
    ],
  },
  generationConfig: {
    temperature: 1.75,
    responseMimeType: "application/json",
    responseJsonSchema: {
      type: "object",
      properties: {
        character_name: {
          type: "string",
          description:
            "ユーザーから与えられた商品名や説明を元に生成した、ソーシャルゲーム風で面白く親しみのある、かわいいキャラクター名",
        },
        vitality: {
          type: "integer",
          description:
            "生命力。1〜999999 の範囲で、バトルで燃えるようなインパクトのある値",
        },
        attack: {
          type: "integer",
          description:
            "攻撃力。1〜999999 の範囲で、バトルで燃えるようなインパクトのある値",
        },
        defense: {
          type: "integer",
          description:
            "守備力。1〜999999 の範囲で、バトルで燃えるようなインパクトのある値",
        },
      },
      required: ["character_name", "vitality", "attack", "defense"],
    },
  },
  contents: [
    {
      parts: [{ text: "商品名: #{name}\n説明: #{detail}" }],
      role: "user",
    },
  ],
}

ワタガラス VS 新里ウイスキー

今回の選手

  • 大城海産物加工所 ワタガラス
  • 新里酒造 新里ウイスキー

読み込む

バーコードリーダーを使って読み込みます!
読み込まれた瞬間に、「ピッ!」という音がします。
オフィスの中で読み取り音が響くくらい大きいです。

ワタガラス 選手
新里ウイスキー 選手

Ready Fight!!!

読み込む瞬間からバトルの様子までをお届けします!

感想

「ピッ!」と読み込んで商品名が出た時、すごく楽しい気持ちになりました。
バトルは非常にシンプルなものですが、商品同士が戦う姿を見ていて非常に楽しいです。
今は一人で遊んでいますが、オフィスにいるメンバーを呼んで対戦したいなと思いました。

終わりに

近々、ソースコードを公開しようかなと思っています!
公開された際は、「レッツファイト!!!」してくださいね!


※この記事は、AI文章校正ツール「ちゅらいと」で校正されています。

3
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?