C++国际象棋 (有王车易位)

博主表示自己的C++游戏程序存在一些小bug,希望有人能在评论区指出并修改,博主会非常感谢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<Windows.h>
#include<iostream>
#include<string>
#define K(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void color(int ForgC, int BackC) {
	WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int map[9][9]= {
	{-1,-1,-1,-1,-1,-1,-1,-1,-1},
	{-1,2,4,3,5,6,3,4,2},
	{-1,1,1,1,1,1,1,1,1},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,1,1,1,1,1,1,1,1},
	{-1,2,4,3,5,6,3,4,2}
},
Pl[9][9]= {
	{-1,-1,-1,-1,-1,-1,-1,-1,-1},
	{-1,2,2,2,2,2,2,2,2},
	{-1,2,2,2,2,2,2,2,2},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,0,0,0,0,0,0,0,0},
	{-1,1,1,1,1,1,1,1,1},
	{-1,1,1,1,1,1,1,1,1}
};
int Can[9][9],whcan[9][9],blcan[9][9];
char C[7]= {'0','P','R','B','N','Q','K'};
int P=1,x=4,y=4,T,Sx=-1,Sy=-1,wh_Kx=5,wh_Ky=8,bl_Kx=5,bl_Ky=1,KK=0,bol;
int Chck[9][9],Chx=-1,Chy=-1;
bool blr1=1,blr2=1,whr1=1,whr2=1;
string String,Say;

string Point(int x,int y) {
	if(x==-1 && y==-1)return "_";
	string ans="";
	ans=ans+((char)('a'+x-1));
	ans=ans+(char)('0'+9-y);
	return ans;
}

void Chge_Kg_Rk(int kx,int ky,int c){
	if(c==1 && wh_Kx==5 && wh_Ky==8){
		if(whr1 && !(map[8][4]||map[8][3]||map[8][2]))Can[8][1]=4+(blcan[8][1]!=0);
		if(whr2 && !(map[8][6]||map[8][7]))Can[8][8]=4+(blcan[8][8]!=0);
	}
	else if(c==2 && bl_Kx==5 && bl_Ky==1){
		if(blr1 && !(map[1][4]||map[1][3]||map[1][2]))Can[1][1]=4+(blcan[1][1]!=0);
		if(blr2 && !(map[1][6]||map[1][7]))Can[1][8]=4+(blcan[1][8]!=0);
	}
}

void Mv_Pawn(int x,int y,int ch) {
	memset(Can,0,sizeof(Can));
	int c=(P==1)?-1:1;
//-1=wh 1==bl
	Can[y+c][x]=(!Pl[y+c][x]);
	if(y==(c==-1?7:2))Can[y+c+c][x]=(Can[y+c][x]&&!Pl[y+c+c][x]);
	Can[y+c][x-1]=(Pl[y+c][x-1]==3-ch)*2;
	Can[y+c][x+1]=(Pl[y+c][x+1]==3-ch)*2;
}

void Mv_Rook(int x,int y,int c) {
	memset(Can,0,sizeof(Can));
	for(int i=x-1; i>0; i--) {
		if(!Pl[y][i])Can[y][i]=1;
		else if(Pl[y][i]==(3-c))Can[y][i]=2;
		if(Pl[y][i])break;
	}
	for(int i=x+1; i<=8; i++) {
		if(!Pl[y][i])Can[y][i]=1;
		else if(Pl[y][i]==(3-c))Can[y][i]=2;
		if(Pl[y][i])break;
	}
	for(int i=y-1; i>0; i--) {
		if(!Pl[i][x])Can[i][x]=1;
		else if(Pl[i][x]==(3-c))Can[i][x]=2;
		if(Pl[i][x])break;
	}
	for(int i=y+1; i<=8; i++) {
		if(!Pl[i][x])Can
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值