专栏文章

easyx象棋

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipyomjj
此快照首次捕获于
2025/12/03 20:06
3 个月前
此快照最后确认于
2025/12/03 20:06
3 个月前
查看原文
CPP
#include<bits/stdc++.h>
#include<easyx.h>
#include<graphics.h>
#define int long long 
using namespace std;
int mp[15][15];
void draw(); 
void star();
int endqizi=-1;
int t=1;
pair<int,int>start,end;
signed main(){
	star(); 
	initgraph(600,660,0); 
	draw();
	while(1){
		ExMessage msg;
		peekmessage(&msg,EX_MOUSE);
		bool hongjiang=0,heijiang=0; 
		for(int i=1;i<=9;i++){
			for(int j=1;j<=10;j++){
				if(mp[j][i]==11) hongjiang=1;
				if(mp[j][i]==21) heijiang=1;

				if(msg.x>=i*60-25&&msg.x<=i*60+25&&msg.y>=j*60-25&&msg.y<=j*60+25&&msg.message==WM_LBUTTONDOWN){
					if(start.first==j&&start.second==i){
						start.first=-1;
						start.second=-1;
					}else{
						if(start.first==-1&&start.second==-1&&mp[j][i]!=0&&mp[j][i]/10==t){
							start.first=j;
							start.second=i;
						}else{
							if(start.first!=-1&&start.second!=-1){
								end.first=j;
								end.second=i;
								endqizi=mp[start.first][start.second];
							}
						}
					}
				}
				endqizi=mp[start.first][start.second];
			}
		}
		if(hongjiang==0||heijiang==0){
			draw(); 
			_sleep(3000);
			exit(0);
		}
		if(end.first!=-1&&end.second!=-1){
			bool p=0;
			if(mp[end.first][end.second]/10!=endqizi/10){
				
				switch(endqizi%10){
					case 1:{
						bool flog_qi=0;
						int u=start.first,v=end.first;
						if(u>v) swap(u,v);
						for(int i=u+1;i<=v-1;i++){
							if(mp[i][start.second]!=0){
								flog_qi=1;
								break;
							}
						}
						if(((endqizi/10==1&&(abs(start.first-end.first))+(abs(start.second-end.second))==1&&end.first>=8&&end.first<=10&&end.second>=4&&end.second<=6)||(endqizi/10==2&&(abs(start.first-end.first))+(abs(start.second-end.second))==1&&end.first>=1&&end.first<=3&&end.second>=4&&end.second<=6))||(start.second==end.second&&!flog_qi)){
							mp[end.first][end.second]=endqizi;
							mp[start.first][start.second]=0;
							p=1;
						}
						break;
					}
					case 2:{
						if((endqizi/10==1&&(abs(start.first-end.first))==1&&(abs(start.second-end.second))==1&&end.first>=8&&end.first<=10&&end.second>=4&&end.second<=6)||(endqizi/10==2&&(abs(start.first-end.first))==1&&(abs(start.second-end.second))==1&&end.first>=1&&end.first<=3&&end.second>=4&&end.second<=6)){
							mp[end.first][end.second]=endqizi;
							mp[start.first][start.second]=0;
							p=1;
						}
						break;
					}
					case 3:{
						if((endqizi/10==1&&(abs(start.first-end.first))==2&&(abs(start.second-end.second))==2&&end.first>=6&&end.first<=10)||(endqizi/10==2&&(abs(start.first-end.first))==2&&(abs(start.second-end.second))==2&&end.first>=1&&end.first<=5)){
							int u=(start.first+end.first)/2,v=(start.second+end.second)/2;
							if(mp[u][v]==0){
								mp[end.first][end.second]=endqizi;
								mp[start.first][start.second]=0;
								p=1;
							}
						}
						break;
					}
					case 4:{
						if((abs(start.first-end.first)==1||abs(start.first-end.first)==2)&&(abs(start.second-end.second)==1||abs(start.second-end.second)==2)&&abs(start.first-end.first)!=abs(start.second-end.second)){
							int u=0,v=0;
							if(abs(start.first-end.first)==2){
								u=start.first;
								v=end.first;
								if(mp[(u+v)/2][start.second]==0){
									mp[end.first][end.second]=endqizi;
									mp[start.first][start.second]=0;
									p=1;
								}
							}
							if(abs(start.second-end.second)==2){
								u=start.second;
								v=end.second;
								if(mp[start.first][(u+v)/2]==0){
									mp[end.first][end.second]=endqizi;
									mp[start.first][start.second]=0;
									p=1;
								}
							}
						}
						break;
					}
					case 5:{
						if(start.first-end.first==0||start.second-end.second==0){
							bool flog_qi=0;
							int u=start.first,v=end.first;
							if(u>v) swap(u,v);
							for(int i=u+1;i<=v-1;i++){
								if(mp[i][start.second]!=0){
									flog_qi=1;
									break;
								}
							}
							u=start.second,v=end.second;
							if(u>v) swap(u,v);
							for(int i=u+1;i<=v-1;i++){
								if(mp[start.first][i]!=0){
									flog_qi=1;
									break;
								}
							}
							if(!flog_qi){
								mp[end.first][end.second]=endqizi;
								mp[start.first][start.second]=0;
								p=1;
							}
						}
						break;
					}
					case 6:{
						if(start.first-end.first==0||start.second-end.second==0){
							int flog_qi=0;
							int u=start.first,v=end.first;
							if(u>v) swap(u,v);
							for(int i=u+1;i<=v-1;i++){
								if(mp[i][start.second]!=0){
									flog_qi++;
								}
							}
							u=start.second,v=end.second;
							if(u>v) swap(u,v);
							for(int i=u+1;i<=v-1;i++){
								if(mp[start.first][i]!=0){
									flog_qi++;
								}
							}
							if((flog_qi==1&&mp[end.first][end.second]!=0)||(flog_qi==0&&mp[end.first][end.second]==0)){
								mp[end.first][end.second]=endqizi;
								mp[start.first][start.second]=0;
								p=1;
							}
						}
						break;
					}
					case 7:{
						if((abs(start.first-end.first))+(abs(start.second-end.second))==1){
							bool flog_zou=0;
							if(endqizi/10==1){
								if(start.first-end.first!=-1){
									if(start.first<=5){
										flog_zou=1;
									}else{
										if(start.second-end.second==0){
											flog_zou=1;
										}
									}
								}
							}else{
								if(start.first-end.first!=1){
									if(start.first>=6){
										flog_zou=1;
									}else{
										if(start.second-end.second==0){
											flog_zou=1;
										}
									}
								}
							}
							if(flog_zou==1){
								mp[end.first][end.second]=endqizi;
								mp[start.first][start.second]=0;
								p=1;
							}
						}
						break;
					}
				}
			}
			start.first=-1;
			start.second=-1;
			end.first=-1;
			end.second=-1;
			endqizi=-1;
			if(p){
				if(t==1) t=2;
				else t=1;
			}
		}
		if(msg.message==WM_LBUTTONDOWN){
			draw();
			msg={0};
		}
	}
}
void draw(){
	setbkmode(TRANSPARENT);
	setlinestyle(PS_SOLID,3);
	setlinecolor(WHITE);
	setfillcolor(BROWN);
	settextstyle(40,0,"楷体");
	cleardevice();
	BeginBatchDraw();
	for(int i=1;i<=10;i++){
		line(60,i*60,540,i*60);
	}
	for(int i=1;i<=9;i++){
		line(i*60,60,i*60,300);
	}
	for(int i=1;i<=9;i++){
		line(i*60,60+300,i*60,300+300);
	}
	line(60,300,60,360);
	line(540,300,540,360);
	setfillcolor(BROWN);
	for(int i=1;i<=9;i++){
		for(int j=1;j<=10;j++){
			setfillcolor(BROWN);
			if(mp[j][i]>=10&&mp[j][i]<20){
				settextcolor(RED);
			}
			if(mp[j][i]>=20&&mp[j][i]<30){
				settextcolor(BLACK);
			}
			if(j==start.first&&i==start.second){
				setfillcolor(GREEN);
			}
			if(mp[j][i]!=0){
				solidcircle(i*60,j*60,25);
			}	
			switch(mp[j][i]%10){
				case 1:{
					outtextxy(i*60-20,j*60-20,"将");
					break;
				}
				case 2:{
					outtextxy(i*60-20,j*60-20,"士");
					break;
				}
				case 3:{
					outtextxy(i*60-20,j*60-20,"象");
					break;
				}
				case 4:{
					outtextxy(i*60-20,j*60-20,"马");
					break;
				}
				case 5:{
					outtextxy(i*60-20,j*60-20,"车");
					break;
				} 
				case 6:{
					outtextxy(i*60-20,j*60-20,"炮");
					break;
				}
				case 7:{
					outtextxy(i*60-20,j*60-20,"兵");
					break;
				}
			}
		}
	}
	EndBatchDraw();
}
void star(){
	mp[1][1]=25;
	mp[1][2]=24;
	mp[1][3]=23;
	mp[1][4]=22;
	mp[1][5]=21;
	mp[1][6]=22;
	mp[1][7]=23;
	mp[1][8]=24;
	mp[1][9]=25;
	mp[3][2]=26;
	mp[3][8]=26;
	mp[4][1]=27;
	mp[4][3]=27;
	mp[4][5]=27;
	mp[4][7]=27;
	mp[4][9]=27;
	
	mp[10][1]=15;
	mp[10][2]=14;
	mp[10][3]=13;
	mp[10][4]=12;
	mp[10][5]=11;
	mp[10][6]=12;
	mp[10][7]=13;
	mp[10][8]=14;
	mp[10][9]=15;
	mp[8][2]=16;
	mp[8][8]=16;
	mp[7][1]=17;
	mp[7][3]=17;
	mp[7][5]=17;
	mp[7][7]=17;
	mp[7][9]=17;
	
	start.first=-1;
	start.second=-1;
	end.first=-1;
	end.second=-1;
}
//原创:cyx1234 

评论

0 条评论,欢迎与作者交流。

正在加载评论...