PROGRAM PYTHON

Pythonスクリプト【レアモンスターが出現する戦闘ゲーム】

 

レアモンスターが出現する戦闘ゲームを作ろう

今回はたまにしか出現しないモンスターを登場させる戦闘ゲームを作ります。
スクリプトのベースとして、前回作ったランダムでモンスターが出現する戦闘ゲームを利用します。

出現するモンスターをランダムに選択する処理に、重みが設定できるrandom.choices()関数を使います。
前回使ったrandom.sample()関数と違って、random.choices()関数は選択するキャラクターの重複を許してしまうので、重複したキャラクターを削除する処理を入れています。

ルール

  • ユーザー側がプレイヤー、コンピューター側がモンスターとなる
  • キャラクターはユーザー側が3人、コンピューター側はランダムで1~3体出現する
  • コンピューター側のキャラクターには、出現する重み(比率)を設定する
  • ユーザー側、コンピューター側のすべてのキャラクターが行動を選択してから戦闘を開始する
  • コンピューター側の行動はランダムだが、キャラクターごとに行動の重みをつける
  • キャラクターの素早さに乱数を掛けた値の順に行動する
  • 攻撃する相手はランダムに決定する
  • キャラクターの行動とパラメーターによってダメージ値を計算する
  • 先にすべてのキャラクターのHPが0になった方が負けとなる

 

実行イメージ

実行イメージは、以下のようになります。
ユーザーはa(攻撃)、b(防御)、c(魔法)のどれかを入力します。
qを入力するとゲームは終了します。

 実行例
> python game6.py
+++++++++++++++++
++ モンスターBが現れた!
++ レアキャラ が現れた!
++ モンスターFが現れた!
+++++++++++++++++
>>> 行動を選択してください
>>> a:攻撃 b:防御 c:魔法 q:終了
[プレイヤーA] >>> a
[プレイヤーB] >>> a
[プレイヤーC] >>> c
++ レアキャラ は防御を実行!
++ プレイヤーBは攻撃を実行! レアキャラ は0のダメージ
++ モンスターFは攻撃を実行! プレイヤーCは3のダメージ
++ モンスターBは攻撃を実行! プレイヤーBは7のダメージ
++ プレイヤーAは攻撃を実行! モンスターBは12のダメージ
++ プレイヤーCは魔法を実行! モンスターFは8のダメージ
-----------------
++ プレイヤーA:HP[30]
++ プレイヤーB:HP[18]
++ プレイヤーC:HP[17]
-----------------
-----------------
++ モンスターB:[疲労]
++ レアキャラ :[元気]
++ モンスターF:[疲労]
-----------------
:
:
[プレイヤーA] >>> a
[プレイヤーB] >>> c
++ プレイヤーBは魔法を実行! レアキャラ は7のダメージ
<< レアキャラ を倒しました!!!!! >>
++ プレイヤーAの攻撃が失敗!
-----------------
++ プレイヤーA:HP[5]
++ プレイヤーB:HP[7]
-----------------
 
+++++++++++++++++
++ モンスターは全滅しました ++
+++++++++++++++++

 

Pythonスクリプト

ゲームのPythonスクリプトは、以下のようになります。

 

スクリプト解説

今回は前回から変更になった部分を解説します。
前回までのスクリプトの解説も併せて参照してください。

31行目

出現するモンスターの重みを設定します。
レアモンスターの出現確率は、通常のモンスターが4に対して、レアモンスターは1にしています。

175行目

random.choices()関数を使って、出現するモンスターをランダムで選択します。
kオプションは、出現するモンスターの数を指定します。
weightsオプションは、31行目で設定した出現モンスターの重みです。

179~182行目

mons_tmpという空のリストを作成して、mons_bufリストからmons_tmpリストに出現するモンスターをコピーします。
この時、mons_tmpリストに存在していないモンスターのみをコピーしたいので、条件式 not in を使っています。

 

-PROGRAM, PYTHON
-