TEXTBOOK SECTION / AI LEARNING

キャラクター選択画面を作る

AI活用と意思決定デザインの「AIで次に選ぶキャラクターを考えるアプリを作ろう」より、キャラクター選択画面を作るを解説。生成AI、AI活用、DX、業務改善を実践しながら学べるオンライン教材です。

1AIで次に選ぶキャラクターを考えるアプリを作ろう意思決定 / AI活用 / ChatGPT / Gemini / Claude

OVERVIEW

この節で学べること

概要を表示する
項目内容
教材名AI活用と意思決定デザイン
AIで次に選ぶキャラクターを考えるアプリを作ろう
キャラクター選択画面を作る
カテゴリ意思決定 / AI活用 / ChatGPT / Gemini / Claude
学習内容生成AI、AI活用、DX、業務改善を実践しながら理解するための教材です。

TABLE OF CONTENTS

目次

CONTENT

ここから

目的

5対5のゲームを想定して、相手チームと自分チームのキャラクターを選べる画面を作ります。

この章では、まだAI分析は使いません。

まずは、キャラクターを選ぶための画面と、クリックしたキャラクターをチーム枠に入れる仕組みを作ります。

完成イメージ

画面には、

  • 相手チームの5枠。
  • 自分チームの5枠。
  • キャラクター一覧。

キャラクターをクリックすると、選択中のチームに入ります。

学ぶこと

HTMLで画面の土台を作る。CSSでゲーム風の見た目に整える。JavaScriptでクリック操作を処理する。配列を使って、5人分のチーム状態を管理する。

まず考えること

ゲームのキャラクター選択では、ただキャラクターを並べるだけでは足りません。必要なのは、次の情報です。

  • 相手チームに誰がいるか。
  • 自分チームに誰がいるか。
  • 今、どちらのチームを選択中か。
  • すでに選ばれたキャラクターは誰か。

この情報をJavaScriptで管理します。

const state = {
  activeTeam: 'enemy',
  enemyTeam: [null, null, null, null, null],
  allyTeam: [null, null, null, null, null],
};
  • enemyTeam は相手チームです。
  • allyTeam は自分チームです。
  • null は、まだキャラクターが選ばれていない空き枠を意味します。

キャラクター一覧を用意する

最初は、少ない数で構いません。

const characters = [
  {
    id: 'jett',
    name: 'Jett',
    role: 'Duelist',
    image: '画像URL',
  },
  {
    id: 'sova',
    name: 'Sova',
    role: 'Initiator',
    image: '画像URL',
  },
];

ここでは、キャラクターを配列として管理しています。1人のキャラクターは、idnameroleimage を持ちます。

チーム枠を表示する

5対5なので、それぞれ5枠必要です。

<section class="draft-board">
  <div class="team-box">
    <h2>相手チーム</h2>
    <div id="enemySlots"></div>
  </div>

  <div class="team-box">
    <h2>自分チーム</h2>
    <div id="allySlots"></div>
  </div>
</section>

enemySlots に相手チームの枠を表示します。

allySlots に自分チームの枠を表示します。

キャラクターをクリックして選ぶ

キャラクターをクリックしたときは、次の流れになります。

  1. 現在選択中のチームを確認する。
  2. 空いている枠を探す。
  3. その枠にキャラクターを入れる。
  4. 画面を再描画する。
function pickCharacter(characterId) {
  const character = characters.find((item) => item.id === characterId);

  if (!character) {
    return;
  }

  const targetTeam =
    state.activeTeam === 'enemy' ? state.enemyTeam : state.allyTeam;

  const emptyIndex = targetTeam.findIndex((slot) => slot === null);

  if (emptyIndex === -1) {
    return;
  }

  targetTeam[emptyIndex] = character;
  render();
}

find() は、条件に合うキャラクターを探します。

findIndex() は、空いている枠の場所を探します。

選択済みキャラクターを使えなくする

同じキャラクターを、相手チームと自分チームの両方に入れてしまうと不自然です。

そのため、すでに選ばれたキャラクターは選べないようにします。

function getUsedCharacterIds() {
  return [...state.enemyTeam, ...state.allyTeam]
    .filter((character) => character !== null)
    .map((character) => character.id);
}

この関数では、相手チームと自分チームをまとめて、選択済みのキャラクターIDだけを取り出しています。

この章の完成条件

  • 相手チームを選択できる。
  • 自分チームを選択できる。
  • キャラクターをクリックすると、選択中のチーム枠に入る。
  • 同じキャラクターを重複して選べない。
  • 5枠以上は選べない。
  • 選択済みキャラクターが見た目でわかる。

チャレンジしてみよう

まずは、キャラクターを3体だけ登録して表示してください。

次に、相手チームを選択中の状態でキャラクターをクリックし、相手チームの枠に入るようにしてください。

できたら、自分チームにも同じ仕組みを追加してください。

最後に、選択済みのキャラクターカードを薄く表示してください。

余裕があれば、次の改造にも挑戦してください。

キャラクターをクリックしたときに、効果音が鳴る。

選択済みキャラクターをクリックすると、枠から外せる。

相手チームは赤、自分チームは青に色分けする。

キャラクターの役割ごとに表示を絞り込む。

まとめ

この章では、キャラクター選択画面の土台を作りました。

重要なのは、見た目ではなく「選択状態をデータとして持つ」ことです。

画面で選ばれたキャラクター情報があるからこそ、次の章でAIに分析させることができます。

FAQ

よくある質問

キャラクター選択画面を作るは医療関係者向けだけの内容ですか。
医療分野の例が含まれる場合もありますが、医療関係者だけに限定した内容ではありません。生成AI、AI活用、DX、業務改善、プロトタイプ開発など、一般的なAI学習の事例として読める内容です。
AI初心者でも読めますか。
はい。AIをこれから学ぶ方、数学が苦手な方、仕事でAIを使いたい方にも読み進めやすいように、教材の章と節の流れに沿って整理しています。
サムネイル画像は必ず表示されますか。
はい。教材にcoverUrlが設定されている場合はその画像を表示し、未設定の場合は代替サムネイル画像を表示します。
AI活用と意思決定デザインのほかの章も読めますか。
はい。教材トップから章立てを確認でき、前後の節へもページ下部のナビゲーションから移動できます。