PROGRAM PYTHON

Pythonスクリプト【スレッドを使った戦闘シミュレーション】

 

スレッドを使って戦闘シミレーションを作ろう

今回はスレッドを使って、戦闘シミュレーションを作りましょう。
これはThreadクラスを継承したクラスを定義して、そのクラスから2つのインスタンスを作り、互いに相手を攻撃するプログラムです。

 

実行イメージ

2人のプレイヤーが自動で相手を攻撃して、先にHP(ヒットポイント)が0になった方が負けになります。
プレイヤーのパラメーターは、HP、攻撃力、敏捷性がランダムで設定されます。
ターン制ではないので、敏捷性の値が高ければ早く攻撃ができるようになり、場合によっては連続して攻撃します。

 実行例
C:\>python battle1-1.py
戦士A HP[28] 攻撃力[ 6] 敏捷性[16]
戦士B HP[60] 攻撃力[13] 敏捷性[ 4]
戦士Aは戦士Bに7のダメージ
→ 戦士Bの残HP[53]
戦士Bは戦士Aに13のダメージ
→ 戦士Aの残HP[15]
戦士Aは戦士Bに8のダメージ
→ 戦士Bの残HP[45]
戦士Aは戦士Bに7のダメージ
→ 戦士Bの残HP[38]
戦士Bは戦士Aに14のダメージ
→ 戦士Aの残HP[1]
戦士Aは戦士Bに16のダメージ
→ 戦士Bの残HP[22]
戦士Aは戦士Bに14のダメージ
→ 戦士Bの残HP[8]
戦士Bは戦士Aに13のダメージ
→ 戦士Aの残HP[0]
++ 戦士Bの勝利! ++

 

Pythonスクリプト

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

 

スクリプト解説

24~26行目

各パラメーターにランダムで値を設定します。

37行目

自分のHPが0になるまでループします。

40行目

5秒を敏捷性の値とランダムで与えられたボーナスポイントを足した値で割った時間の間待機します。

43行目

現在動いているスレッドの一覧を取得します。
[1:]と記述することによって、配列の先頭は飛ばされます。

46、47行目

取得したスレッドが自スレッドだったら飛ばします。

50、51行目

自分または相手のHPが0だった場合、処理を終了します。

54、55行目

ダメージ値を計算して、相手のHPを減らします。
ダメージ値は、元の攻撃力の値にランダムで与えられたボーナスポイントを足します。

58、59行目

相手のHPが0未満だったら0にします。

66~68行目

現在動いているスレッドの数を取得して、Mainスレッドを除いた数が1だった場合は処理を終了します。

76行目

内包表記を使って、Playerクラスからプレイヤー数分インスタンスを作成します。
内包表記は、こちらの記事を参照してください。

79、80行目

作成したインスタンスのスレッドを開始します。

 

 

-PROGRAM, PYTHON
-