Я делаю игру connect4.Как я могу проверить, заполнен ли столбец? - PullRequest
0 голосов
/ 25 сентября 2019

Так что я делаю игру connect4.Я застрял в той части, где я хочу проверить, заполнен ли столбец.Я также не знаю, какую часть программы я должен ввести код для проверки.И я хочу, чтобы проверка произошла после того, как игрок выберет свой ход.Любое предложение о том, как я буду делать это?

PLAYING = "PLAYING"
WAITING = "WAITING"

class Player: #FOR TURN  TAKING
    state = ""
    name = ""
    def __init__(self,name, stateParam):
        self.name = name
        self.state = stateParam

    def playerInfo(self):
        return self.name

    def getState(self):
        return self.state
    def setState(self, stateParam):
        self.state = stateParam

def play():
    grid,grid_height,grid_width,p1_name,p1_char,p2_name,p2_char=getGameSettings()
    displayGrid(grid,grid_height,grid_width)

    playerA = Player(p1_name, PLAYING)
    playerB = Player(p2_name, WAITING)  

    turn = 0
    while turn < grid_height*grid_width:
        player = playerA
        if turn % 2 == 0 : #IF TURN IS AN ODD NUMBER, THEN IT IS player 1's turn, IF TURN IS EVEN, THEN IT IS player 2's turn
            p_char= p1_char
            player = playerA
            playerA.setState(PLAYING)
            playerB.setState(WAITING)
        else :
            p_char= p2_char
            player = playerB
            playerB.setState(PLAYING)
            playerA.setState(WAITING)

        print(".................................................. ")
        print("User to play : ", player.playerInfo() , " SEQ : ", str(turn)) # TO COUNT THE TOTAL NUMBER OF MOVES
        print(".................................................. ")

        #ASKS FOR THE CURRENT PLAYER'S MOVE
        try:
            move= int(input('Enter your move: '))
        except ValueError: 
            print('Plese enter a valid  input.')
        if move < 1 or move > grid_width:
            print('Please  enter a valid input.')
            continue

        while True:
            if turn >= grid_height*grid_width: #CHECKS IF ALL THE SPACES HAVE BEEN FULLY OCCUPIED
                print('You have finished the game. Restart the game!')
            else:
                updateGrid(grid,move,p_char,grid_height-1,grid_width-1)
                displayGrid(grid,grid_height,grid_width)
            break
        turn += 1 #INCREMENTS 1 TO TURN SO IT WILL SWITCH BETWEEN BEING ODD AND EVEN


def getGameSettings(): 
    #PLAYER 1 NAME
    while True:
        p1_name=input("Enter player 1 name: ")
        if len(p1_name) > 15 or p1_name == '': #Validation of input p1_name
            print("Input a valid name. Max of 15 characters only.")
            p1_name=input("Enter player 1 name: ")
        else:
            break

    #PLAYER 1 CHARACTER
    while True:
        p1_char=str(input("Enter player 1's character: "))
        if len(p1_char) != 1 or p1_char=='' : #Validation of input p1_character
            print("1 character only.")
            p1_char=input("Enter player 1's character: ")
        else:
            break

    #PLAYER 2 NAME
    while True:
        p2_name=str(input("Enter player 2 name: "))
        if len(p2_name) > 15 or p2_name == p1_name or p2_name == '': #Validation of input p2_name
            print("Max of 15 characters only or choose a different name.")
            continue #GOES BACK TO ASKING FOR INPUT
        break #IF GIVEN THE RIGHT INPUT, WILL GO OUT OUT THE LOOP AND STOP ASKING

    #PLAYER 2 CHARACTER
    while  True:
        p2_char=str(input("Enter player 2's character: "))
        if len(p2_char) != 1 or p2_char == p1_char or p2_char == '': #Validation  of input p2_char
            print("1 character only or choose a different character from player 1")
            continue #GOES BACK TO ASKING FOR INPUT
        break #IF GIVEN THE RIGHT INPUT, WILL GO OUT OUT THE LOOP AND STOP ASKING

    #VALIDATION OF INPUT OF GRID_HIGHT
    while True: 
        try:
            global grid_height
            grid_height=int(input("Enter grid_height(6-10): "))
        except ValueError: #if input is not the right type()
            print('Ivalid input type. Enter an integer')
            continue
        if grid_height > 10 or grid_height < 6: #to check if input is within accepted values
            print('Height must be less than 11 and greater than 5.')
            continue  
        break

    #VALIDATION OF INPUT OF GRID_WIDTH
    while True: 
        try:
            global grid_width
            grid_width=int(input("Enter grid_width: "))
        except ValueError: #if input is not the right type()
            print('Ivalid input type. Enter an integer')
            continue
        if grid_width > 9 or grid_width < 7: #to check if input is within accepted values
            print('Width must be less than 10 and greater than 6.')
            continue  
        break

    #SETTING UP THE GRID
    grid=[]
    for row in range(grid_height): # FOR ROW
        z =[]
        for col in range(grid_width): # FOR COLUMN
            z.append(" ")
        grid.append(z)

    return grid,grid_width,grid_width,p1_name,p1_char,p2_name,p2_char


def displayGrid(grid,grid_height,grid_width):
    for row in range(1,grid_height):
        #print(row) #for checking
        for col in range(grid_width):
            print("|", end="")
            print(str(grid[row-1][col-1]),end = "")
        print("|")
    print(" "+" ".join([str(i) for i in range(1, grid_width+1)]))
    return grid

def updateGrid(grid,move,p_char,grid_height,grid_width):
    for i in range(1,grid_height+1):
        #print(i) #ROW COUNTING STARTS FROM 1 
        if grid[grid_height-i][move-2] == " ":
            grid[grid_height-i][move-2]= p_char #REPLACES THE " " TO THE CURRENT PLAYER'S CHARACTER (p_char)
        else:
            if grid[0][move-2] != " ":
                updateGrid(grid,grid_height,grid_width,p_char)
            else:
                continue
        break

    return grid


#def isWin(p_char, grid, gridheight, gridwidth):
    #CHECKS FOR HORIZONTAL WIN

#def isDraw():


if __name__ == '__main__':
    play()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...