本文目錄一覽:
c語言編程題 關於國際象棋的問題
我幫你想算法,如果你寫不出來……我建議你再好好看書,要不然就放棄學這個吧……
王:計算起始與目標位置的縱坐標之差和橫坐標之差,取較大值即為步數;
後:判斷起始與目標位置如果在同一行、同一列或者同一斜線,如果是則步數為1,如果不是則為2;
車:判斷起始與目標位置是否在同一行或者同一列,是則為1,否則為2;
象:稍微複雜,先判斷是否在同色格(顏色可以通過縱橫坐標之和的奇偶性判斷),如果否,則輸出Inf;如果是,則判斷起始與目標位置是否在同一斜線,是則為1,否為2。
以上,如果不明白或者需要解釋原因請補充或者hi我。
p.s.怎麼沒有馬呢……那個比較有挑戰性……
c語言國際象棋等比求解
c語言國際象棋等比求解解答如下:
/*象棋盤:”1″代表黑格,””代表白格*/
#includeintmain(){
for(inti=1;ifor(intj=1;jif((i+j)%2==0)//當行數+列數為偶數時打印“1”printf(“1”);
elseprintf(“”);//當行數+列數為奇數時打印“”
printf(“\n”);
returno;
等比數列是指從第二項起,每一項與它的前一項的比值等於同一個常數的一種數列,常用G、P表示。這個常數叫做等比數列的公比,公比通常用字母q表示(q≠0),等比數列a1≠0。其中{an}中的每一項均不為0。註:q=1時,an為常數列。
棋盤為正方形,由64個黑白(深色與淺色)相間的格子組成;棋子分黑白(深色與淺色)兩方共32枚,每方各16枚。雖然漢語稱之為西洋棋或國際象棋,但是實際上它起源於亞洲,後由阿拉伯人傳入歐洲,成為國際通行棋種,也是一項智力競技運動,曾一度被列為奧林匹克運動會正式比賽項目。
C語言,中國象棋 馬走日 問題,求解,急!!!
本着樂於助人以及自我鍛煉的原則,幫樓主敲了敲代碼,還有疑問的話請追問。
#include stdio.h
#include memory.h
typedef struct
{
int x, y;
}item;
item move[4] = {{-2,1}, {-1,2}, {1,2}, {2,1}};
int map[5][9], sx, sy;
//判斷是否在地圖中,防止越界
int checkIn(int x, int y)
{
if(x = 0 x = 4 y = 0 y = 8)
return 1;
return 0;
}
//輸出最終結果
void output()
{
int i, j;
for(i = 0; i = 4; i++)
{
for(j = 0; j = 8; j++)
printf(“%d “,map[i][j]);
putchar(‘\n’);
}
printf(“共計%d步。”, map[0][8]);
}
//從x y開始尋找能否到達終點,能返回1,不能返回0,step表示當前的步數。
int findPath(int x, int y, int step)
{
int i;
map[x][y] = step;
//終點
if(x == 0 y == 8)
{
output();
return 1;
}
//向右邊4個方向前進
for(i = 0; i 4; i++)
if(checkIn(x+move[i].x, y+move[i].y))
if(findPath(x+move[i].x, y+move[i].y, step+1) == 1)
return 1;
//四個方向均無法到達終點,回溯並返回0
map[x][y] = 0;
return 0;
}
int main(int argc, char ** argv)
{
memset(map, 0, sizeof(map));
printf(“請輸入起點x,y\n”);
scanf(“%d,%d”, sx, sy);
findPath(sx, sy, 1);
return 0;
}
急需用c語言寫中國象棋的代碼,只要紅色方布局和走棋
接上面中國象棋代碼:
if( check_turn == 12) //相的走法規範
{ if((x == check_x y == check_y))
{temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500);
}
else if( x = 15 (abs(y – check_y) == 8 abs(x – check_x) == 4))
{if((x == 22 (y == 11 || y == 27))||(x == 18
( y == 3 || y == 19 || y == 35)) ||(x == 14 (y == 11|| y ==27)))
{ if( map[(x+check_x)/2][(y+check_y)/2] == ‘+’) check_main1(temp,temp1,turn,turn1,num,if_return,map);
else {printf(“棋子卡住,不可執行”); Sleep(500); } }
else {printf(“不合法的下法\n”);Sleep(500); }
}
else {printf(“不合法的下法\n”); Sleep(500); }
}
if( check_turn == 13) //士的走法規範
{ if((x == check_x y == check_y))
{temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( abs(x – check_x)== 2 abs( y – check_y) == 4 ((x==22 (y == 15
|| y == 23)) || ( x == 20 y == 19) || ( x == 18 ( y == 15 || y == 23)))) {check_main1(temp,temp1,turn,turn1,num,if_return,map); }
else { printf(“不合法的下法\n”); Sleep(500); } }
if( check_turn == 14) //將的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( ((abs(x – check_x)== 2 abs( y – check_y) == 0 )|| (abs(x – check_x)== 0
abs( y – check_y) == 4)) x = 18 x = 22 y = 15 y = 23 )
{ check_main1(temp,temp1,turn,turn1,num,if_return,map); }
else { printf(“不合法的下法\n”); Sleep(500); } }
if( check_turn == 15) //炮的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( y == check_y )
{ int check_pao = 0;
if( x check_x)
{ for(j = check_x + 2; j= x ;j = j+ 2)
{ if(map[j][y] == ‘+’ ); else check_pao++;}
if(check_pao == 1 temp == ‘+’) // 直線行走但不可吃棋子 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); } }
else { for(j = check_x – 2; j= x;j = j – 2)
{ if(map[j][y] == ‘+’ ); else { check_pao++;} }
if(check_pao == 1 temp == ‘+’) //直線行走但不可吃棋子 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); } }
}
else if( x == check_x )
{ int check_pao = 0;
if( y check_y)
{ for(j = check_y + 4; j= y ;j = j+4)
{ if(map[x][j] == ‘+’ ); else check_pao++;}
if(check_pao == 1 temp == ‘+’) //直線行走但不可吃棋子 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); } }
else {for(j = check_y – 4; j= y;j = j – 4)
{if(map[x][j] == ‘+’ ); else check_pao++;}
if(check_pao == 1 temp == ‘+’) //直線行走但不可吃棋子 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); } }
}
else { printf(“不合法的下法\n”);Sleep(500); }
}
if( check_turn == 16) //卒的走法規範
{ if ( x = 14)
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( x == check_x – 2 y == check_y) check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); }
}
else{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if((x – check_x == 0 abs(y-check_y) ==4) ||( x – check_x == -2
abs(y-check_y) == 0)) check_main1(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”); Sleep(500); } }
}
}
else { if( check_turn == 20) //車的走法規範 (帥方)
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( y == check_y )
{ if( x check_x)
{ for(j = check_x + 2; j x;j = j + 2)
{ if(map[j][y] == ‘+’); else {printf(“不合法的下法\n”); Sleep(500); break; } }
if( j = x) check_main2(temp,temp1,turn,turn1,num,if_return,map);
}
if( x check_x)
{ for(j = check_x – 2; j x;j = j – 2)
{ if(map[j][y] == ‘+’); else { printf(“不合法的下法\n”); Sleep(500); break; } }
if( j = x) check_main2(temp,temp1,turn,turn1,num,if_return,map);
}
}
else if( x == check_x )
{ if( y check_y)
{ for(j = check_y + 4; j y;j = j + 4)
{ if(map[x][j] == ‘+’); else { printf(“不合法的下法\n”); Sleep(500); break; } }
if( j = y) check_main2(temp,temp1,turn,turn1,num,if_return,map);
}
if( y check_y)
{ for(j = check_y – 4; j y;j = j – 4)
{ if(map[x][j] == ‘+’); else { printf(“不合法的下法\n”);Sleep(500); break; } }
if( j = y) check_main2(temp,temp1,turn,turn1,num,if_return,map);
}
}
else { printf(“不合法的下法\n”); Sleep(500); }
}
if( check_turn == 21) //馬的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if( (abs( x – check_x) == 2 abs( y – check_y) == 8)
map[check_x][(y+check_y)/2] ==’+’)
{ check_main2(temp,temp1,turn,turn1,num,if_return,map); }
else if( (abs( x – check_x) == 4 abs( y – check_y) == 4)
map[(x + check_x)/2][check_y] == ‘+’ )
{ check_main2(temp,temp1,turn,turn1,num,if_return,map); }
else { printf(“不合法的下法\n”);Sleep(500); } }
if( check_turn == 22) //相的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if( x = 12 (abs(y – check_y) == 8 abs(x – check_x) == 4))
{ if((x == 4 (y == 11 || y == 27))||(x == 8 ( y == 3 || y == 19 || y == 35))
||(x == 12 (y == 11|| y ==27)))
{ if( map[(x+check_x)/2][(y+check_y)/2] == ‘+’) check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“棋子卡住,不可執行”);Sleep(500); } }
else {printf(“不合法的下法\n”);Sleep(500); }
}
else { printf(“不合法的下法\n”);Sleep(500); } }
if( check_turn == 23) //士的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if( abs(x – check_x)== 2 abs( y – check_y) == 4 ((x==4
(y == 15 || y == 23)) || ( x == 6 y == 19) || ( x == 8 ( y == 15 || y == 23))))
{ check_main2(temp,temp1,turn,turn1,num,if_return,map); }
else { printf(“不合法的下法\n”);Sleep(500); } }
if( check_turn == 24) //將的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if( ((abs(x – check_x)== 2 abs( y – check_y) == 0 )|| (abs(x – check_x)== 0 abs( y – check_y) == 4)) x = 4 x = 8 y = 15 y = 23 )
{ check_main2(temp,temp1,turn,turn1,num,if_return,map); }
else {printf(“不合法的下法\n”);Sleep(500); } }
if( check_turn == 25) //炮的走法規範
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if( y == check_y )
{ int check_pao = 0;
if( x check_x)
{ for(j = check_x + 2; j= x ;j = j+ 2)
{ if(map[j][y] == ‘+’ ); else check_pao++;}
if(check_pao == 1 temp == ‘+’) //直線行走但不可吃棋子 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
else { for(j = check_x – 2; j= x;j = j – 2)
{ if(map[j][y] == ‘+’ ); else { check_pao++;} }
if(check_pao == 1 temp== ‘+’) //直線行走但不可吃棋子 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
}
else if( x == check_x )
{ int check_pao = 0;
if( y check_y)
{ for(j = check_y + 4; j= y ;j = j+4)
{ if(map[x][j] == ‘+’ ); else check_pao++;}
if(check_pao == 1 temp == ‘+’) //直線行走但不可吃棋 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
else { for(j = check_y – 4 ; j= y;j = j – 4)
{ if(map[x][j] == ‘+’ ); else check_pao++;}
if(check_pao ==1 temp == ‘+’) //直線行走但不可吃棋子 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else if( check_pao == 2 temp != ‘+’) //跳躍吃棋 check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
}
else { printf(“不合法的下法\n”);Sleep(500); }
}
if( check_turn == 26) //卒的走法規範
{ if( x = 12)
{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”); printf(“還是你的回合”); Sleep(500); }
else if( x == check_x + 2 y == check_y) check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
else{ if((x == check_x y == check_y))
{ temp = turn; temp1 = turn1; turn = ‘O’; turn1 = ‘N’; num–;
printf(“三思而後行\n”);printf(“還是你的回合”); Sleep(500); }
else if((x – check_x == 0 abs(y-check_y) ==4) ||( x – check_x == 2
abs(y-check_y) == 0)) check_main2(temp,temp1,turn,turn1,num,if_return,map);
else { printf(“不合法的下法\n”);Sleep(500); } }
}
}
}
}
system(“cls”);
if( if_return) return;
for(i = 0; i 27; i++)puts(map[i]);
}
Sleep(5000);
}
int main( )
{ while(1)
{ xiangqi( );
printf(“\n 重來,請按鍵.\n”);
getch( );
}
return 0;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/241813.html