2017-01-11 1 views
0

私はPythonの初心者です。私はトランプカードの5x5グリッドが配られたポーカーゲームを作成しようとしています。プレーヤーは行または列をそれぞれ左右または上に移動できます。Pythonで複数のリストに適用される関数を定義する方法は?

私はこれを5つの文字列の5つのリストで表現することに決めました。 (あなたが良いアイデアを持っていれば、私はそれを聞いてうれしいですが)。

['5h', 'Ts', '3s', '7h', 'Tc'] 
['As', '9d', '5c', 'Jd', '8c'] 
['9s', '6h', '6d', '3c', '2c'] 
['Qd', '8h', 'Jh', '2d', 'Td'] 
['4h', 'Kd', 'Qs', '5d', '9c'] 

一番左のカード:プレイヤーはそうのようなボードを与えることになる、左に一番上の行に1つのスペースを移動することもできます

['Ks', '5h', 'Ts', '3s', '7h'] 
['As', '9d', '5c', 'Jd', '8c'] 
['9s', '6h', '6d', '3c', '2c'] 
['Qd', '8h', 'Jh', '2d', 'Td'] 
['4h', 'Kd', 'Qs', '5d', '9c'] 

:だから始まるボードは、次のようになります右のデッキから新しいカードが追加されます。デッキのカードがなくなるまで、任意の行または列に対してこれを繰り返すことができます。

私が問題を抱えているのは、私がやりたいことのために5つのほぼ重複を作成するのではなく、これらのリストに適用される関数を定義することです。

だから私はすべてのトランプカードと、row0からrow4という5つの空のリストのリスト(「デッキ」と呼ばれる)から始めます。起動ボードを生成するために、私は現在つもりです:

def drawRight0(): 
    card = random.randint(0,len(deck)-1) 
    row0.append(deck[card]) 
    del deck[card] 

def drawRight1(): 
    card = random.randint(0,len(deck)-1) 
    row1.append(deck[card]) 
    del deck[card] 

... 

def firstBoard(): 
    for i in range (5): 
     drawRight0(), drawRight1(), drawRight2(), drawRight3(), drawRight4() 

確かに私は「rowx.append」の一部と同等にこれを簡素化することができるはずですが、私はそれを把握することはできません。

これは、ゲームの動きについても同様の話です。行ごとに...

def shiftLeft0(): 
    for i in range(4): 
     row0[i] = row0[i+1] 
    del row1[4] 
    drawLeft1() 

を、それはあまりにも非効率です:私は左に行を移動する方法を定義したい場合は、私が行うことができます。

最後に、カードを上下にシフトするのはやや難解です。 (それは大きな問題ではないのですが)私は、最初の4行のループにできるはずです

def shiftUp0(): 
    row0[0] = row1[0] 
    row1[0] = row2[0] 
    row2[0] = row3[0] 
    row3[0] = row4[0] 
    del row4[0] 
    card = random.randint(0,len(deck)-1) 
    row4.insert(0,deck[card]) 
    del deck[card] 

:現在、私のような機能が働いています。私は多分、私はリストのリストで何かを行うべきであると考えている

def shiftUp3(): 
     row0[3] = row1[3] 
     row1[3] = row2[3] 
     row2[3] = row3[3] 
     row3[3] = row4[3] 
     del row4[3] 
     card = random.randint(0,len(deck)-1) 
     row4.insert(0,deck[card]) 
     del deck[card] 

のように、:しかし、再び、主な問題は、私もこれを行う必要があるように、列ごとに異なる関数を定義する必要がされます
rows = [row0, row1, row2, row3, row4] 

...しかし、どのようにして私が望むようにそれを適用するかについてはわかりません。

ありがとうございました!

+0

あなたの関数は、パラメータとして動作するようにリストを取る必要があります。行のリストを使用するかどうかによって、呼び出しは 'drawright(row0)'や 'drawright(rows [0])'のようになります。 – cco

答えて

0

これは5x5ボードを使用する非常に難しい方法のようです。あなたは5つのリストを持つ代わりに5つの値を持つ5つのリストを持つことで、より簡単にこれを行うことができます。あなたは、通常のリストの値にアクセスしたいようにあなたは、その後ボードで動作することができ
board = [[0 for i in range(5)] for j in range(5)]
:それは次のように作成することができます
board[0][0] = 1 board[1][1] = 2 board --> [[1,0,0,0,0],[0,2,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]]
私はあなたがかなり容易にすることを与えられた問題を解決する方法を考え出すことができると思います多くの場合、何かが明確でない場合、またはあなたが立ち往生した場合に、より多くの援助を求めることが自由です。

関連する問題