移动有问题:
#include<bits/stdc++.h>
using namespace std;
string muqian="red";
bool hefa;
struct maps{
string co,qi;
}mp[20][30];
void init(){
char kklklkll[10][20]={
"rrrrrrrrr",
" ",
"r r",
"r r r r r",
" ",
" ",
"b b b b b",
"b b",
" ",
"bbbbbbbbb"
};
char kfcmdl[10][20]={
"123454321",
" ",
"6 6",
"7 7 7 7 7",
" ",
" ",
"7 7 7 7 7",
"6 6",
" ",
"123454321"
};
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(kklklkll[i][j]=='r'){
mp[i][j].co="red";
}else if(kklklkll[i][j]=='b')mp[i][j].co="blue";
}
}
for(int i=0;i<10;i++){
for(int j=0;j<9;j++){
if(kfcmdl[i][j]=='1')mp[i][j].qi="car";
if(kfcmdl[i][j]=='2')mp[i][j].qi="horse";
if(kfcmdl[i][j]=='3')mp[i][j].qi="elephant";
if(kfcmdl[i][j]=='4')mp[i][j].qi="guard";
if(kfcmdl[i][j]=='5')mp[i][j].qi="captain";
if(kfcmdl[i][j]=='6')mp[i][j].qi="duck";
if(kfcmdl[i][j]=='7')mp[i][j].qi="soldier";
}
}
}
bool kong(int sas,int sbs)
{
return mp[sas][sbs].co=="";
}
void yidong(int sx,int sy,int tx,int ty){
if(mp[sx][sy].qi=="captain"){//王
if(sx-tx==1&&sy-ty==0||sx-tx==-1&&sy-ty==0||sx-tx==0&&sy-ty==1||sx-tx==0&&sy-ty==-1){
mp[tx][ty]=mp[sx][sy];
mp[sx][sy].co=mp[tx][ty].qi="";
}else hefa=1;
return;
}
if(mp[sx][sy].qi=="car"){
hefa=1;
}
if(mp[sx][sy].qi=="guard"){//士
if(sx-tx==1&&sy-ty==1||sx-tx==-1&&sy-ty==1||sx-tx==-1&&sy-ty==-1||sx-tx==1&&sy-ty==-1){
mp[tx][ty]=mp[sx][sy];
mp[sx][sy].co=mp[tx][ty].qi="";
}else hefa=1;
return;
}
if(mp[sx][sy].qi=="horse"){
bool sfhy=0;
for(int i=-1;i<=1;i+=2){
for(int j=-1;j<=1;j+=2){
if(tx==sx+i&&ty==sy+j*2&&kong(sx,sy+j))sfhy=1;
if(tx==sx+i*2&&ty==sy+j&&kong(sx+i,sy))sfhy=1;
}
}
if(sfhy){
mp[tx][ty]=mp[sx][sy];
mp[sx][sy].co=mp[tx][ty].qi="";
}
if(!sfhy)hefa=1;
return;
}
if(mp[sx][sy].qi=="duck"){//鸭子
bool sfhy=0;
for(int i=-1;i<=1;i+=2){
for(int j=-1;j<=1;j+=2){
if(tx==sx+i*3&&ty==sy+j*2&&kong(sx+i*2,sy+j)&&kong(sx+i,sy))sfhy=1;
if(tx==sx+i*2&&ty==sy+j*3&&kong(sx+i,sy+j*2)&&kong(sx,sy+j))sfhy=1;
}
}
if(sfhy){
mp[tx][ty]=mp[sx][sy];
mp[sx][sy].co=mp[tx][ty].qi="";
}
if(!sfhy)hefa=1;
return;
}
if(mp[sx][sy].qi=="soldier"){//兵
if(abs(sx-tx)<=1&&abs(ty-sy)<=1) {
mp[tx][ty]=mp[sx][sy];
mp[sx][sy].co=mp[tx][ty].qi="";
}else hefa=1;
return;
}
}
bool jiangjun(){
}
bool jieshu(){
return 0;
}
int main(){
int bushushizheyangde;
bool shifouyijingjieshu=0;
for(int i=0;i<=9;i++){
for(int j=0;j<=8;j++){
mp[i][j].co=mp[i][j].qi="";
}
}
init();
cin>>bushushizheyangde;
while(bushushizheyangde--){
if(shifouyijingjieshu){cout<<"Invalid command\n";continue;}
int xxxxx1,yyyyy1,xxxxx2,yyyyy2;
hefa=0;
cin>>xxxxx1>>yyyyy1>>xxxxx2>>yyyyy2;
if(mp[xxxxx1][yyyyy1].co!=muqian||mp[xxxxx2][yyyyy2].co==muqian){
cout<<"Invalid command\n";
continue;
}
string qishiqizi=mp[xxxxx1][yyyyy1].co+" "+mp[xxxxx1][yyyyy1].qi;
string zhongdianqizi=mp[xxxxx2][yyyyy2].co+" "+mp[xxxxx2][yyyyy2].qi;
yidong(xxxxx1,yyyyy1,xxxxx2,yyyyy2);
if(hefa){
cout<<"Invalid command\n";
continue;
}else {
if(muqian=="blue")muqian="red";
else if(muqian=="red") muqian="blue";
cout<<qishiqizi<<":"<<(zhongdianqizi==" "?"NA":zhongdianqizi)<<":";
if(jiangjun()){
cout<<"yes:";
}else cout<<"no:";
if(jieshu()){
cout<<"yes\n";
shifouyijingjieshu=1;
}else cout<<"no\n";
}
}
return 0;
}