Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Here are the functions you need to implement: void printBoard(const vector< vect

ID: 3681645 • Letter: H

Question

Here are the functions you need to implement:

void printBoard(const vector< vector <int> > &myBoard) is already

implemented. You may find this a helpful guide for things like determining how many rows or columns are on the board, how to loop through a 2-D vector, and how to access a particular element of a vector.

void fillBoard(vector< vector<int> > &myBoard) puts the numbers 1 through (numRows * numCols) - 1 in the board, in order across rows, and also puts the number 0 in the bottom right corner. For example, if the board is size 3x3, fillBoard would put these values in the 2-D vector:

Notice that this is also the configuration of the winning game board.

1

2

3

4

5

6

7

8

0

void shuffleBoard(vector < vector<int> > &myBoard) “shuffles” the contents of the board. The way that the board is shuffled is to move a random tile into the empty square numColumns * numRows * 100 times. In my implementation, I did this by randomly choosing a direction around the empty square (up, down, left, right), and then if there was a tile in this direction (e.g. not going off the edge of the board) I slid the tile from that direction into the empty square. If there was no tile in the direction (e.g. the empty square was on the right side of the board, and the random direction was to the right), then nothing was moved (but I lazily still counted it as a move). Note: Your implementation of this step may be different than mine; even if we seed the random number generator with the same value, your program may produce a different “shuffled” board. This is okay.

void swap(int &value1, int &value2) swaps two integers. This function is in your textbook; you should make sure you understand how/why it works.

bool slideTile(vector < vector<int> > &myBoard, int row, int col) is one overloaded version of the slideTile method. This version method moves the tile at location row, col to the adjacent empty square. You should NOT assume that the tile at the location specified is actually adjacent to the empty square, but should instead check that it is legal to move this tile. The function also should not assume that row and col are valid indices into the vector. If the tile can be moved, this function should move it (hint: call the swap method since moving a tile to the empty square is equivalent to swapping the tile and the empty square), and should return true. If the tile can’t be moved, this function should not move anything and should return false.

bool slideTile(vector < vector<int> > &myBoard, int tileNumber) is the other overloaded version of the slideTile method. This version of the method does not requireknowledgeoftherow, collocationofthetile;itonlyneedstoknowthevalueofthe tile. This function should search the game board for the specified tile, then moves it if it can be legally moved (hint: call the other version of slideTile). Like the other version of slideTile, this function returns true when the tile is successfully moved and false otherwise. This function should not assume that tileNumber is actually a tile in the game (e.g the value passed for tileNumber could be negative, or larger than the number of tiles in the game).

bool gameIsWon(vector < vector<int> > &myBoard) checks to see if the game is won. The game is considered won when it is in the same configuration as that created by the fillBoard function. That is, all of the tiles are in order, across the rows, and the empty space is in the bottom left corner.

1

2

3

4

5

6

7

8

0

Explanation / Answer

#include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <iostream.h> #include <conio.h> #include <ctype.h> //For toupper #include <dos.h> //For Delay int board[8][8],turn=0,count1=0,count2=0; int gameover(); char strFileName[15]; void printboard(); void wrongStart(); void initialize(); void cleartext(); void check(); //Prototypes int pawn(int x,int y,int x1,int y1); int horse(int x,int y,int x1,int y1); int rook(int x,int y,int x1,int y1); int bishop(int x,int y,int x1,int y1); int queen(int x,int y,int x1,int y1); int king(int x,int y,int x1,int y1); void main() { //Graphics Initialization int gdriver = DETECT; int gmode; initgraph(&gdriver,&gmode,"e:\borlandc\bgi"); //Loading Intro for(float i=0; i<=6;i=i+0.1) { setcolor(12); settextstyle(4,HORIZ_DIR,i); outtextxy(50,120,"WELCOME TO THE CHESS"); delay(30); cleardevice(); } outtextxy(50,120,"WELCOME TO THE CHESS"); settextstyle(1,HORIZ_DIR,3); getch(); cleardevice(); //Displaying Group Members setcolor(CYAN); outtextxy(50,220,"Designed by:"); setcolor(6); outtextxy(50,250,"Atif Zia Khan"); //Displaying Roll Numbers outtextxy(350,250,"L1F01BSCS0144"); getch(); cleardevice(); cleardevice(); settextstyle(1,HORIZ_DIR,2); setcolor(12); outtextxy(50,10,"During the game Press: "); outtextxy(50,10,"______________________ "); setcolor(6); settextstyle(1,HORIZ_DIR,1.5); outtextxy(50,60,"F2 to save file "); outtextxy(50,80,"F3 to load file "); outtextxy(50,100,"ESC to exit game "); outtextxy(50,120,"U to undo selection "); outtextxy(50,200," Press any key to play "); getch(); cleardevice(); cleartext(); initialize(); char ch; int x=-1,y=-1,x1=-1,y1=-1; setcolor(9); outtextxy(10,400,"Player 1"); for(;;) { int game; game=gameover(); if(game==0) { break; } FILE *fp; ch=getch(); if(ch==0){ ch=getch(); if(ch=='<'){ //////SAVE///// for(;;) { cout<<" Enter File name to save "; cin>>strFileName; //Enter File Name fp=fopen(strFileName,"r+"); if(fp!=NULL) { cout<<"File already exist "; } else { fp=fopen(strFileName,"w+"); if(fp==NULL) { cout<<"Invalid File Name "; } else break; } }//end for fprintf(fp,"%d ",turn); for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { fprintf(fp,"%d ",board[i][j]); } } fclose(fp); cleartext(); x=-1; y=-1; x1=-1; y1=-1; continue; } if(ch=='=') { ////Load///// for(;;) { cout<<" Enter File name to Load "; cin>>strFileName; fp=fopen(strFileName,"r+"); if(fp==NULL) { cout<<"File does not exist "; } else { break; } }//end for fscanf(fp,"%d",&turn); for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ fscanf(fp,"%d",&board[i][j]); } } fclose(fp); printboard(); cleartext(); x=-1; y=-1; x1=-1; y1=-1; setcolor(0); outtextxy(10,400,"Player Û"); if(turn!=0){ check(); setcolor(2); outtextxy(10,400,"Player 2"); } else{ check(); setcolor(9); outtextxy(10,400,"Player 1"); } continue; } } if(ch==27){ break; } else if(ch=='u'||ch=='U'){ x=-1; x1=-1; y1=-1; y=-1; cleartext(); continue; } if(x==-1){ ch=toupper(ch); if(ch>=65 && ch<=72){ cout<<ch; x=ch-65; } } else if(y==-1) { if(ch>='1' && ch<='8') { cout<<ch; y=ch-'1'; if(board[y][x]==0){ wrongStart(); x=-1; y=-1; } else { if(turn==0) { if(board[y][x]<0) //if Player 1 has selected a piece of Player 2 { wrongStart(); x=-1; y=-1; } } else if(turn!=0) { if(board[y][x]>0) { wrongStart(); x=-1; y=-1; } } } } if(x!=-1 && y!=-1) cout<<" enter final position ¯ "; } else if(x1==-1) { //Converting lower to upper case ch=toupper(ch); if(ch>=65 && ch<=72) { cout<<ch; x1=ch-65; } } else if(y1==-1) { if(ch>='1' && ch<='8') { cout<<ch; y1=ch-'1'; } int b=0,killed=0; /////pawn///// if(abs(board[y][x])>=9 && abs(board[y][x])<=16){ //if piece selscted has value greater than 8 and less than 17 b = pawn(x,y,x1,y1); }//end pawn //////horse////// else if(abs(board[y][x])==2 || abs(board[y][x])==7){ //if piece selscted has value 2 and 7 b = horse(x,y,x1,y1); }//end horse ////queen/// else if(abs(board[y][x])==4){ ////if piece selscted has value 4 b = queen(x,y,x1,y1); }//end queen ///king/// else if(abs(board[y][x])==5){ //if piece selscted has value 5 b = king(x,y,x1,y1); }//end king ///rook/// else if(abs(board[y][x])==1 || abs(board[y][x])==8){ //if piece selscted has value 1 and 8 b = rook(x,y,x1,y1); }//end rook ///bishop/// else if(abs(board[y][x])==3 || abs(board[y][x])==6){ //if piece selscted has value 3 and 6 b = bishop(x,y,x1,y1); }//end bishop if(b==2){ if(abs(board[y][x])>=9 && abs(board[y][x])<=16){ char pp; cout<<"  which piece Q,R,H,B"; pp=getch(); if(turn==0){ if(pp=='r') board[y1][x1]=1; else if(pp=='h') board[y1][x1]=2; else if(pp=='b') board[y1][x1]=3; else if(pp=='q') board[y1][x1]=4; } else{ if(pp=='r') board[y1][x1]=-1; else if(pp=='h') board[y1][x1]=-2; else if(pp=='r') board[y1][x1]=-3; else if(pp=='q') board[y1][x1]=-4; } board[y][x]=0; killed =1; } else if(abs(board[y][x])==5){ if(board[y][x]==5){ if(count1==1); wrongStart();} else if(board[y][x]==-5){ if(count1==1); wrongStart();} else{ board[y][x+1]=board[y1][x1]; board[y][x+2]=board[y][x]; board[y1][x1]=0; board[y][x]=0; killed=1; } } printboard(); } else if(b==1) { if(turn==0) { if(board[y1][x1]<0) { board[y1][x1]=board[y][x]; board[y][x] = 0; killed=1; } } if(turn!=0) { if(board[y1][x1]>0) { board[y1][x1]=board[y][x]; board[y][x] = 0; killed=1; } } if(board[y1][x1]==0) { int temp=board[y][x]; board[y][x]=board[y1][x1]; board[y1][x1]=temp; killed=1; } printboard(); } x=-1; y=-1; x1=-1; y1=-1; setcolor(0); outtextxy(30,340,"Check"); if(killed==0){ wrongStart(); continue; } cleartext(); setcolor(0); outtextxy(10,400,"Player Û"); if(turn==0){ check(); turn=1; setcolor(2); outtextxy(10,400,"Player 2"); } else{ check(); turn=0; setcolor(9); outtextxy(10,400,"Player 1"); } }//end legal move }//end for }//end main void printboard(){ for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ if((i+j)%2==0) setcolor(WHITE); else setcolor(BLACK); outtextxy(270+(j*45),105+(i*45),"ÛÛ"); if(board[i][j]<0) setcolor(GREEN); else if(board[i][j]>0) setcolor(9); if(abs(board[i][j])>=9 && abs(board[i][j])<=16){ outtextxy(270+(j*45),105+(i*45),"P");} else if(abs(board[i][j])==1 || abs(board[i][j])==8){ outtextxy(270+(j*45),105+(i*45),"R");} else if(abs(board[i][j])==2 || abs(board[i][j])==7){ outtextxy(270+(j*45),105+(i*45),"H"); } else if(abs(board[i][j])==3 || abs(board[i][j])==6){ outtextxy(270+(j*45),105+(i*45),"B"); } else if(abs(board[i][j])==4){ outtextxy(270+(j*45),105+(i*45),"Q"); } else if(abs(board[i][j])==5){ outtextxy(270+(j*45),105+(i*45),"K"); } } } } void wrongStart() { cout<<" Wrong Input Press any key to continue..."; char ch=getch(); if(ch==0){ getch(); } for(int i=1;i<=30;i++) for(int j=1;j<=4;j++) { gotoxy(i,j); cout<<" "; } gotoxy(1,1); cout<<"enter initial position ¯ "; } /////ClearText////void cleartext(){ for(int i=1;i<=27;i++) for(int j=1;j<=8;j++){ gotoxy(i,j); cout<<" "; } gotoxy(1,1); cout<<"enter initial position ¯ "; } /////Initialize//// void initialize(){ setcolor(WHITE); rectangle(250,90,610,450); // Board Printing for (int i=250;i<560;i+=90) for (int j=90;j<450;j+=90) { bar(i,j,i+45,j+45); bar(i+45,j+45,i+90,j+90); } //Asigning the Values in the empty spaces for(i=2;i<=5;i++) for(int j=0;j<=7;j++) board[i][j] = 0; for(int j=0;j<=7;j++) { board[0][j] = j+1; board[1][j] = j+9; //Pawns for player 1 board[7][j] = 0-(j+1); board[6][j] = 0-(j+9); //Pawns for player 2 } printboard(); setcolor(YELLOW); outtextxy(265,55,"A"); outtextxy(310,55,"B"); outtextxy(355,55,"C"); outtextxy(400,55,"D"); outtextxy(445,55,"E"); outtextxy(490,55,"F"); outtextxy(535,55,"G"); outtextxy(580,55,"H"); outtextxy(220,105,"1"); outtextxy(220,150,"2"); outtextxy(220,195,"3"); outtextxy(220,240,"4"); outtextxy(220,285,"5"); outtextxy(220,330,"6"); outtextxy(220,375,"7"); outtextxy(220,420,"8"); } ////HORSE////// int horse(int x,int y,int x1,int y1) { int a=0; if((y1==y+2 && x1==x+1)||(y1==y+2 && x1==x-1)||(y1==y+1 && x1==x+2)||(y1==y+1 && x1==x-2)||(y1==y-1 && x1==x+2)||(y1==y-1 && x1==x-2)||(y1==y-2 && x1==x+1)||(y1==y-2 && x1==x-1)){ a = 1; } return a; } /////KING//// int king(int x,int y,int x1,int y1) { int a = 0; if((y1==y+1 && x1==x)||(y1==y-1 && x1==x)||(y1==y+1 && x1==x+1)||(y1==y+1 && x1==x-1)||(y1==y-1 && x1==x+1)||(y1==y-1 && x1==x-1)||(y1==y && x1==x+1)||(y1==y && x1==x-1)){ a = 1; } /////CASTLING////// else if(board[y][x+1]==0&&board[y][x+2]==0&&(abs(board[y1][x1]) ==abs(board[y][x+3])==1||abs(board[y1][x1])== abs(board[y][x+3])==8)){ return 2; } if(a==1) { if(board[y][x]==5) count1=1; if(board[y][x]==-5) count2=1; } return a; } //////BISHOP///// int bishop(int x,int y,int x1,int y1) { int a=1,i; if(abs(x1-x)!=abs(y1-y)) { a=0; } if((x<x1)&&(y<y1)) { for(i=1;(i+x)<x1;i++) { if(board[y+i][x+i]!=0) a=0; } } else if((x>x1)&&(y>y1)){ for(i=1;(x-i)>x1;i++){ if(board[y-i][x-i]!=0) a=0; } } else if((x>x1)&&(y<y1)){ for(i=1;(x-i)>x1;i++){ if(board[y+i][x-i]!=0) a=0; } } else if((x<x1)&&(y>y1)){ for(i=1;(y-i)>y1;i++){ if(board[y-i][x+i]!=0) a=0; } } return a; } ////////QUEEN/////// int queen(int x,int y,int x1,int y1){ if(x==x1||y==y1){ //if queen moves in + direction return rook(x,y,x1,y1); } else if(abs(x1-x)==abs(y-y1)){ //if queen moves in diagnol direction return bishop(x,y,x1,y1); } else return 0; } ///ROOK//// int rook(int x,int y,int x1,int y1){ int a=1; if(y1==y) { for(int i=x+1;i<x1;i++) { if(board[y1][i]!=0) { a = 0; break; } } for(i=x-1;i>x1;i--) { if(board[y1][i]!=0) { a = 0; break; } } } else if(x1==x) { for(int i=y+1;i<y1;i++) { if(board[i][x1]!=0) { a = 0; break; } } for(i=y-1;i>y1;i--) { if(board[i][x1]!=0) { a = 0; break; } } } else { a=0; } return a; } ///PAWN///// int pawn(int x,int y,int x1,int y1){ int a=0; if(turn==0){ if(y==1){ if(y1==(y+2) && x1==x){ if(board[y1][x1]==0&&board[y+1][x]==0){ a = 1; } } } if(y1==y+1 && x1==x){ if(board[y1][x1]==0){ a = 1; } } else if(y1==(y+1) && (x1==(x+1)||x1==(x-1))){ if(board[y1][x1]<0){ a = 1; } } } else if(turn==1){ if(y==6){ if( y1==(y-2) && x1==x){ if(board[y1][x1]==0&&board[y-1][x]==0){ a = 1; } } } if( y1==(y-1) && x1==x){ if(board[y1][x1]==0){ a = 1; } } else if(y1==(y-1) && (x1==(x-1)||x1==(x+1))){ if(board[y1][x1]>0){ a = 1; } } } if(a==1) { if(turn==0) { if(y1==7) return 2; } else { if(y1==0) return 2; } } return a; } ////////Check//////// void check() { int t=0,i,j,x1,y1; if(turn==0){ for(i=0;i<=7;i++) { for(j=0;j<=7;j++) { if(board[i][j]==-5) { y1=i; x1=j; break; } } } for(j=0;j<=7;j++){ for(i=0;i<=7;i++){ if (t==1){ setcolor(9); rectangle(20,335,100,365); outtextxy(30,340,"Check"); break; } if(board[j][i]>=9 && board[j][i]<=16) t = pawn(i,j,x1,y1); else if(board[j][i]==2 || board[j][i]==7) t = horse(i,j,x1,y1); else if(board[j][i]==4) t = queen(i,j,x1,y1); else if(board[j][i]==1 || board[j][i]==8) t = rook(i,j,x1,y1); else if(board[j][i]==3 || board[j][i]==6) t = bishop(i,j,x1,y1); }// for }// for }//endif turn else { for(i=0;i<=7;i++){ for(j=0;j<=7;j++){ if(board[i][j]==5){ y1=i; x1=j; break; } } } for(j=0;j<=7;j++){ for(i=0;i<=7;i++){ if (t==1){ setcolor(GREEN); rectangle(20,335,100,365); outtextxy(30,340,"Check"); break; } if(board[j][i]>=(-9) && board[j][i]<=(-16)) t = pawn(i,j,x1,y1); else if(board[j][i]==(-2) || board[j][i]==(-7)) t = horse(i,j,x1,y1); else if(board[j][i]==(-4)) t = queen(i,j,x1,y1); else if(board[j][i]==(-1) || board[j][i]==(-8)) t = rook(i,j,x1,y1); else if(board[j][i]==(-3) || board[j][i]==(-6)) t = bishop(i,j,x1,y1); }// for }// for }// end else } //////GAME OVER///// int gameover(){ int i,j,a=0,b=0; for(i=0;i<=7;i++) { for(j=0;j<=7;j++) { if(board[i][j]==5) b=1; if(board[i][j]==-5) a=1; } } if(b==0) { setcolor(12); outtextxy(30,340,"Game Over"); setcolor(GREEN); outtextxy(30,300,"Player 1 Loses"); getch(); return 0; } else if(a==0) { setcolor(9); outtextxy(30,340,"Game Over"); outtextxy(30,300,"Player 2 Loses"); getch(); return 0; } return 1; }

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote