Так что я делаю игру 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()