基于easyx和C语言的五子棋

介绍

做这个的原因

做着玩(嘿嘿) 

经典五子棋

黑棋白棋各两方,那个人横着或竖着或斜着连着5个自己方的棋,自己放赢,另一方输

实现效果:

 (加速了,要不然放不下)

准备工作:

图片:

关注我且给我发消息即可获得文件(皮一下)

功能实现:

1、头文件,准备工作:

#include<stdio.h>
#include<easyx.h>
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<windows.h>
#include<math.h>
//#pragma comment(lib,"img/img/Winmm.lib")
#define wdf 40

2、创建结构体来存储棋盘当前状态

struct node{
	int flag;
	int x;
	int y;
	bool hei=false;
	bool white=false;
	bool kefangzhi=false;
}map[35][35];

3、判断黑棋是否五连珠

横着

bool panduanx(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x][y+i].hei==false){
			return false;
		}
	}
	return true;
}

竖着

bool panduany(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y].hei==false){
			return false;
		}
	}
	return true;
}

向左斜着

bool panduanxyz(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y-i].hei==false){
			return false;
		}
	}
	return true;
}

向右斜着

bool panduanxy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y+i].hei==false){
			return false;
		}
	}
	return true;
}

4、判断白棋是否五连珠

 横着

bool panduanyy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y].white==false){
			return false;
		}
	}
	return true;
}

竖着

bool panduanyy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y].white==false){
			return false;
		}
	}
	return true;
}

向左斜着

bool panduanxxyyzz(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y-i].white==false){
			return false;
		}
	}
	return true;
}

向右斜着

bool panduanxxyy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y+i].white==false){
			return false;
		}
	}
	return true;
}

5、主函数

int main(){
	printf("请输入棋盘大小(5<=n<=18,5<=m<=18)\n");
	int n,m;
	scanf("%d %d",&n,&m);
	n*=wdf;
	m*=wdf;
	int tttt=n;
	n=m;
	m=tttt;
	initgraph(n+wdf,m+wdf+80);
//	mciSendString(_T("open 名称.mp3 alias bkmusic"),NULL,0,NULL);
//	mciSendString(_T("play bkmusic repeat"),NULL,0,NULL);
	for(int i=0; i<n+wdf; i+=wdf){
		for(int j=0; j<m+wdf+80; j+=wdf){
			IMAGE picture;
			loadimage(&picture,"img/背景.jpeg",wdf,wdf);
			putimage(i,j,&picture);
		}
	}
	for(int i=0; i<=n/wdf+1; i++){
		for(int j=0; j<=m/wdf+1; j++){
			if(i==0||j==0||i==n/wdf+1||j==m/wdf+1){
				map[i][j].kefangzhi=false;
				continue;
			}
			map[i][j].x=i;
			map[i][j].y=j;
			map[i][j].flag=0;
			map[i][j].hei=false;
			map[i][j].white=false;
			map[i][j].kefangzhi=true;
		}
	}
	bool t=false;
	while(1){
		bool flag=t;
		if(t==false){
			IMAGE picture;
			loadimage(&picture,"img/黑方出棋.jpeg",n+wdf,80);
			putimage(0,m+wdf,&picture);
		}
		else{
			IMAGE picture;
			loadimage(&picture,"img/白方出棋.jpeg",n+wdf,80);
			putimage(0,m+wdf,&picture);
		}
		bool p1=false;
		while(p1==false){
			if(MouseHit()){
				MOUSEMSG m=GetMouseMsg();
				switch(m.uMsg){
					case WM_LBUTTONDOWN:
						int x=(m.x+5)/wdf,y=(m.y+5)/wdf;
						if(t==false){
							if(map[x][y].kefangzhi==true){
								if(map[x][y].white==false&&map[x][y].hei==false&&map[x][y].flag==0){
									map[x][y].hei=true;
									map[x][y].flag=1;
									IMAGE picture;
									loadimage(&picture,"img/黑棋.jpeg",32,32);
									putimage((map[x][y].x*40)-16,(map[x][y].y*40)-16,&picture);
								}
								else{
									t=!t;
								}
							}
							else{
								t=!t;
							}
						}
						else{
							if(map[x][y].kefangzhi==true){
								if(map[x][y].white==false&&map[x][y].hei==false&&map[x][y].flag==0){
									map[x][y].white=true;
									map[x][y].flag=1;
									IMAGE picture;
									loadimage(&picture,"img/白棋.jpeg",32,32);
									putimage((map[x][y].x*40)-16,(map[x][y].y*40)-16,&picture);
								}
								else{
									t=!t;
								}
							}
							else{
								t=!t;
							}
						}
						p1=true;
						break;
				}
			}
		}
		t=!t;
		if(flag!=t){
			if(flag==false){
				bool cnt=false;
				for(int i=1; i<=n/wdf; i++){
					for(int j=1; j<=m/wdf; j++){
						if(map[i][j].hei==true){
							if(panduanx(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,i*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduany(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,j*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxyz(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j-4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
						}
					}
					if(cnt==true){
						break;
					}
				}
				if(cnt==true){
					IMAGE picture;
					loadimage(&picture,"img/黑方win!.jpeg",200,70);
					putimage(m/2-100,n/2-35,&picture);
					break;
				}
			}
			else{
				bool cnt=false;
				for(int i=1; i<=n/wdf; i++){
					for(int j=1; j<=m/wdf; j++){
						if(map[i][j].white==true){
							if(panduanxx(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,i*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanyy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,j*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxxyy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxxyyzz(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j-4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
						}
					}
					if(cnt==true){
						break;
					}
				}
				if(cnt==true){
					IMAGE picture;
					loadimage(&picture,"img/白方win!.jpeg",200,70);
					putimage(m/2-100,n/2-35,&picture);
					break;
				}
			}
		}
	}
	Sleep(5000);
//	mciSendString(_T("close bkmusic"),NULL,0,NULL);
	closegraph();
	return 0;
} 

最终代码

#include<stdio.h>
#include<easyx.h>
#include<conio.h>
#include<stdio.h>
#include<graphics.h>
#include<windows.h>
#include<math.h>
//#pragma comment(lib,"img/img/Winmm.lib")
#define wdf 40
struct node{
	int flag;
	int x;
	int y;
	bool hei=false;
	bool white=false;
	bool kefangzhi=false;
}map[35][35];
bool panduanx(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x][y+i].hei==false){
			return false;
		}
	}
	return true;
}
bool panduany(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y].hei==false){
			return false;
		}
	}
	return true;
}
bool panduanxy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y+i].hei==false){
			return false;
		}
	}
	return true;
}
bool panduanxyz(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y-i].hei==false){
			return false;
		}
	}
	return true;
}
bool panduanxxyyzz(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y-i].white==false){
			return false;
		}
	}
	return true;
}
bool panduanxx(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x][y+i].white==false){
			return false;
		}
	}
	return true;
}
bool panduanyy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y].white==false){
			return false;
		}
	}
	return true;
}
bool panduanxxyy(int x,int y){
	for(int i=0; i<5; i++){
		if(map[x+i][y+i].white==false){
			return false;
		}
	}
	return true;
}
int main(){
	printf("请输入棋盘大小(5<=n<=18,5<=m<=18)\n");
	int n,m;
	scanf("%d %d",&n,&m);
	n*=wdf;
	m*=wdf;
	int tttt=n;
	n=m;
	m=tttt;
	initgraph(n+wdf,m+wdf+80);
//	mciSendString(_T("open 名称.mp3 alias bkmusic"),NULL,0,NULL);
//	mciSendString(_T("play bkmusic repeat"),NULL,0,NULL);
	for(int i=0; i<n+wdf; i+=wdf){
		for(int j=0; j<m+wdf+80; j+=wdf){
			IMAGE picture;
			loadimage(&picture,"img/背景.jpeg",wdf,wdf);
			putimage(i,j,&picture);
		}
	}
	for(int i=0; i<=n/wdf+1; i++){
		for(int j=0; j<=m/wdf+1; j++){
			if(i==0||j==0||i==n/wdf+1||j==m/wdf+1){
				map[i][j].kefangzhi=false;
				continue;
			}
			map[i][j].x=i;
			map[i][j].y=j;
			map[i][j].flag=0;
			map[i][j].hei=false;
			map[i][j].white=false;
			map[i][j].kefangzhi=true;
		}
	}
	bool t=false;
	while(1){
		bool flag=t;
		if(t==false){
			IMAGE picture;
			loadimage(&picture,"img/黑方出棋.jpeg",n+wdf,80);
			putimage(0,m+wdf,&picture);
		}
		else{
			IMAGE picture;
			loadimage(&picture,"img/白方出棋.jpeg",n+wdf,80);
			putimage(0,m+wdf,&picture);
		}
		bool p1=false;
		while(p1==false){
			if(MouseHit()){
				MOUSEMSG m=GetMouseMsg();
				switch(m.uMsg){
					case WM_LBUTTONDOWN:
						int x=(m.x+5)/wdf,y=(m.y+5)/wdf;
						if(t==false){
							if(map[x][y].kefangzhi==true){
								if(map[x][y].white==false&&map[x][y].hei==false&&map[x][y].flag==0){
									map[x][y].hei=true;
									map[x][y].flag=1;
									IMAGE picture;
									loadimage(&picture,"img/黑棋.jpeg",32,32);
									putimage((map[x][y].x*40)-16,(map[x][y].y*40)-16,&picture);
								}
								else{
									t=!t;
								}
							}
							else{
								t=!t;
							}
						}
						else{
							if(map[x][y].kefangzhi==true){
								if(map[x][y].white==false&&map[x][y].hei==false&&map[x][y].flag==0){
									map[x][y].white=true;
									map[x][y].flag=1;
									IMAGE picture;
									loadimage(&picture,"img/白棋.jpeg",32,32);
									putimage((map[x][y].x*40)-16,(map[x][y].y*40)-16,&picture);
								}
								else{
									t=!t;
								}
							}
							else{
								t=!t;
							}
						}
						p1=true;
						break;
				}
			}
		}
		t=!t;
		if(flag!=t){
			if(flag==false){
				bool cnt=false;
				for(int i=1; i<=n/wdf; i++){
					for(int j=1; j<=m/wdf; j++){
						if(map[i][j].hei==true){
							if(panduanx(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,i*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduany(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,j*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxyz(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j-4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
						}
					}
					if(cnt==true){
						break;
					}
				}
				if(cnt==true){
					IMAGE picture;
					loadimage(&picture,"img/黑方win!.jpeg",200,70);
					putimage(m/2-100,n/2-35,&picture);
					break;
				}
			}
			else{
				bool cnt=false;
				for(int i=1; i<=n/wdf; i++){
					for(int j=1; j<=m/wdf; j++){
						if(map[i][j].white==true){
							if(panduanxx(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,i*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanyy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,j*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxxyy(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j+4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
							else if(panduanxxyyzz(i,j)==true){
								setlinecolor(RED);
								setlinestyle(PS_SOLID,5);
								line(i*wdf,j*wdf,(i+4)*wdf,(j-4)*wdf);
								Sleep(4444);
								cnt=true;
								break;
							}
						}
					}
					if(cnt==true){
						break;
					}
				}
				if(cnt==true){
					IMAGE picture;
					loadimage(&picture,"img/白方win!.jpeg",200,70);
					putimage(m/2-100,n/2-35,&picture);
					break;
				}
			}
		}
	}
	Sleep(5000);
//	mciSendString(_T("close bkmusic"),NULL,0,NULL);
	closegraph();
	return 0;
} 
/*音乐:尚未完善
步骤:

(1)引用Winmm.lib链接库

语法:#pragma comment(lib,"Winmm.lib")

(2)播放音乐

语法:mciSendString(_T("open su.mp3 alias bkmusic"), NULL, 0, NULL);

*注:音乐名su.mp3必须和程序文件中存储的音乐文件名称相同,否则调用失败。

(3)循环播放

语法:mciSendString(_T("play bkmusic repeat"), NULL, 0, NULL);

(4)停止播放

mciSendString(_T("close bkmusic"), NULL, 0, NULL);
*/

 运行结果

 (注:加速了,要不然放不下)

大家请看看我之前的作品,点点赞,关关注,求求了

传送门{

纠错最大?最小?@:Alarm clock_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库52题大禹治水_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库第63题完成任务_Edge_Coduck_s07738的博客-CSDN博客

STL库用法<stack>_Edge_Coduck_s07738的博客-CSDN博客

01背包问题——dfs(深度优先搜索)做法_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库64题路灯安装_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库题23题消灭怪兽_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库题21花园日志_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库7题异或和_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库8题王国守卫_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库第70题数字分组_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库第4题乌云序列_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库第2题字符串的主宰者_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库56题平方字符串_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库25题拯救兔兔_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库03题区间翻转_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库01题修补桥面_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库67题字符串操作_Edge_Coduck_s07738的博客-CSDN博客

可达鸭学习平台题库——思维题库71题三相数组_Edge_Coduck_s07738的博客-CSDN博客

}

注意{

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

不喜勿喷!!!

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Programming_Konjac

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值