2014-02-08 66 views
1

我需要詢問用戶有多少行和多少列用戶想要這樣我的遊戲可以處理任何大小的板,但我不知道如何更改我的代碼。這是我的連接4代碼,這是一個6x7板。Python:連接4

import random 

def winner(board): 
    """This function accepts the Connect 4 board as a parameter. 
    If there is no winner, the function will return the empty string "". 
    If the user has won, it will return 'X', and if the computer has 
    won it will return 'O'.""" 

    # Check rows for winner 
    for row in range(6): 
     for col in range(3): 
      if (board[row][col] == board[row][col + 1] == board[row][col + 2] ==\ 
       board[row][col + 3]) and (board[row][col] != " "): 
       return board[row][col] 

    # Check columns for winner 
    for col in range(6): 
     for row in range(3): 
      if (board[row][col] == board[row + 1][col] == board[row + 2][col] ==\ 
       board[row + 3][col]) and (board[row][col] != " "): 
       return board[row][col] 

    # Check diagonal (top-left to bottom-right) for winner 

    for row in range(3): 
     for col in range(4): 
      if (board[row][col] == board[row + 1][col + 1] == board[row + 2][col + 2] ==\ 
       board[row + 3][col + 3]) and (board[row][col] != " "): 
       return board[row][col] 


    # Check diagonal (bottom-left to top-right) for winner 

    for row in range(5, 2, -1): 
     for col in range(3): 
      if (board[row][col] == board[row - 1][col + 1] == board[row - 2][col + 2] ==\ 
       board[row - 3][col + 3]) and (board[row][col] != " "): 
       return board[row][col] 

    # No winner: return the empty string 
    return "" 

def display_board(board): 

    print " 1 2 3 4 5 6 7" 
    print "1: " + board[0][0] + " | " + board[0][1] + " | " + board[0][2] + " | " + board[0][3] + " | " + board[0][4] + " | " + board[0][5] + " | " + board[0][6] + " | " + board[0][7] 
    print " ---+---+---+---+---+---+---" 
    print "2: " + board[1][0] + " | " + board[1][1] + " | " + board[1][2] + " | " + board[1][3] + " | " + board[1][4] + " | " + board[1][5] + " | " + board [1][6] + " | " + board [1][7] 
    print " ---+---+---+---+---+---+---+" 
    print "3: " + board[2][0] + " | " + board[2][1] + " | " + board[2][2] + " | " + board[2][3] + " | " + board [2][4] + " | " + board [2][5] + " | " + board [2][6] + " | " + board [2][7] 
    print " ---+---+---+---+---+---+---+" 
    print "4: " + board[3][0] + " | " + board[3][1] + " | " + board[3][2] + " | " + board[3][3] + " | " + board [3][4] + " | " + board [3][5] + " | " + board [3][6] + " | " + board [3][7] 
    print " ---+---+---+---+---+---+---+" 
    print "5: " + board[4][0] + " | " + board[4][1] + " | " + board[4][2] + " | " + board[4][3] + " | " + board [4][4] + " | " + board [4][5] + " | " + board [4][6] + " | " + board [4][7] 
    print " ---+---+---+---+---+---+---+" 
    print "6: " + board[5][0] + " | " + board[5][1] + " | " + board[5][2] + " | " + board[5][3] + " | " + board [5][4] + " | " + board [5][5] + " | " + board [5][6] + " | " + board [5][7] 
    print 

def make_user_move(board): 

    try: 
     valid_move = False 
     while not valid_move: 
      col = input("What col would you like to move to (1-7):") 
      for row in range (6,0,-1): 
       if (1 <= row <= 6) and (1 <= col <= 7) and (board[row-1][col-1] == " "): 
        board[row-1][col-1] = 'X' 
        valid_move = True 
        break 
      else: 
       print "Sorry, invalid square. Please try again!\n" 

    except NameError: 
     print "Only numbers are allowed." 

    except IndexError: 
     print "You can only select columns from (1-7), and rows from (1-6)." 

def make_computer_move(board): 
    # Code needed here... 
    valid_move = False 
    while not valid_move: 
     row = random.randint(0,5) 
     col = random.randint(0, 6) 
     for row in range (5,0,-1): 
      if board[row][col] == " ": 
       board[row][col] = "O" 
       valid_move = True 
       break 

def main(): 
    free_cells = 42 
    users_turn = True 
    count = 1 
    ttt_board = [ [ " ", " ", " ", " ", " ", " "," ", " "], [ " ", " ", " ", " ", " "," ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "], [ " ", " ", " ", " ", " ", " ", " ", " "] ] 

    print "\nHALL OF FAME \n" 

    try: 
     hall_of_fame = open("HallOfFame.txt", 'r') 

     for name in hall_of_fame: 
      print str(count) + ".", name 
      print 
      count += 1 

     hall_of_fame.close() 

    except IOError: 
     print "No Human Has Ever Beat Me.. mwah-ha-ha-ha!\n" 

    choice = raw_input("Would you like to go first? (y or n): ") 

    if (choice == 'y' or choice=='Y'): 
     users_turn = True 


    elif (choice == 'n' or choice =='N') : 
     users_turn = False 

    else: 
     print 'invalid input' 

    while not winner(ttt_board) and (free_cells > 0): 
     display_board(ttt_board) 
     if users_turn: 
      make_user_move(ttt_board) 
      users_turn = not users_turn 
     else: 
      make_computer_move(ttt_board) 
      users_turn = not users_turn 
     free_cells -= 1 

    display_board(ttt_board) 
    if (winner(ttt_board) == 'X'): 
     print "You Won!" 
     print "Your name will now be added to the Hall of Fame!" 

     hall_of_fame = open("HallOfFame.txt", 'a') 
     name = raw_input("Enter your name: ") 
     hall_of_fame.write(name+ '\n') 
     print "Your name has been added to the Hall of Fame!" 

     hall_of_fame.close() 

     print "\nGAME OVER" 
    elif (winner(ttt_board) == 'O'): 
     print "The Computer Won!" 
     print "\nGAME OVER" 
    else: 
     print "Stalemate!" 
     print "\nGAME OVER \n" 

#start the game 

main() 
+0

對於那些仍然在這個問題上磕磕絆絆,尋找解決方案的人來說,這裏是我幾年前寫的Connect Four遊戲:https://gist.github.com/poke/6934842 - 它的工作原理與OP的不同它(這就是爲什麼這是一個評論,而不是答案),但可以正確處理任意的電路板尺寸。 – poke

回答

1
import sys 

if sys.hexversion < 0x3000000: 
    inp = raw_input 
else: 
    inp = input 

def get_int(prompt): 
    while True: 
     try: 
      return int(inp(prompt)) 
     except ValueError: 
      pass 

HEIGHT = get_int('How many rows? ') 
WIDTH = get_int('How many columns? ') 

現在,您可以替代在電路板的程度,這些常數範圍調整電路板尺寸。