2017-01-25 4 views
-2

私はチェスゲームを書いており、各ユニークな部分にクラスを介して独自のプロパティとメソッドを与えるよう試みています。私はボードの文字列表現を持っています。ボードには、ゲームの開始時に各チェスピースの文字列表現も含まれています。私はPawnクラスを介して私のポーン表現をオブジェクトに変換したいが、これを行う方法が完全にはわからない。例えばクラスを使うことについての混乱

私は(「WP」と表記)各白ポーンの文字列を反復処理したい場合は、ライン何をん:

for i in range(0, 8): 
    my_board[i][1] = Pawn(i, i) 

は、実際のですか?これらのポジションのそれぞれにクラスオブジェクトを作成して、作成したメソッドを使用してリストの周りを移動することができますか?もしそうなら、彼らは一意の変数名を必要としませんか?あるいは、オブジェクトは作成された最初の位置としてのみ存在しますか?理想的には、各アイテムに一意のオブジェクトを作成しますが、正しく実装されているかどうかはわかりません。

ここに参考のために私のコードの残りの部分があります。

class ChessBoard: 
    def __init__(self): 
     self.board = self.create_board 

    def create_board(self): 
     game_board = [] 
     letters = ["A", "B", "C", "D", "E", "F", "G", "H"] 
     for x in range(len(letters)): 
      game_board.append([]) 
      for y in range(1, 9): 
       game_board[x].append(str(letters[x])+str(y)) 

     return game_board 

class Pawn: 
    def __init__(self, x, y): 
     self.x = x 
     self.y = y 

    def passive_move(self): 
     my_board[self.x][self.y-1] = self 
     self.y -= 1 


def initialise_board(my_board): 
    pieces = ["C ", "Kn", "B ", "Q ", "K ", "B ", "Kn", "C "] 
    for x in range(len(pieces)): 
     my_board[x][0] = pieces[x] 
     my_board[x][7] = pieces[x] 
    for i in range(0, 8): 
     my_board[i][1] = "WP" 
     my_board[i][6] = "BP" 
    return my_board 


def str_represent_board(game_board): 
    board_letters = ["A", "B", "C", "D", "E", "F", "G", "H"] 
    print(3 * " ", end = " ") 
    for i in board_letters: 
     print((i) + 3 * (" "), end = " ") 
    print("\n" + 41 * "_") 
    c = 0 
    for y in range(1, 9): 
     print(y, end = " ") 
     print(1 * " ", end = " ") 
     for z in game_board: 
      print(z[c] + 2 * " ", end = " ") 

     c += 1 
     print(1 * ("\n")) 
    print(41 * "_") 


if __name__ == "__main__": 
    my_board = ChessBoard().create_board() 
    my_board = initialise_board(my_board) 
    str_represent_board(my_board) 
    for i in range(0, 8): 
     my_board[i][1] = Pawn(i, i) 
+0

'my_board [row] [column]'は一意の変数名ではないと思いますか? – TigerhawkT3

+0

しかし、私がpassive_moveメソッドを呼び出すと、元のmy_board [row] [col]はクラスオブジェクトとして残りますか、それとも新しい位置になりますか? – Perplexityy

+0

その質問は理にかなっていません。私はあなたがチュートリアルを見つけてリストやオブジェクトを読む必要があると思う。 – TigerhawkT3

答えて

-1

あなたのループは、各ポーンの位置のためのクラスインスタンスを作成します。各クラスインスタンスは他のクラスインスタンスとは独立しています。私は毎日1つのシャツがほしいと言っているようなものです。彼らは同じですが、私は別のシャツを着て、私は別のことをします。彼らはあなたのリストの中での位置に基づいて区別されるので、一意の変数名を必要としませんが、今のところ、そのセルの文字列ラベルを上書きします。より良いアプローチは、「Pieces」などのサブクラスであるポーンインスタンスの番号付きリストを作成することです。これらのポーンインスタンスには、移動時に更新できる位置プロパティがあります。

+0

'my_board' _is_ globalであり、これらの関数はそれにアクセスしてそれを変更することすらできます。 – TigerhawkT3

+0

あなたは正しいです。申し訳ありませんが、私はあまりにもそれを見ていませんでした。しかし、前のことはまだ立っています。 – Samwise

関連する問題