2017-03-05 14 views
0

私はPythonで戦艦ゲームプロジェクトを行っています。私はグリッドに配置された船を表示するには固執しています。ここでは、ユーザーの入力座標に基づいて更新されたボードを表示する私の機能があります。これはA10のような文字の形式です。ユーザーグリッドは10x10のボックスです。空のボードには "O"が印刷され、垂直の船には|横には - が付いています。すべての座標が設定された後、ボードを更新する機能は次のとおりです。ユーザ入力に基づいてPythonで異なる値でグリッドを表示

def print_updated_board(coords, direction): 
    board = [] 
    for row in range(10): 
     board_row = [] 
     updated = [] 
     for c in range(ord('a'), ord('a') + BOARD_SIZE): 
      t = chr(c) + str(row) 
      board_row.append(t) 
     if direction == 'v': 
      for coord in coords: 
       for w in board_row: 
        if coord == w: 
         updated.append(VERTICAL_SHIP) 
        else: 
         updated.append(EMPTY) 
     board.append(updated) 
    print_board_heading() 
    row_num = 1 
    for row in board: 
     print(str(row_num).rjust(2) + " " + (" ".join(row))) 
     row_num += 1 

COORDSは、座標を持つであろう、垂直方向A1に配置され、船の大きさなので、4分の大きさの一例戦艦に基づいて作成されている(A1、A2、A3、A4)。私はこのインスタンスで印刷しようとしています。

私のコードはオフになっています - グリッドは50行(10個ではなく)を誤って印刷しているようです。

これをどこで行うべきかに関するガイダンスはありがたいです。ありがとう

EDIT **************実現私はダブルループしてこれにコードを変更しました。まだ完全には動作していません(1つの場所から外れていますが)。

def print_updated_board(coords, direction): 
    board = [] 
    for row in range(10): 
     board_row = [] 
     updated = [] 
     for c in range(ord('a'), ord('a') + BOARD_SIZE): 
      t = chr(c) + str(row) 
      board_row.append(t) 
     if direction == 'v': 
      for b in board_row: 
       if b in coords: 
        updated.append(VERTICAL_SHIP) 
       else: 
        updated.append(EMPTY) 
      board.append(updated) 
    print_board_heading() 
    row_num = 1 
    for row in board: 
     print(str(row_num).rjust(2) + " " + (" ".join(row))) 
     row_num += 1 
+0

OK、私は一種の決定私problem--ボード上と各船の座標上にある。上記のコードを反映するように変更 - 私の1つの問題は、船がマークから1つの変数を印刷していることです。 –

答えて

0

問題は、これらのネストされたループで:

for coord in coords: 
    for w in board_row: 
     updated.append(...) 

これらは、各リストに座標用ボードが広い成長を引き起こします。これを行うにははるかに簡単な方法がありますので


最善の解決策は、窓の外にすべてこのコードをスローすることです:私は、二重looping-た

def print_updated_board(coords, direction): 
    # create an empty board 
    board = [['O']*BOARD_SIZE for _ in range(BOARD_SIZE)] 
    # at each coordinate, draw a ship 
    for coord in coords: 
     # convert string like "a1" to x,y coordinates 
     y= ord(coord[0])-ord('a') 
     x= int(coord[1:])-1 
     # update the board at this position 
     board[x][y]= '|' if direction=='v' else '--' 
+0

大丈夫です。どうもありがとうございます! –

+0

クイッククイック質問 - 私に混乱している部分は、文字列を変換するところです。ちょうど減算部分を理解していません。私が考えているように、おそらくPythonのインデックス付けのプロパティと関係しているようです - 0などから始めますか? –

+0

@JohnRogerson正確には、減算は0から始まる座標を作るためにあります。 –

関連する問題