There are good general prinicples of OO you are adopting. And when your code gets long you want to test things a function at a time.
I think there is a potential issue with the player choose function.
you might find it simpler to have a function to process the input
seperately as there is no error checking
atoi would normally take a c_string rather than a single char
so this might cause problems putting in the address of ones[1] but it might handle it ok but it would be safer to take everything but the first letter
string ones;
int col_id, row_id
cout << "enter a number " << endl;
cin >> ones;
if(ones.size() >= 2)
{
col_id = convert(ones[0]);
//get all but the first letter of ones
ones = ones.substr(1);
row_id = atoi(ones.c_str())
}
else
{
//error
}
//now check col_id & row_id are valid
so you might prefer putting in letter then a number
with two inputs that way if the user only entered one letter
your code will not fail.
also v[two - 1][onez -1]
might go out of range if convert finds a non-letter if this happens your code will fail
as v[-1] does not exist
so you should check
this is the issue with your rand %8 is in range 0-7
%8 - 1 in range -1 to 6
a couple of minor things to consider
you have if() …