2016-10-07 13 views
0

私はpygame librabyでPython2.7で自分のゲームを作っています。 プレイヤーが同じキーボードを使用する1v1の戦闘ゲームです。Python2.7ループ内で複数の変数を使用するにはどうすればよいですか?

ゲームは、ループが実行されるたびに毎秒60回繰り返されるメインループで動作します。位置、問題は2人のプレイヤーがいるという問題が多いため、2行書く必要があります回。

ここで例:

p1direction == '右' とp1XS < p1Attributesなら[1]:p1XS + = p1Attributes [0]

と:

p2direction場合== '右' とp2XS < p2Attributes [1]:p2XS + = p2Attributes [0]

差異p1とp2を参照してください。これらはそれぞれプレイヤー1とプレイヤー2に属する変数です。

私はちょうどp2のためだけに同じ行を書くのではないという解決策を見つけたいと思います。私はfor機能について考えていたので、プレイヤーをeasly追加することもできますが、この場合はどのように行うのかわかりません...

誰かが私を助けてくれますか? :) Please

答えて

2

クラスプレイヤーを作成してください。 次に、各プレイヤーの属性をクラスに追加します。あなたはまだクラスを使用していない場合は でも、私はそれらを使用してお勧めしません、プレイヤー1と2

class Player(): 
    direction = "right" 
    etc. 
    def shoot(self): 
     if self.direction == "right" 
      shoot_right() 

playerOne = Player() 
playerTwo = Player() 

direction = playerOne.direction 

であなたのクラスをインスタンス化します。継承は...かなり厄介な取得することができます助け

希望、 Narusan

EDIT:あなたはまだPythonでクラスを使用していない場合は 、私が最初にして、継続的なゲームの開発を追い上げをお勧めします。私はパイゲームでいくつかのゲームをプログラミングしており、クラスはとても手に入ります。実際には、適切なクラス(または無限のif-clausesやfor-loopsを使用せずにすべてを極端に遅くする)を使わずにパイゲームゲームを作成することはほとんど不可能です。

はあなたの運のすべてのベストウィッシュ

+0

ありがとうございました!悲しいことに、私はクラスを使用し始めませんでしたが、とにかくそれらを覚えなければなりません...私が使うことができる他のトリックを知っていませんか? – GriffinBabe

+0

クラスの代わりに、辞書で十分です。 –

+0

よく、pygameを使うには(私の編集で言ったように)基本的にクラスが必要です。たくさん。あなたがそれらについて学んでいないなら、あなたのコードはすぐに本当に大きくなるでしょう。リストを使うこともできます(多分juanma.arrivillagaが意味することです)、それを使って作業してください。あなたがまだ興味があるなら、あなたにそれを行う方法を示す別の答えを書くことができます。 – Narusan

0

方法例えば、プレーヤーの数によってインデックス化ベクトル(player_directions)に(例えばp1directionとp2direction用)あなたの変数を格納し、ループのアクセス、それを使用する方法について:

number_of_players = 2 
playersXS = function_that_fills_playersXS() # return a vector containing your p1XS and p2XS variables in a vector 

for player_number in xrange(number_of_players): 
    if player_directions[player_number]=='right' and playersXS[player_number]< Attributes[player_number][1]: 
     playersXS[player_number]+=Attributes[player_number][0] 
+0

ベクトルはPythonデータ構造の標準名ではありません。あなたは 'リスト'を意味しますか? –

+0

また、答えに標準のPythonコーディングスタイルを使用してみてください。余分なセミコロン、インデントifブロックなどを使用しないでください。 –

関連する問題