2016-04-23 8 views
1

So soll ich eine Verbindung vier Konsole machen und aus irgendeinem Grund mein Board 0s anstelle von "." S angezeigt wird. Ich bin mir nicht sicher, was ich falsch gemacht habe. Es gibt 3 Module, aber ich werde nur dieses zeigen, da ich davon ausgehe, dass das zugrunde liegende Problem ist.Board nicht richtig drucken

import connectfour 

def _print_board_num(): 
    for i in range(len(connectfour.new_game().board)): 
     print(str(i+1), end = ' ') 
    print() 

def print_board(game: 'connectfour.GameState')->[(str)]: 
    _print_board_num() 
    for row in range(connectfour.BOARD_ROWS): 
     for column in range(connectfour.BOARD_COLUMNS): 
      if game.board[column][row] == ' ': 
       print('.', end = ' ') 
      else: 
       print(game.board[column][row], end = ' ') 

     print() 

def move()->str: 
    input('Drop or Pop? ') 

def column1()->int: 
    int(input('What number of column? ')) 

Mein Board ist das Drucken wie:

1 2 3 4 5 6 7 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 
0 0 0 0 0 0 0 

aber es soll wie zu drucken:

1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 

Dies ist das Spielbrett-Funktion für die Vier gewinnt Modul

def _new_game_board() -> [[int]]: 
    ''' 
    Creates a new game board. Initially, a game board has the size 
    BOARD_COLUMNS x BOARD_ROWS and is comprised only of integers with the 
    value NONE 
    ''' 
    board = [] 

    for col in range(BOARD_COLUMNS): 
     board.append([]) 
     for row in range(BOARD_ROWS): 
      board[-1].append(NONE) 

    return board 



def _copy_game_board(board: [[int]]) -> [[int]]: 
    '''Copies the given game board''' 
    board_copy = [] 

    for col in range(BOARD_COLUMNS): 
     board_copy.append([]) 
     for row in range(BOARD_ROWS): 
      board_copy[-1].append(board[col][row]) 

Ich würde assum Es ist entweder einer dieser beiden. Meistens die Drop-Funktion, da ich den Spielerfehler auskommentiert habe, aber es zeigt sich für die Drop-Funktion.

def player(game: 'connectfour.GameState') -> None: 
    while True: 
     player = input('Would you like to drop(d) or pop(p)?') 
     if player == 'd': 
      drop(game) 
      return 
     elif player == 'p': 
      pop(game) 
      return 
     else: 
      connectfour.InvalidMoveError(Exception) 
      #print('Invalid Move') 

def drop(game: 'connectfour.GameState') -> bool: 
    try: 
     col = connectfouroverlap.column1() 
     board = connectfour.drop(game,col-1) 
     connectfouroverlap.print_board(board) 
     if gameover(board) != connectfour.NONE: 
      return 
     else: 
      player(board) 
    except: 
     connectfour.InvalidMoveError(Exception) 
     print('Invalid Move') 

So sieht die Ausgabe aus, wenn ich sie ausführe.

1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
Would you like to drop(d) or pop(p)?d 
What number of column? 2 
1 2 3 4 5 6 7 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. . . . . . . 
. 1 . . . . . 
Invalid Move 
+0

Was ist in game.board? – vmonteco

+0

@vmonteco Ich glaube nicht, dass dieser Teil wichtig ist, da das connectfour-Modul für uns vorgefertigt ist. – accelerate

+0

Es tut, weil wir wissen müssen, was Sie manipulieren, um Ihnen zu helfen. – vmonteco

Antwort

3

Nachdem Sie den Code überprüft, gehe ich davon aus, dass game.board ein doppeltes Array, das nur 0 enthält (ganze Zahlen?) Werte.

Wenn das wahr ist, versuchen Sie ersetzen:

 if game.board[column][row] == ' ': 
      print('.', end = ' ') 
     else: 
      print(game.board[column][row], end = ' ') 

mit:

 if game.board[column][row] == 0: # <--- change the condition here 
      print('.', end = ' ') 
     else: 
      print(game.board[column][row], end = ' ') 

EDIT: die ->[str] Anmerkung in Ihrer print_board Funktionsdefinition legt nahe, dass diese Funktion ein String-Array zurück soll . Aber das tut es nicht.

Sie erstellen ein ganz neues Board, um die Spaltennummern zu drucken. Das ist eine schlechte Übung, benutze stattdessen die existierende.

Sie könnten auch for in Schleifen direkt auf dem Array verwenden, anstatt Indizes zu verwenden. Das würde weit weniger Code erfordern und wäre viel klarer und einfacher zu schreiben:

for row in game.board: # <-- since game.board is your [[int]] 
    for number in row: 
     do_stuff_on(number) 
+0

Nach inder ursprünglichen Modul suchen, um etwas mehr, bemerkte ich diese NONE = 0 RED = 1 GELB = 2 Könnte das sein, warum? – accelerate

+0

@accelerate So scheint es, ich hatte Recht, was das Board ist. Hat die vorgeschlagene Lösung funktioniert? – vmonteco

+0

Ich habe gerade getan, was du getan hast, und es hat die 0s durch .s ersetzt, aber jetzt wird es vertikal angezeigt, anstatt wie das Board normalerweise aussieht. – accelerate