Skip to content
Advertisement

How to reset the index counter?

I’m implementing a game (connect four). A player makes a move by selecting a column number to place their checker in, when the column is empty the checker is placed at row index (-1) if not I’m decrementing the index by -1. I am having trouble resetting the row index so that after both players play the same column the next move in a non empty column should follow the last index and not continue on the last decremented index.[In this image, third move(red) and fourth move(green) played column 2, the green checker was supposed to be in row 5(index-2) but it continued from the last decremented index in second move(green[index -2] column(1)][1].

Here is my code. The moves are implemented from line 41.

`import sys
from termcolor import colored, cprint

#Drawing the 7columns x 6 rows playing field

rows = [] #Empty list to store row numbers

def playing_field(field):
    for row in range(11):
        rows.append(row) #Storing the row numbers in a list
        if row % 2 == 0:
            height = int(row/2)
            for column in range(13):
                if column % 2 == 0:
                    width = int(column/2)
                    if column != 12:
                        print(field[height][width], end="")
                    else:
                        print(field[height][width])
                else:
                    print("|", end="")
        else:
            print("______________")
    return True


#Defining the players variable
player = 1
index = -1

# Defining a 7 columns by 6 rows list of lists
curr_field = [[" ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " "],
              [" ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " "], [" ", " ", " ", " ", " ", " ", " "]]

# Draw the field by calling the playing field function
playing_field(curr_field)

x = colored(u'u2B24', 'red')
y = colored(u'u2B24', 'green')

#Loop to initiate play as long condition is true
while (True):
    print("PLAYER: ", player)
    moveCol = int(input("Choose column:n")) - 1
     
        #Player one's turn
    if player == 1:
        if curr_field[-1][moveCol] == " ":
            curr_field[-1][moveCol] = x
            player = 2
        else:
            index += (-1)
            curr_field[index][moveCol] = x
            #Take turn to player two
            player = 2
            
    #Player two's turn
    else:
        if curr_field[-1][moveCol] == " ":
            curr_field[-1][moveCol] = y
            #Take turn to player 1
            player = 1
        else:
            index += (-1)
            curr_field[index][moveCol] = y
            #Take turn to player two
            player = 1
                     
    #calling function
    playing_field(curr_field)

` [1]: https://i.stack.imgur.com/qT9HV.png

Advertisement

Answer

Instead of manipulating the index number, what about just appending the moves to the matrix. Using a dictionary would probably be the easiest.

moves={}
moves[colnum] = moves.get(colnum,[]) + [playernum]

If nobody has moved into a column, the .get() function returns an empty list, then appends (adds) the value to that list.

After a while your dictionary will look like this:

{2: [1,2], 3: [2, 1, 2]}

Showing the player number for each position (bottom up) in the column.

This way, each column’s entry in the list is the right length and uses an index that could be used to pull a color for a list in your playing_field() function.

User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement