Example #1
4
//check
void check(){
	int t1=0,t2=0,i,j,x1,y1,z1=0,z2=0;
	checkm arr[30];
		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 (t1==1){
				}
				if(board[j][i]>=9 && board[j][i]<=16){
					flipturn();
					t1 = pawn(j,i,y1,x1);flipturn();
		//add position of pawn to a list
					if(t1==1){
						arr[z1].y=j;arr[z1].x=i;arr[z1].piece=board[j][i];z1++;
					}
				}
				else if(board[j][i]==2 || board[j][i]==7){
					t1 = horse(j,i,y1,x1);
					if(t1==1){
					arr[z1].y=j;arr[z1].x=i;arr[z1].piece=board[j][i];z1++;
					}
				}
				else if(board[j][i]==4){
					t1 = queen(j,i,y1,x1);
					if(t1==1){
					arr[z1].y=j;arr[z1].x=i;arr[z1].piece=board[j][i];z1++;
					}
				}
				else if(board[j][i]==1 || board[j][i]==8){
					t1 = rook(j,i,y1,x1);
					if(t1==1){
						arr[z1].y=j;arr[z1].x=i;arr[z1].piece=board[j][i];z1++;
					}
				}
				else if(board[j][i]==3 || board[j][i]==6){
					t1 = bishop(j,i,y1,x1);
					if(t1==1){
						arr[z1].y=j;arr[z1].x=i;arr[z1].piece=board[j][i];z1++;
					}
				}
			 }
		}
		if(z1!=0){
			mvwprintw(chessboard,1,25,"Player 1 in CHECK");wrefresh(chessboard);
			if(turn!=0)
				checkmate(y1,x1,&arr,z1);
			else{
				mvwprintw(chessboard,2,30,"                   ");wrefresh(chessboard);
			}
		}
		z2=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 (t2==1){	
				}
				if(board[j][i]>=(-9) && board[j][i]<=(-16)){
					flipturn();
					t2 = pawn(j,i,y1,x1);flipturn();
					if(t2==1){
							arr[z2].y=j;arr[z2].x=i;arr[z2].piece=board[j][i];z2++;
					}
				}
				else if(board[j][i]==(-2) || board[j][i]==(-7)){
					t2= horse(j,i,y1,x1);
					if(t2==1){
						arr[z2].y=j;arr[z2].x=i;arr[z2].piece=board[j][i];z2++;
					}
				}
				else if(board[j][i]==(-4)){
					t2 = queen(j,i,y1,x1);
					if(t2==1){
						arr[z2].y=j;arr[z2].x=i;arr[z2].piece=board[j][i];z2++;
					}
				}
				else if(board[j][i]==(-1) || board[j][i]==(-8)){
					t2 = rook(j,i,y1,x1);
					if(t2==1){
						arr[z2].y=j;arr[z2].x=i;arr[z2].piece=board[j][i];z2++;
					}
				}
				else if(board[j][i]==(-3) || board[j][i]==(-6)){
					t2 = bishop(j,i,y1,x1);
					if(t2==1){
						arr[z2].y=j;arr[z2].x=i;arr[z2].piece=board[j][i];z2++;
					}
				} 
			}
		}
		wrefresh(chessboard);
		if(z2!=0){	
			mvwprintw(chessboard,1,25,"Player 2 in CHECK");wrefresh(chessboard);
			if(turn==0)
				checkmate(y1,x1,&arr,z2);
			else{
				mvwprintw(chessboard,2,30,"                   ");wrefresh(chessboard);
			}
		}
		if(z1==0&&z2==0) 
			mvwprintw(chessboard,2,25,"                 ");wrefresh(chessboard);
}
Example #2
0
int friendlymove(int row,int col){
	int t2,t1,j,i;
	if(turn!=0){
		for(j=0;j<=7;j++){
			for(i=0;i<=7;i++){
				if (t2==1){	
					break;
				}
				if(board[j][i]>=(-9) && board[j][i]<=(-16)){
					flipturn();
					t2 = pawn(j,i,row,col);
					flipturn();
				} 
				else if(board[j][i]==(-2) || board[j][i]==(-7)){
					t2= horse(j,i,row,col);
				}
				else if(board[j][i]==(-4)){
					t2 = queen(j,i,row,col);
				}
				else if(board[j][i]==(-1) || board[j][i]==(-8))
					t2 = rook(j,i,row,col);
				else if(board[j][i]==(-3) || board[j][i]==(-6)){
						t2 = bishop(j,i,row,col);
				}
			}
		}
		if(t2==1)
			return 1;
		else 
			return 0;
	}
	if(turn==0){
		for(j=0;j<=7;j++){
			for(i=0;i<=7;i++){
				if (t2==1){	
						break;
				}
				if(board[j][i]>=(9) && board[j][i]<=(16)){
					flipturn();
					t2 = pawn(j,i,row,col);
					flipturn();
				} 
				else if(board[j][i]==(2) || board[j][i]==(7))
					t2= horse(j,i,row,col);
				else if(board[j][i]==(4)){
						t2 = queen(j,i,row,col);
				}
				else if(board[j][i]==(1) || board[j][i]==(8))
						t2 = rook(j,i,row,col);
				else if(board[j][i]==(3) || board[j][i]==(6)){
						t2 = bishop(j,i,row,col);
				}
			}
		}
		if(t2==1)
			return 1;
		else 
			return 0;
	}
}
Example #3
0
int main() {
    int n, i, j;
    while (scanf("%d", &n), n != -1) {
        now = 0;
        memset(h, 0, sizeof(h));
        memset(st, 0, sizeof(st));
        i = (n - 1) / 6;
        j = (n - 1) % 6;
        horse(i, j, now);
        printf("%d", st[0]);
        for (i = 1; i < 30; i++)
            printf(" %d", st[i]);
        printf("\n");
    }
    return 0;
}                                 
Example #4
0
void horse(int i, int j, int now) {
    int goi, goj;
    h[i][j] = 1;
    st[now] = i * 6 + j + 1;
    if (now == 29)
        return;
    for (int k = 0; k < 16; k += 2) {
        goi = i + go[k];
        goj = j + go[k + 1];
        if (goi >= 0 && goi <= 4 && goj >= 0 && goj <= 5 && h[goi][goj] == 0)
            horse(goi, goj, now + 1);
    }
    if (st[now + 1] == 0) {
        st[now] = 0;
        h[i][j] = 0;
    }
    return;
}
Example #5
0
/*check where the king can move
if the king can move to a place will he be in check?
if yes continue to check other conditions 
else no checkmate*/
int checkmate(int row,int col,checkm arr[],int q)
{
	int ccount,valid,i,j,x,y,z,t=0,possible=0,n=0;
	y=row-1;
	x=col-1;
	while(x<0){
		x++;
	}	
	while(y<0)
		y++;
	if(turn!=0){
		while((y<=row+1)&&(x<=col+1)){
			valid=king(row,col,y,x);
			if((turn!=0)&&board[y][x]<0 || (x==8 || y==8)){
				valid=0;
				wprintw(menuwin,"   invalid turn 1");wrefresh(menuwin);
			}
			if(valid){	
				t=0;
				for(j=0;j<=7;j++){
					for(i=0;i<=7;i++){
							if(t==1){
								break;
							}
							if(board[j][i]>=9 && board[j][i]<=16)
								t = pawn(j,i,y,x);
							else if(board[j][i]==2 || board[j][i]==7)
								t = horse(j,i,y,x);
							else if(board[j][i]==4)
								t = queen(j,i,y,x);
							else if(board[j][i]==1 || board[j][i]==8)
								t = rook(j,i,y,x);
							else if(board[j][i]==3 || board[j][i]==6)
								t = bishop(j,i,y,x);
					}
				}
				if(t==1){
					ccount++;
				}
				else if(t==0){ 
					possible++;
				}
			}		
			else{
				ccount++;
			}
			if(y==row+1){
				x++;
			}
			if(y<row+1){
				y++;
			}
		}
		if(possible!=0){
			return;
		}
		for(z=0;z<q;z++)
		{	x=arr[z].x;y=arr[z].y;
			switch(abs(arr[z].piece))
			{	
				case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:break;
				case 4:if(arr[z].y-row==arr[z].x-col)
						goto c3;
						//go to bishop case 
						if(arr[z].y==row||arr[z].x==col)
						//go to rook case
				case 1:case 8://rook
						if(row==arr[z].y) {
							for(i=arr[z].x+1;i<col;i++) { 
								if(board[row][i]==0) { 
									if(friendlymove(row,i)){
										possible++;goto end;}
								}
							}
							for(i=arr[z].x-1;i>col;i--) { 
								if(board[row][i]==0) {
									if(friendlymove(row,i)){
										possible++;goto end;}
								}
							}
						}
						else if(col==arr[x].x) { 
							for(i=arr[z].y+1;i<row;i++) {
								if(board[i][col]==0) {
									if(friendlymove(i,col)){
										possible++;goto end;}
								}
							}
							for(i=arr[z].y-1;i>col;i--) {
								if(board[i][col]==0) {
									if(friendlymove(i,col)){
										possible++;goto end;}
								}
							}
						}
						break;
						//generate mid way blocks and check if friendly piece can move in
				case 2:case 7://horse
				c3:case 3:case 6: //bishop
						if((x<col)&&(y<row)) { 
							for(i=1;(i+x)<col;i++) {
								if(board[y+i][x+i]==0) {
									if(friendlymove(y+i,x+i)){
										possible++;goto end;}
								}
							}
						}
						else if((x>col)&&(y>row)){ 
							for(i=1;(x-i)>col;i++){
								if(board[y-i][x-i]==0)
									if(friendlymove(y-i,x-i)){
										possible++;goto end;}
							}
						}
						else if((x>col)&&(y<row)){
							for(i=1;(x-i)>col;i++){ 
								if(board[y+i][x-i]==0) 
									if(friendlymove(y+i,x-i)){
										possible++;goto end;}
							} 
						}
						else if((x<col)&&(y>row)){
							for(i=1;(y-i)>row;i++){
								if(board[y-i][x+i]==0)
									if(friendlymove(y-i,x+i)){
										possible++;goto end;}
							}	
						}
						break;
			}
		}
	    	end:if(possible==0){
			mvwprintw(chessboard,2,30," player 1 CHECKMATE");wrefresh(chessboard);
		}
		else{	
			mvwprintw(chessboard,2,30,"                   ");wrefresh(chessboard);
		}
	}
	else if(turn==0){
		while((y<=row+1)&&(x<=col+1)){
			valid=king(row,col,y,x);
			if((turn==0)&&board[y][x]>0){
				valid=0;
			}
			if(valid){	
				t=0;
				for(j=0;j<=7;j++){
					for(i=0;i<=7;i++){
						if(t==1)
							break;
						if(board[j][i]>=-9 && board[j][i]<=-16)
							t = pawn(j,i,y,x);
						else if(board[j][i]==-2 || board[j][i]==-7)
							t = horse(j,i,y,x);
						else if(board[j][i]==-4)
							t = queen(j,i,y,x);
						else if(board[j][i]==-1 || board[j][i]==-8)
							t = rook(j,i,y,x);
						else if(board[j][i]==-3 || board[j][i]==-6)
							t = bishop(j,i,y,x);
					}
				}
				if(t==1){
					ccount++;
					}
				else if(t==0) {
					possible++;
				}
			}
			else {
				ccount++;
			}	
			if(y==row+1){
				x++;
			}
			if(y<row+1){
				y++;
			}
		}
		if(possible!=0)
			return;
		for(z=0;z<=q;z++)
		{	x=arr[z].x;y=arr[z].y;
			switch(arr[z].piece)
			{	
				case -9:case -10:case -11:case -12:case -13:case -14:case -15:case -16:break;
				case -4:if(arr[z].y-row==arr[z].x-col)
						goto c4;
						//go to bishop case 
					if(arr[z].y==row||arr[z].x==col)
					//go to rook case
				case -1:case -8://rook
					if(row==arr[z].y) {
							for(i=arr[z].x+1;i<col;i++){ 
								if(board[row][i]==0){ 
									if(friendlymove(row,i)){
										possible++;goto end;}
								}
							}
							for(i=arr[z].x-1;i>col;i--) { 
								if(board[row][i]==0) {
									if(friendlymove(row,i)){
										possible++;goto end;}
								}
							}
						}
						else if(col==arr[x].x) { 
							for(i=arr[z].y+1;i<row;i++) {
								if(board[i][col]==0) {
									if(friendlymove(i,col)){
										possible++;goto end;}
								}
							}
							for(i=arr[z].y-1;i>col;i--) {
								if(board[i][col]==0) {
									if(friendlymove(i,col)){
										possible++;goto end;}
								}
							}
						}
						break;
						//generate mid way blocks and check if friendly piece can move in
				case -2:case -7://horse
				c4:case -3:case -6: //bishop
						if((x<col)&&(y<row)) { 
								for(i=1;(i+x)<col;i++) {
									if(board[y+i][x+i]==0) {
										if(friendlymove(y+i,x+i)){
										possible++;goto end2;}
									}
								}
							}
							else if((x>col)&&(y>row)){ 
								for(i=1;(x-i)>col;i++){
									if(board[y-i][x-i]==0)
										if(friendlymove(y-i,x-i)){
										possible++;goto end2;}
								}
							}
							else if((x>col)&&(y<row)){
								for(i=1;(x-i)>col;i++){ 
									if(board[y+i][x-i]==0) 
										if(friendlymove(y+i,x-i)){
										possible++;goto end2;}
								} 
							}
							else if((x<col)&&(y>row)){
								for(i=1;(y-i)>row;i++){
									if(board[y-i][x+i]==0)
										if(friendlymove(y-i,x+i)){
										possible++;goto end2;}
								}	
							}
							break;
			}
		}
	    
		end2:if(possible==0){
			mvwprintw(chessboard,2,30," player 2 CHECKMATE");wrefresh(chessboard);
		}
		else{
				mvwprintw(chessboard,2,30,"                   ");wrefresh(chessboard);
		}
	}	
}
Example #6
0
//during the game
//when u get the coordinates of the click
void game(int x, int y){
	MEVENT ev;
	bpos *m;
	bool a;
	m=malloc(sizeof(bpos));
	int b,c,fx,fy;
	if(board[x][y]==0) {
		wrongstart();
	}
	else {
		if(turn==0) {
			if(board[x][y]<0) {
				wrongstart();
			}
		}
		else if(turn!=0){
			if(board[x][y]>0){
				wrongstart();
			}
		}
	}
	//then the user should click in the final position and we need to find the corresponding box
	c = wgetch(chessboard);
	c = wgetch(chessboard);
	wrefresh(menuwin);
	switch(c)
	{
		case KEY_MOUSE:
			if(getmouse(&ev) == OK){
				if(ev.bstate & BUTTON1_PRESSED){
					fy=ev.y;fx=ev.x;
					m=position(fx,fy);
					fy=m->col;
					fx=m->row;
					if(!((m->row+1)*(m->col+1))){
						mvwprintw(menuwin,10,10,"not valid click again ");
						wrefresh(menuwin);return;
					}
					if((turn==0)&&(board[fx][fy]<0)){
						mvwprintw(menuwin,2,6,"choose num 2 ");
					}
					else if((turn!=0)&&(board[fx][fy]>0)){
						mvwprintw(menuwin,2,6,"choose num1");
					}
					wrefresh(menuwin);
					switch(abs(board[x][y])) {
						case 9:case 10:case 11:case 12:case 13:case 14:case 15:case 16:
									b=pawn(x,y,fx,fy);
									break;
							case 2: case 7: b=horse(x,y,fx,fy);
								break;
							case 4: b=queen(x,y,fx,fy);
								break;
							case 3:case 6:b=bishop(x,y,fx,fy);
								break;
							case 1:case 8: b=rook(x,y,fx,fy);
								break;
							case 5: b=king(x,y,fx,fy);
								break;
						}
						if(b==1){
							if((turn==0)&&board[x][y]<0)
								{return;}
							else if((turn!=0)&&board[x][y]>0)
								{return;}
							if((turn==0)&&board[fx][fy]>0)
								{return;}
							else if((turn!=0)&&board[fx][fy]<0)
								{return;}
							if((board[fx][fy]>0)&&(turn!=0)){
								karr[count]=board[fx][fy];count++;printelement();
							}
							else if((board[fx][fy]<0)&&(turn==0)){
								karr[count]=board[fx][fy];count++;printelement();
							}		
							wrefresh(menuwin);move1.prevval=board[fx][fy];
							move1.newval=board[x][y];
							movepiece(x,y,fx,fy);wrefresh(menuwin);
							move1.srow=x;move1.scol=y;move1.erow=fx;move1.ecol=fy;
							push(&s,move1);
							flipturn();check();
							display_menu();
						}
				}
			}
	}
}