C Introduction to Programming It is short and simple practic

C++ Introduction to Programming

It is short and simple practice.

Functions and Classes

Please solve #6, 7, 8, 9, 10

#include<iostream>

#include<vector>

..

using namespace std;

6. Let\'s write a 4x4 tic-tac-toe game. Here\'s a class definition for the board: class ttt board public: int board[4][4]; Assuming that 0 means an unmarked space, 1 means X, and -1 means o, write the function set which sets a space (given by its Row and Column) on a board to a given marker: void set(ttt board& b, int c, int r, int mark) \\ / YOUR ANSWER HERE 7. Continuing the previous, complete the following functions which test locations on the board to see whether they are empty, Xs, or Os bool is empty(ttt board& b, int c, int r) /I YOUR ANSWER HERE bool is x(ttt board& b, int c, int r) f YOUR ANSWER HERE bool is_o(ttt_board& b, int c, int r) ( / YOUR ANSWER HERE 8. Using the functions you wrote in the previous, write the following functions which test whether there are four-in-a-row along a column, or a row. If there are four Xs the function should return 1, if there are four Os it should return -1, otherwise it should return e // Check all rows for 4-in-a-row int has_4_row(ttt_board& b) f YOUR ANSWER HERE // Check all columns for 4-in-a-column int has 4 col(ttt board& b / YOUR ANSWER HERE 9. Write a function , has-4, diagonal, which checks both diagonals, returning 1, -1, or 0 as for the other has 4. functions. int has 4 diagonal(ttt board& b // YOUR ANSWER HERE 10. Write a function print-board\" which prints out a ttt-board\' to the screen, as blank spaces, Xs, and Os. Include the row/column numbers along the left and top edges. E.g., a board might print as 1234 1X 00 20X X 3 X00 400 X If you want to print lines between the rows/columns to make things easier to read, you can do that, in which case the above might look like But that\'s optional. void print board(ttt board b // YOUR ANSWER HERE Puzzle: complete the 4-way TTT game so that it can read in moves from the users and will properly detect a win.

Solution

Following is the required code:

#include <iostream>
#include <vector>
using namespace std;

class ttt_board{
public:
   int board[4][4];
};

void set( ttt_board& b, int c, int r, int mark ){
   //doesnt check postion at r,c was already marked
   b.board[r][c] = mark;
}

bool is_empty( ttt_board& b, int c, int r ){
   //true if it is at r,c
   return b.board[r][c]==0;
}

bool is_x( ttt_board& b, int c, int r ){
   return b.board[r][c]==1;
}

bool is_o( ttt_board& b, int c, int r ){
   return b.board[r][c]==-1;
}

int has_4_row( ttt_board& b ){
   for( int row=0; row < 4; row++ ){
       if( is_x(b,row,0) && is_x(b,row,1) && is_x(b,row,2) && is_x(b,row,3) ){
           return 1;
       }
       if( is_o(b,row,0) && is_o(b,row,1) && is_o(b,row,2) && is_o(b,row,3) ){
           return -1;
       }
   }
   return 0;
}

int has_4_col( ttt_board& b ){
   for( int col=0; col < 4; col++ ){
       if( is_x(b,0,col) && is_x(b,1,col) && is_x(b,2,col) && is_x(b,3,col) ){
           return 1;
       }
       if( is_o(b,0,col) && is_o(b,1,col) && is_o(b,2,col) && is_o(b,3,col) ){
           return -1;
       }
   }
   return 0;
}

int has_4_diagonal( ttt_board &b ){
   //check both diagonal
   if( is_x(b,0,0) && is_x(b,1,1) && is_x(b,2,2) && is_x(b,3,3) ){
       return 1;
   }
   if( is_x(b,0,3) && is_x(b,1,2) && is_x(b,2,1) && is_x(b,3,0) ){
       return 1;
   }
   if( is_o(b,0,0) && is_o(b,1,1) && is_o(b,2,2) && is_o(b,3,3) ){
       return -1;
   }
   if( is_o(b,0,3) && is_o(b,1,2) && is_o(b,2,1) && is_o(b,3,0) ){
       return -1;
   }
   return 0;
}

void print_board( ttt_board b ){
   cout << \" 1234\" << endl;
   for(int i =0; i < 4; i++){
       cout << i+1;
       for(int j =0; j<4; j++){
           if( b.board[i][j] == 1){cout<<\'X\';}
           else if( b.board[i][j] == -1){cout<<\'0\';}
           else{cout<<\' \';}
       }
       cout << endl;
   }
}

int main(){
   int row, col;
   ttt_board b;
   for(int i =0; i< 4; i++){
       for(int j = 0; j < 4; j++){
           set( b, i, j , 0);
       }
   };
   int moves = 0;
   while( moves < 16 ){
       moves+= 2;
       cout << \"First Player\'s turn\" << endl;
       while( true ){
           cout << \"Enter your move, as two integers with spaces: row col\"<< endl;
           cin >> row >> col;
           if( (col>=0 && col<4) && (row>=0 && row<4) && is_empty(b, col, row )){ break; }
           else{ cout << \"Invalid move, enter again\" << endl;}
       }
       set( b, col ,row, -1);
       print_board(b);
       if( has_4_row(b) || has_4_col(b) || has_4_diagonal(b) ){
           cout << \"First player wins\" << endl;
           return 0;
       }

       cout << \"Second Player\'s turn\" << endl;
       while( true ){
           cout << \"Enter your move, as two integers with spaces: row col\"<< endl;
           cin >> row >> col;
           if( is_empty(b, col , row)){ break; }
           else{ cout << \"Invalid move, enter again\" << endl;}
       }
       set( b, col , row, 1);
       print_board(b);
       if( has_4_row(b) || has_4_col(b) || has_4_diagonal(b) ){
           cout << \"Second player wins\" << endl;
           return 0;
       }
   }
   return 0;
}

C++ Introduction to Programming It is short and simple practice. Functions and Classes Please solve #6, 7, 8, 9, 10 #include<iostream> #include<vector&
C++ Introduction to Programming It is short and simple practice. Functions and Classes Please solve #6, 7, 8, 9, 10 #include<iostream> #include<vector&
C++ Introduction to Programming It is short and simple practice. Functions and Classes Please solve #6, 7, 8, 9, 10 #include<iostream> #include<vector&

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site