介绍
做这个的原因
做着玩(嘿嘿)
经典五子棋
黑棋白棋各两方,那个人横着或竖着或斜着连着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博客
}
注意{
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!
不喜勿喷!!!