poloboi
poloboi

Reputation: 3

Why is my array initalized with 0 on every position?

So i am a total beginner. Basically my goal is it to print out a board with the opening position of a checkers game, but i can only draw a blank board without any pieces on it. I don't understand why because i declared it should only do this when the array position equals white (-1). But if try to do a test and print out any random position, every position equals 0. So at this point i feel very lost because the code i wrote makes total sense to me.

//main.cpp
#include <iostream>
#include <array>

#include "board.hpp"

int main()
{
    board Checkers;
    Checkers.printBoard();
}

//board.cpp
class board
{
    private:

        std::array<std::array<int, 8>, 8> boardArr;
        int const white = -1;
        int const black = 0;
        int const player1 = 1;
        int const player2 = 2;


    public:

        board()
        {
            for( int i = 0; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++ )
                {
                    if( ((i + j) % 2)  == 1 )
                    {
                        boardArr.at(i).at(j) = black;
                    }
                    else
                    {
                        boardArr.at(i).at(j) = white;
                    }
                }
            }

            for( int i = 0; i < 3; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) = black )
                    {
                        boardArr.at(i).at(j) = player2;
                    }
                }
            }

            for( int i = 5; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) = black )
                    {
                        boardArr.at(i).at(j) = player1;
                    }
                }
            }
        }

        void printBoard()
        {
            /*
            std::cout << "(TEST) on (white) 0.0::: " << boardArr.at(0).at(0) << "\n\n\n";
            std::cout << "(TEST) on (black) 3.0::: " << boardArr.at(3).at(0) << "\n\n\n";
            std::cout << "(TEST) on (O) 0.1::: " << boardArr.at(0).at(1) << "\n\n\n";
            std::cout << "(TEST) on (X) 7.0::: " << boardArr.at(7).at(0) << "\n\n\n";
            */

            std::cout << "  | A | B | C | D | E | F | G | H |" << "\n"
                      << "--+---+---+---+---+---+---+---+---+--" << "\n";
            for( int i = 0; i < 8; i++ )
            {
                std::cout << -i + 8 << " |";
                for( int j = 0; j < 8; j++ )
                {
                     if( boardArr.at(i).at(j) = white )
                     {
                         std::cout << "   |";
                     }
                     else if( boardArr.at(i).at(j) = black )
                     {
                         std::cout << "###|";
                     }
                     else if( boardArr.at(i).at(j) = player2 )
                     {
                         std::cout << " O |";
                     }
                     else if( boardArr.at(i).at(j) = player1 )
                     {
                        std::cout << " X |";
                     }
                }
                std::cout << "\n" << "--+---+---+---+---+---+---+---+---+--" << "\n";
            }
        }
};

Upvotes: 0

Views: 73

Answers (1)

biqarboy
biqarboy

Reputation: 852

I think @M.M already pointed the issue. The problem was in your checking the status of board cell (i.e., boardArr.at(i).at(j)) in your printBoard() function. Here, I am adding the updated code, please have a look and compare it with your one:

//main.cpp
#include <iostream>
#include <array>

//#include "board.hpp"

//board.cpp
class board
{
    private:

        std::array<std::array<int, 8>, 8> boardArr;
        int const white = -1;
        int const black = 0;
        int const player1 = 1;
        int const player2 = 2;


    public:

        board()
        {
            for( int i = 0; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++ )
                {
                    if( ((i + j) % 2)  == 1 )
                    {
                        boardArr.at(i).at(j) = black;
                    }
                    else
                    {
                        boardArr.at(i).at(j) = white;
                    }
                }
            }

            for( int i = 0; i < 3; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) == black )
                    {
                        boardArr.at(i).at(j) = player2;
                    }
                }
            }

            for( int i = 5; i < 8; i++ )
            {
                for( int j = 0; j < 8; j++)
                {
                    if( boardArr.at(i).at(j) == black )
                    {
                        boardArr.at(i).at(j) = player1;
                    }
                }
            }
        }

        void printBoard()
        {
            /*
            std::cout << "(TEST) on (white) 0.0::: " << boardArr.at(0).at(0) << "\n\n\n";
            std::cout << "(TEST) on (black) 3.0::: " << boardArr.at(3).at(0) << "\n\n\n";
            std::cout << "(TEST) on (O) 0.1::: " << boardArr.at(0).at(1) << "\n\n\n";
            std::cout << "(TEST) on (X) 7.0::: " << boardArr.at(7).at(0) << "\n\n\n";
            */

            std::cout << "  | A | B | C | D | E | F | G | H |" << "\n"
                      << "--+---+---+---+---+---+---+---+---+--" << "\n";
            for( int i = 0; i < 8; i++ )
            {
                std::cout << -i + 8 << " |";
                for( int j = 0; j < 8; j++ )
                {
                     if( boardArr.at(i).at(j) == white )
                     {
                         std::cout << "   |";
                     }
                     else if( boardArr.at(i).at(j) == black )
                     {
                         std::cout << "###|";
                     }
                     else if( boardArr.at(i).at(j) == player2 )
                     {
                         std::cout << " O |";
                     }
                     else if( boardArr.at(i).at(j) == player1 )
                     {
                        std::cout << " X |";
                     }
                }
                std::cout << "\n" << "--+---+---+---+---+---+---+---+---+--" << "\n";
            }
        }
};

int main()
{
    board Checkers;
    Checkers.printBoard();
}

Upvotes: 1

Related Questions