五子棋游戏代码
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//*****************函数声明***********************
void kaishi();//函数1:游戏界面
void xiaqi();//函数4:鼠标下棋
//***************定义全局变量*********************
bool f=1;
float t=0,r;
{
//判断棋子落下的位子
if(m.x%25<=13 && m.y%25<=13)
{
m.x = m.x - m.x%25;
m.y = m.y - m.y%25;
}
if(m.x%25>=13 && m.y%25>=13)
{
m.x = m.x + (25-m.x%25);
m.y = m.y + (25-m.y%25);
{
if(qizi[i][j]!=0)
{
//判断水平向左方向
cnt=1;
for(k=1;k<5;k++)
if(qizi[i][j]==qizi[i+k][j])
cnt++;
if(cnt==5)
return qizi[i][j];
//Hale Waihona Puke Baidu断水平向右方向
cnt=1;
for(k=1;k<5;k++)
if(i>=k)
for(k=0;k<19;k++)
for(s=0;s<19;s++)
if(qizi[k][s]!=0)
cnt++;
if(cnt==362)
return 3;
}
}
return 0;
}
void xiaqi()//函数4:使用鼠标下棋
{
//获取鼠标信息
MOUSEMSG m;
while(true)
{
//实现游戏计时功能
}
if(m.x%25<=13 && m.y%25>=13)
{
m.x = m.x - m.x%25;
m.y = m.y + (25-m.y%25);
}
if(m.x%25>=13 && m.y%25<=13)
{
m.x = m.x + (25-m.x%25);
m.y = m.y - m.y%25;
}
//判断是下黑棋还是白棋或是不下棋
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//*****************函数头文件*********************
#include "stdio.h"
#include "conio.h"
#include "graphics.h"
#pragma comment(lib,"Winmm.lib")
//画音乐控制按钮
setfillstyle(GREEN);
bar(600,550,620,570);
bar(700,550,720,570);
bar(800,550,820,570);
//画棋盘
setfillstyle(RGB(220,160,30));
bar(55,55,545,545);
for(int x=75;x<=500;x+=25)
HWND hwnd = GetHWnd();
SetWindowText(hwnd,"五子棋游戏");
//编写人
setcolor(MAGENTA);
setfont(120,0,"方正舒体");
outtextxy(280,200,"yaoyun");
Sleep(2000);
//背景颜色变化
for(int v=0;v<=255;v++)
outtextxy(370,550,"和局:");
setfont(20,0,"华文楷体");
outtextxy(580,510,"播放音乐");
outtextxy(680,510,"关闭音乐");
outtextxy(780,510,"调节声音");
setcolor(BLUE);
setfont(80,0,"华文隶书");
{
setbkcolor(RGB(v,v,0));
cleardevice();
}
kaishi();
getch();
xiaqi();
//咨询用户是否重新开始
HWND wnd = GetHWnd();
while(MessageBox(wnd, "游戏结束,\n是否开始新的游戏?!", "询问", MB_YESNO | MB_ICONQUESTION) == IDYES)
void kaishi()//函数1:游戏界面
{
//设置背景颜色
setbkcolor(RGB(255,255,0));
cleardevice();
//设置文字
setcolor(MAGENTA);
setfont(30,0,"华文楷体");
outtextxy(110,550,"黑胜:");
outtextxy(240,550,"白胜:");
//判断竖直向上方向
cnt=1;
for(k=1;k<5;k++)
if(j>=k)
{
if(qizi[i][j]==qizi[i][j-k])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断斜向下方向
cnt=1;
for(k=1;k<5;k++)
if(qizi[i][j]==qizi[i+k][j+k])
sprintf(b,"%d",bai);
outtextxy(330,550,b);
sprintf(c,"%d",he);
outtextxy(460,550,c);
if(MouseHit())
m = GetMouseMsg();
//控制音乐播放
if(m.y>=550 && m.y<=570 && m.uMsg==WM_LBUTTONDOWN)
char ch,shijian[8],a[8],b[8],c[8];
int k,s,cnt,N=0,hei=0,bai=0,he=0,qizi[20][20]={0};
//*******************主函数***********************
void main()
{
//设置窗口
initgraph(900,600);
outtextxy(600,40,"五子棋");
setfont(50,0,"华文楷体");
outtextxy(200,5,"人人对战");
setfont(30,0,"华文楷体");
outtextxy(580,460,"游戏时间:");
setfont(15,0,"华文楷体");
outtextxy(395,40,"按任意键开始游戏");
int i=m.x/25-3;
int j=m.y/25-3;
if(qizi[i][j]==0)
{
if(f)
setcolor(BLACK);//黑棋
else
setcolor(WHITE);//白棋
//画棋子
for(r=0;r<=10;r+=0.1)
circle(m.x,m.y,r);
f = !f;
}
//判断游戏的赢家是谁
cnt++;
if(cnt==5)
return qizi[i][j];
//判断斜向上方向
cnt=1;
for(k=1;k<5;k++)
if(j>=k)
{
if(qizi[i][j]==qizi[i+k][j-k])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断棋盘是否下满
cnt=1;
for(int y=75;y<=500;y+=25)
{
setcolor(BLACK);
rectangle(x,y,x+25,y+25);
}
}
void jieguo(int N)//函数2:游戏结果
{
IMAGE img;
switch(N)
{
case 1:
loadimage(&img,"黑.BMP");
{
if(m.x>=600 && m.x<=620)
{
mciSendString("open music.mp3 alias mymusic",0,0,0);//打开音乐
mciSendString("play mymusic repeat",0,0,0);//循环播放音乐
}
if(m.x>=700 && m.x<=720)
N = panduan(m.x,m.y,f);
if(N!=0)
{
jieguo(N);
break;
}
}
}
}
//*********************结束***********************
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
{
//游戏界面初始化
kaishi();
//清空游戏数据
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
qizi[i][j]=0;
//开始游戏
getch();
xiaqi();
}
closegraph();
}
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//************************************************
hei++;
break;
case 2:
loadimage(&img,"白.BMP");
bai++;
break;
case 3:
loadimage(&img,"和.BMP");
he++;
break;
}
putimage(580,120,&img);
}
int panduan(int x,int y,int f)//函数3:判断棋局胜负
{
if(qizi[i][j]==qizi[i-k][j])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断竖直向下方向
for(k=1;k<5;k++)
cnt=1;
if(qizi[i][j]==qizi[i][j+k])
cnt++;
if(cnt==5)
return qizi[i][j];
Sleep(1);
sprintf(shijian,"%5.1f",t++/100);
setcolor(RED);
setfont(28,0,"宋体");
outtextxy(730,460,shijian);
//计算游戏积分
setcolor(CYAN);
sprintf(a,"%d",hei);
outtextxy(200,550,a);
{
inti=x/25-3;
int j=y/25-3;
//1表示黑棋,2表示白棋
if(f!=1)
qizi[i][j]=1;
if(f==1)
qizi[i][j]=2;
if(x>525 || x<75 || y>525 || y<75)
return 0;
//判断游戏胜负
for(i=0;i<20;i++)
for(j=0;j<20;j++)
mciSendString("close mymusic",0,0,0);//关闭音乐
if(m.x>=800 && m.x<=820)
WinExec("sndvol32.exe",SW_SHOWNORMAL);//打开声音控制
}
//下棋
if(m.x>=75 && m.x<=525 && m.y>=75 && m.y<=525 && m.uMsg==WM_LBUTTONDOWN)
void kaishi();//函数1:游戏界面
void xiaqi();//函数4:鼠标下棋
//***************定义全局变量*********************
bool f=1;
float t=0,r;
{
//判断棋子落下的位子
if(m.x%25<=13 && m.y%25<=13)
{
m.x = m.x - m.x%25;
m.y = m.y - m.y%25;
}
if(m.x%25>=13 && m.y%25>=13)
{
m.x = m.x + (25-m.x%25);
m.y = m.y + (25-m.y%25);
{
if(qizi[i][j]!=0)
{
//判断水平向左方向
cnt=1;
for(k=1;k<5;k++)
if(qizi[i][j]==qizi[i+k][j])
cnt++;
if(cnt==5)
return qizi[i][j];
//Hale Waihona Puke Baidu断水平向右方向
cnt=1;
for(k=1;k<5;k++)
if(i>=k)
for(k=0;k<19;k++)
for(s=0;s<19;s++)
if(qizi[k][s]!=0)
cnt++;
if(cnt==362)
return 3;
}
}
return 0;
}
void xiaqi()//函数4:使用鼠标下棋
{
//获取鼠标信息
MOUSEMSG m;
while(true)
{
//实现游戏计时功能
}
if(m.x%25<=13 && m.y%25>=13)
{
m.x = m.x - m.x%25;
m.y = m.y + (25-m.y%25);
}
if(m.x%25>=13 && m.y%25<=13)
{
m.x = m.x + (25-m.x%25);
m.y = m.y - m.y%25;
}
//判断是下黑棋还是白棋或是不下棋
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//*****************函数头文件*********************
#include "stdio.h"
#include "conio.h"
#include "graphics.h"
#pragma comment(lib,"Winmm.lib")
//画音乐控制按钮
setfillstyle(GREEN);
bar(600,550,620,570);
bar(700,550,720,570);
bar(800,550,820,570);
//画棋盘
setfillstyle(RGB(220,160,30));
bar(55,55,545,545);
for(int x=75;x<=500;x+=25)
HWND hwnd = GetHWnd();
SetWindowText(hwnd,"五子棋游戏");
//编写人
setcolor(MAGENTA);
setfont(120,0,"方正舒体");
outtextxy(280,200,"yaoyun");
Sleep(2000);
//背景颜色变化
for(int v=0;v<=255;v++)
outtextxy(370,550,"和局:");
setfont(20,0,"华文楷体");
outtextxy(580,510,"播放音乐");
outtextxy(680,510,"关闭音乐");
outtextxy(780,510,"调节声音");
setcolor(BLUE);
setfont(80,0,"华文隶书");
{
setbkcolor(RGB(v,v,0));
cleardevice();
}
kaishi();
getch();
xiaqi();
//咨询用户是否重新开始
HWND wnd = GetHWnd();
while(MessageBox(wnd, "游戏结束,\n是否开始新的游戏?!", "询问", MB_YESNO | MB_ICONQUESTION) == IDYES)
void kaishi()//函数1:游戏界面
{
//设置背景颜色
setbkcolor(RGB(255,255,0));
cleardevice();
//设置文字
setcolor(MAGENTA);
setfont(30,0,"华文楷体");
outtextxy(110,550,"黑胜:");
outtextxy(240,550,"白胜:");
//判断竖直向上方向
cnt=1;
for(k=1;k<5;k++)
if(j>=k)
{
if(qizi[i][j]==qizi[i][j-k])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断斜向下方向
cnt=1;
for(k=1;k<5;k++)
if(qizi[i][j]==qizi[i+k][j+k])
sprintf(b,"%d",bai);
outtextxy(330,550,b);
sprintf(c,"%d",he);
outtextxy(460,550,c);
if(MouseHit())
m = GetMouseMsg();
//控制音乐播放
if(m.y>=550 && m.y<=570 && m.uMsg==WM_LBUTTONDOWN)
char ch,shijian[8],a[8],b[8],c[8];
int k,s,cnt,N=0,hei=0,bai=0,he=0,qizi[20][20]={0};
//*******************主函数***********************
void main()
{
//设置窗口
initgraph(900,600);
outtextxy(600,40,"五子棋");
setfont(50,0,"华文楷体");
outtextxy(200,5,"人人对战");
setfont(30,0,"华文楷体");
outtextxy(580,460,"游戏时间:");
setfont(15,0,"华文楷体");
outtextxy(395,40,"按任意键开始游戏");
int i=m.x/25-3;
int j=m.y/25-3;
if(qizi[i][j]==0)
{
if(f)
setcolor(BLACK);//黑棋
else
setcolor(WHITE);//白棋
//画棋子
for(r=0;r<=10;r+=0.1)
circle(m.x,m.y,r);
f = !f;
}
//判断游戏的赢家是谁
cnt++;
if(cnt==5)
return qizi[i][j];
//判断斜向上方向
cnt=1;
for(k=1;k<5;k++)
if(j>=k)
{
if(qizi[i][j]==qizi[i+k][j-k])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断棋盘是否下满
cnt=1;
for(int y=75;y<=500;y+=25)
{
setcolor(BLACK);
rectangle(x,y,x+25,y+25);
}
}
void jieguo(int N)//函数2:游戏结果
{
IMAGE img;
switch(N)
{
case 1:
loadimage(&img,"黑.BMP");
{
if(m.x>=600 && m.x<=620)
{
mciSendString("open music.mp3 alias mymusic",0,0,0);//打开音乐
mciSendString("play mymusic repeat",0,0,0);//循环播放音乐
}
if(m.x>=700 && m.x<=720)
N = panduan(m.x,m.y,f);
if(N!=0)
{
jieguo(N);
break;
}
}
}
}
//*********************结束***********************
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
{
//游戏界面初始化
kaishi();
//清空游戏数据
for(int i=0;i<20;i++)
for(int j=0;j<20;j++)
qizi[i][j]=0;
//开始游戏
getch();
xiaqi();
}
closegraph();
}
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//************************************************
hei++;
break;
case 2:
loadimage(&img,"白.BMP");
bai++;
break;
case 3:
loadimage(&img,"和.BMP");
he++;
break;
}
putimage(580,120,&img);
}
int panduan(int x,int y,int f)//函数3:判断棋局胜负
{
if(qizi[i][j]==qizi[i-k][j])
cnt++;
if(cnt==5)
return qizi[i][j];
}
//判断竖直向下方向
for(k=1;k<5;k++)
cnt=1;
if(qizi[i][j]==qizi[i][j+k])
cnt++;
if(cnt==5)
return qizi[i][j];
Sleep(1);
sprintf(shijian,"%5.1f",t++/100);
setcolor(RED);
setfont(28,0,"宋体");
outtextxy(730,460,shijian);
//计算游戏积分
setcolor(CYAN);
sprintf(a,"%d",hei);
outtextxy(200,550,a);
{
inti=x/25-3;
int j=y/25-3;
//1表示黑棋,2表示白棋
if(f!=1)
qizi[i][j]=1;
if(f==1)
qizi[i][j]=2;
if(x>525 || x<75 || y>525 || y<75)
return 0;
//判断游戏胜负
for(i=0;i<20;i++)
for(j=0;j<20;j++)
mciSendString("close mymusic",0,0,0);//关闭音乐
if(m.x>=800 && m.x<=820)
WinExec("sndvol32.exe",SW_SHOWNORMAL);//打开声音控制
}
//下棋
if(m.x>=75 && m.x<=525 && m.y>=75 && m.y<=525 && m.uMsg==WM_LBUTTONDOWN)