今回は受講生(U氏)の作成したお題を作成してみよう。こういったターン制のゲームも多いので良い練習となる。
目的
[ゲームの内容を以下のようにします]
○行動一回につき、1日が経過します。最大で100日を迎えると終戦となり、ゲームは終了します。
○1日の行動では1〜15輌の戦車を撃破できます。
○戦車破壊後、1%の確率でプレイヤーは死亡し、ゲームは終了します。
○同じく、戦車撃破後の10%で怪我を負います。
○怪我を負うと6日間の入院を余儀なくされ、入院中は戦車を撃破することができなくなります。
○行動終了後、次の日に移る際にメッセージを表示しますが、行動可能時と入院時でメッセージが変わります。
○1日の行動終了後、Enterキーで次の日の行動に移ります。
○ゲームが終了後、戦車の撃破数によって勲章を授与されます。
爆破数
100未満 鉄十字勲章
200未満 騎士鉄十字勲章
300未満 柏葉付騎士鉄十字勲章
400未満 柏葉・剣付騎士鉄十字勲章
500未満 柏葉・ 剣・ダイヤモンド付騎士鉄十字勲章
500以上 黄金柏葉・剣・ダイヤモンド付騎士鉄十字勲章
ex)429の場合500未満なので「柏葉・ 剣・ダイヤモンド付騎士鉄十字勲章」
勲章には以下の文字列をご使用ください。
['鉄十字勲章','騎士鉄十字勲章','柏葉付騎士鉄十字勲章','柏葉・剣付騎士鉄十字勲章','柏葉・ 剣・ダイヤモンド付騎士鉄十字勲章','黄金柏葉・剣・ダイヤモンド付騎士鉄十字勲章']
実行例
1日目の行動
出撃!!
戦功報告:7輌の戦車を撃破しました!
明日も頑張りましょう!(Enter)
2日目の行動
出撃!!
戦功報告:7輌の戦車を撃破しました!
明日も頑張りましょう!(Enter)
3日目の行動
出撃!!
戦功報告:10輌の戦車を撃破しました!
明日も頑張りましょう!(Enter)
4日目の行動
出撃!!
戦功報告:3輌の戦車を撃破しました!
あなたは撃墜され、怪我をしてしまいました。6日間の入院が必要です
今は休んでくださいね(Enter)
5日目の行動
後6日の入院が必要です
今は休んでくださいね(Enter)
6日目の行動
後5日の入院が必要です
今は休んでくださいね(Enter)
.
.
.
37日目の行動
出撃!!
戦功報告:1輌の戦車を撃破しました!
あなたは戦死してしまいました...
最終戦果報告!!あなたは94輌の戦車を破壊した功績により騎士鉄十字勲章を授与されました!!
※以下は100日経過後の出力
100日目の行動
後5日の入院が必要です
今は休んでくださいね(Enter)
戦争は終結しました!!
最終戦果報告!!あなたは529輌の戦車を破壊した功績により黄金柏葉・剣・ダイヤモンド付騎士鉄十字勲章を授与されました!!
Let’s challenge!
どのように実装していくか少し思案するところもあるが、問題なく処理を組むことができる。DRYの原則「同じことを2度書かない」を留意してコーディングしよう。
解答例
import random
damage=0
MAX_DAYS=100
total_kill=0
titles=['鉄十字勲章','騎士鉄十字勲章','柏葉付騎士鉄十字勲章','柏葉・剣付騎士鉄十字勲章','柏葉・ 剣・ダイヤモンド付騎士鉄十字勲章','黄金柏葉・剣・ダイヤモンド付騎士鉄十字勲章']
for day in range(1,MAX_DAYS+1):
if damage > 0: damage-=1
print(f'{day}日目の行動')
if damage > 0:
print(f'後{damage}日の入院が必要です')
else:
print('出撃!!')
kill=random.randint(1,15)
print(f'戦功報告:{kill}輌の戦車を撃破しました!')
total_kill+=kill
i=random.randrange(100)
if i==0:
print('あなたは戦死してしまいました...')
break;
if 1<= i <= 10:
damage=7
print(f'あなたは撃墜され、怪我をしてしまいました。{damage-1}日間の入院が必要です')
print('今は休んでくださいね' if damage > 0 else '明日も頑張りましょう!')
#input()
else:
print('戦争は終結しました!!')
print(f'最終戦果報告!!あなたは{total_kill}輌の戦車を破壊した功績により{titles[min(total_kill//100,5)]}を授与されました!')
コメント