見出し画像

『Artifacts MMO』攻撃しよう!

『Artifacts MMO』とは?

『Artifacts MMO』は、APIを通じてプレイヤーがゲーム世界を直接操作・カスタマイズできる次世代型のオンラインマルチプレイヤーゲームです。プレイヤーは、ゲーム内のアイテム、キャラクター、環境などをAPIを活用してプログラミングし、自分だけの冒険を創り上げることができます。これにより、従来のゲームでは味わえなかった自由度や創造性を楽しむことが可能です。

前回の記事は、こちらです


彼を知り己を知れば百戦殆うからず

孫子もこう言っているので、まずは自分と敵のステータスを確認しましょう。

彼を知る

公式ドキュメントを読んでAPIを確認します。
モンスターの名前を指定すると、そのモンスターの情報を教えてくれます。
今回の対戦相手「Chicken」を指定してみましょう。

const API_TOKEN = "書き換えてください";

const monster = "chicken";

const url = `https://api.artifactsmmo.com/monsters/${monster}`;

const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);

const requestOptions = {
  method: "GET",
  headers: headers,
  redirect: "follow",
};

const res = await fetch(url, requestOptions);
const { data } = await res.json();

console.log(data);

このプログラムをmonster.jsとして保存しました。
Node.jsを使って実行してみましょう。
環境構築は、こちらを参考にしてください。

node monster.js
{
  name: 'Chicken',
  code: 'chicken',
  level: 1,
  hp: 60,
  attack_fire: 0,
  attack_earth: 0,
  attack_water: 4,
  attack_air: 0,
  res_fire: 0,
  res_earth: 0,
  res_water: 0,
  res_air: 0,
  min_gold: 0,
  max_gold: 3,
  drops: [
    { code: 'raw_chicken', rate: 10, min_quantity: 1, max_quantity: 1 },
    { code: 'egg', rate: 12, min_quantity: 1, max_quantity: 1 },
    { code: 'feather', rate: 8, min_quantity: 1, max_quantity: 1 }
  ]
}

ChickenのHPは60で、水属性の攻撃力4を持っているようです。

己を知る

公式ドキュメントを読んでAPIを確認します。
どうやらレスポンスとして沢山の情報が返ってくるようです。
今回はChickenとの戦いに必要な情報だけを取り出します。

  • name: キャラクターの名前

  • hp: キャラクターの実際のHP

  • attack_fire: 火属性の攻撃力

  • attack_earth: 土属性の攻撃力

  • attack_water: 水属性の攻撃力

  • attack_air: 風属性の攻撃力

const API_TOKEN = "書き換えてください";

const url = `https://api.artifactsmmo.com/my/characters`;

const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);

const requestOptions = {
  method: "GET",
  headers: headers,
  redirect: "follow",
};

const res = await fetch(url, requestOptions);
const { data } = await res.json();

const status = data.map((character) => ({
  name: character.name,
  hp: character.hp,
  attack_fire: character.attack_fire,
  attack_earth: character.attack_earth,
  attack_water: character.attack_water,
  attack_air: character.attack_air,
}));

console.log(status);

プログラムは、my_status.jsとして保存しました。
Node.jsを使って実行してみましょう。

node my_status.js
[
  {
    name: 'CyberTribe',
    hp: 120,
    attack_fire: 0,
    attack_earth: 4,
    attack_water: 0,
    attack_air: 0
  }
]

私のキャラクターのHPは120で、土属性の攻撃力4を持っているようです。

いざ尋常に

敵のHPは60で、攻撃力は4です。
私のHPは120で、攻撃力は4です。

つまり30ターン後には決着がつくはずです。
敵: 0HP
自分: 60HP

実際にやってみましょう!
fight.jsという名前で保存します。

cost API_TOKEN = "書き換えてください";

const characterName = "書き換えてください";

const url = `https://api.artifactsmmo.com/my/${characterName}/action/fight`;

const headers = new Headers();
headers.append("Accept", "application/json");
headers.append("Content-Type", "application/json");
headers.append("Authorization", `Bearer ${API_TOKEN}`);

const requestOptions = {
  method: "POST",
  headers: headers,
  redirect: "follow",
};

const res = await fetch(url, requestOptions);
const { data } = await res.json();

console.log(data);
node fight.js

ログの中のfightに戦闘の結果が保存されていますね。

fight: {
    xp: 22,
    gold: 0,
    drops: [],
    turns: 29,
    monster_blocked_hits: { fire: 0, earth: 0, water: 0, air: 0, total: 0 },
    player_blocked_hits: { fire: 0, earth: 0, water: 0, air: 0, total: 0 },
    logs: [
      'Fight start: Character HP: 120/120, Monster HP: 60/60',
      'Turn 1: The character used earth attack and dealt 4 damage. (Monster HP: 56/60)',
      'Turn 2: The monster used water attack and dealt 4 damage. (Character HP: 116/120)',
      'Turn 3: The character used earth attack and dealt 4 damage. (Monster HP: 52/60)',
      'Turn 4: The monster used water attack and dealt 4 damage. (Character HP: 112/120)',
      'Turn 5: The character used earth attack and dealt 4 damage. (Monster HP: 48/60)',
      'Turn 6: The monster used water attack and dealt 4 damage. (Character HP: 108/120)',
      'Turn 7: The character used earth attack and dealt 4 damage. (Monster HP: 44/60)',
      'Turn 8: The monster used water attack and dealt 4 damage. (Character HP: 104/120)',
      'Turn 9: The character used earth attack and dealt 4 damage. (Monster HP: 40/60)',
      'Turn 10: The monster used water attack and dealt 4 damage. (Character HP: 100/120)',
      'Turn 11: The character used earth attack and dealt 4 damage. (Monster HP: 36/60)',
      'Turn 12: The monster used water attack and dealt 4 damage. (Character HP: 96/120)',
      'Turn 13: The character used earth attack and dealt 4 damage. (Monster HP: 32/60)',
      'Turn 14: The monster used water attack and dealt 4 damage. (Character HP: 92/120)',
      'Turn 15: The character used earth attack and dealt 4 damage. (Monster HP: 28/60)',
      'Turn 16: The monster used water attack and dealt 4 damage. (Character HP: 88/120)',
      'Turn 17: The character used earth attack and dealt 4 damage. (Monster HP: 24/60)',
      'Turn 18: The monster used water attack and dealt 4 damage. (Character HP: 84/120)',
      'Turn 19: The character used earth attack and dealt 4 damage. (Monster HP: 20/60)',
      'Turn 20: The monster used water attack and dealt 4 damage. (Character HP: 80/120)',
      'Turn 21: The character used earth attack and dealt 4 damage. (Monster HP: 16/60)',
      'Turn 22: The monster used water attack and dealt 4 damage. (Character HP: 76/120)',
      'Turn 23: The character used earth attack and dealt 4 damage. (Monster HP: 12/60)',
      'Turn 24: The monster used water attack and dealt 4 damage. (Character HP: 72/120)',
      'Turn 25: The character used earth attack and dealt 4 damage. (Monster HP: 8/60)',
      'Turn 26: The monster used water attack and dealt 4 damage. (Character HP: 68/120)',
      'Turn 27: The character used earth attack and dealt 4 damage. (Monster HP: 4/60)',
      'Turn 28: The monster used water attack and dealt 4 damage. (Character HP: 64/120)',
      'Turn 29: The character used earth attack and dealt 4 damage. (Monster HP: 0/60)',
      'Fight result: win. (Character HP: 64/120, Monster HP: 0/60)'
    ],
    result: 'win'
  },

29ターン目に勝利して経験値22を得たみたいです。
ゴールドとアイテムは手に入らなかったですね。

まとめ

APIを使って遊ぶことができる風変わりなゲーム『Artifacts MMO』について紹介しました。APIリクエストを使って敵を倒すことができましたね。次回はAPIを使用して傷ついた体を癒したいと思います!

いいなと思ったら応援しよう!