私が最近Pythonについて尋ねた質問はすべて、このプロジェクトに関するものです。私がこれほど多くの質問をしている理由は、私がPythonに慣れていないためではなく(ただし、PHPについてはかなり知っています)、Pythonに固有の欠陥があるためではない可能性があることに気付きました。
したがって、プロジェクトとは何か、現在のアイデアは何かを説明します。すべて間違っているか、学ぶ必要のあることがいくつかあるか、Pythonはこのタイプの処理には適していないことを教えてください。この場合、プロジェクトと言語のXYZの方が優れているか、または私が関与したいと思うオープンソースプロジェクトがある場合でもそうです。
私がフリーターンベースの戦略ゲームを実行しているプロジェクト
(総力戦シリーズのキャンペーンモードを考えてみてくださいが、さらに複雑で深みがあります)、そのための戦闘シミュレーターを作成しています(繰り返しますが、総力戦はそれがどのようになるかについてのアイデアとして考えてください)仕事)。Total Warゲームだけで何でも作れると思うほど、私は決して惑わされていませんが、現在手作業で行っているプロセスを自動化できると思います。
何をする
のか
ユニット、装備、トレーニング、天気、地形などのさまざまな変数を考慮に入れる必要があります。私はそれが大きな仕事であることを認識しており、私は自分の自由な時間に一度にそれを行うことを計画しています。予算はゼロですが、時間をかける準備ができている(そしてすでに持っている)のが趣味です。
私の現在のつまずき
PHPでは、すべてが他のすべてにアクセスできます。「間違っている」と考える人もいるかもしれませんが、これは本当に便利です。ユニットで使用する機器の配列があれば、どこからでもその配列を手に入れることができます。Pythonでは、関連するデータファイルをインポートするたびにその配列を再作成する必要があります。これは、私の経験からよく考えられている言語の非常にばかげた解決策のようです。ロギング関数呼び出しとクラス作成のシステムを導入しました(これの非常に基本的なバージョンから、PHPで一度行ったことは、将来的に非常に役立つことがわかっているためです)。 1つの場所のデータは、各クラスにインスタンスをログリストに渡すことです。これは、ハックのような匂いがしますが、それを機能させる唯一の方法です。
したがって、私は何かが欠けていると結論付け、それを喜んで提供してくれる人の洞察を非常に高く評価します。ありがとうございました。
コードサンプル
これにより、フォーメーションのリストが作成されます。これまでのところ、値は1つだけです(名前以外)が、さらに追加することを期待しています。これが、標準のリストではなく、クラスのリストである理由です。これはdata.py内にあります
formations = []
formationsHash = []
def createFormations(logger):
"""This creates all the formations that will be used"""
# Standard close quarter formation, maximum number of people per square metre
formationsHash.append('Tight')
formations.append(Formation(logger, 'Tight', tightness = 1))
# Standard ranged combat formation, good people per square metre but not too cramped
formationsHash.append('Loose')
formations.append(Formation(logger, 'Loose', tightness = 0.5))
# Standard skirmishing formation, very good for moving around terrain and avoiding missile fire
formationsHash.append('Skirmish')
formations.append(Formation(logger, 'Skirmish', tightness = 0.1))
# Very unflexible but good for charges
formationsHash.append('Arrowhead')
formations.append(Formation(logger, 'Arrowhead', tightness = 1))
def getFormation(searchFor):
"""Returns the fomation object with this name"""
indexValue = formationsHash.index(searchFor)
return formations[indexValue]
まだ作成していないため、いつアクセスする必要があるかについてのコードサンプルはありませんが、コードは次のようになっていると思います。
Python
tempFormation = data.getFormation(unit.formationType)
tempTerrain = data.getTerrain(unit.currentTerrain)
unit.attackDamage = unit.attackDamage * tempTerrain.tighnessBonus(tempFormation.tightness)
ユニットには、関連する地形、フォーメーション、およびマスターリストにないもののインデックス/キーにリンクする整数が含まれています。一時変数は3行目を短くするために使用されますが、長期的には、取得するのを忘れて以前の値を使用すると問題が発生する可能性がありますが、これは正しくありません(ここでロギングが役立ちます)。
PHP
$unit->attackDamage *= $terrain[$unit->currentTerrain]->tighnessBonus($unit->currentTerrain)
ユニットクラスには、それが存在する関連する地形とそれが存在するフォーメーションのインデックス(おそらく文字列)が含まれています。
たぶん、これは私のPythonの理解にいくつかの大きな欠陥を示すでしょう(6か月対PHPの3年)。