五子棋游戏代码.docx
《五子棋游戏代码.docx》由会员分享,可在线阅读,更多相关《五子棋游戏代码.docx(11页珍藏版)》请在冰豆网上搜索。
五子棋游戏代码
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
//*****************函数头文件*********************
#include"stdio.h"
#include"conio.h"
#include"graphics.h"
#pragmacomment(lib,"Winmm.lib")
//*****************函数声明***********************
voidkaishi();//函数1:
游戏界面
voidxiaqi();//函数4:
鼠标下棋
//***************定义全局变量*********************
boolf=1;
floatt=0,r;
charch,shijian[8],a[8],b[8],c[8];
intk,s,cnt,N=0,hei=0,bai=0,he=0,qizi[20][20]={0};
//*******************主函数***********************
voidmain()
{
//设置窗口
initgraph(900,600);
HWNDhwnd=GetHWnd();
SetWindowText(hwnd,"五子棋游戏");
//编写人
setcolor(MAGENTA);
setfont(120,0,"方正舒体");
outtextxy(280,200,"yaoyun");
Sleep(2000);
//背景颜色变化
for(intv=0;v<=255;v++)
{
setbkcolor(RGB(v,v,0));
cleardevice();
}
kaishi();
getch();
xiaqi();
//咨询用户是否重新开始
HWNDwnd=GetHWnd();
while(MessageBox(wnd,"游戏结束,\n是否开始新的游戏?
!
","询问",MB_YESNO|MB_ICONQUESTION)==IDYES)
{
//游戏界面初始化
kaishi();
//清空游戏数据
for(inti=0;i<20;i++)
for(intj=0;j<20;j++)
qizi[i][j]=0;
//开始游戏
getch();
xiaqi();
}
closegraph();
}
//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆//************************************************voidkaishi()//函数1:
游戏界面
{
//设置背景颜色
setbkcolor(RGB(255,255,0));
cleardevice();
//设置文字
setcolor(MAGENTA);
setfont(30,0,"华文楷体");
outtextxy(110,550,"黑胜:
");
outtextxy(240,550,"白胜:
");
outtextxy(370,550,"和局:
");
setfont(20,0,"华文楷体");
outtextxy(580,510,"播放音乐");
outtextxy(680,510,"关闭音乐");
outtextxy(780,510,"调节声音");
setcolor(BLUE);
setfont(80,0,"华文隶书");
outtextxy(600,40,"五子棋");
setfont(50,0,"华文楷体");
outtextxy(200,5,"人人对战");
setfont(30,0,"华文楷体");
outtextxy(580,460,"游戏时间:
");
setfont(15,0,"华文楷体");
outtextxy(395,40,"按任意键开始游戏");
//画音乐控制按钮
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(intx=75;x<=500;x+=25)
for(inty=75;y<=500;y+=25)
{
setcolor(BLACK);
rectangle(x,y,x+25,y+25);
}
}
voidjieguo(intN)//函数2:
游戏结果
{
IMAGEimg;
switch(N)
{
case1:
loadimage(&img,"黑.BMP");
hei++;
break;
case2:
loadimage(&img,"白.BMP");
bai++;
break;
case3:
loadimage(&img,"和.BMP");
he++;
break;
}
putimage(580,120,&img);
}
intpanduan(intx,inty,intf)//函数3:
判断棋局胜负{
inti=x/25-3;
intj=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)
return0;
//判断游戏胜负
for(i=0;i<20;i++)
for(j=0;j<20;j++)
{
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)
returnqizi[i][j];
//判断水平向右方向
cnt=1;
for(k=1;k<5;k++)
if(i>=k)
{
if(qizi[i][j]==qizi[i-k][j])cnt++;
if(cnt==5)
returnqizi[i][j];
}
//判断竖直向下方向
for(k=1;k<5;k++)
cnt=1;
if(qizi[i][j]==qizi[i][j+k])cnt++;
if(cnt==5)
returnqizi[i][j];
//判断竖直向上方向
cnt=1;
for(k=1;k<5;k++)
if(j>=k)
{
if(qizi[i][j]==qizi[i][j-k])cnt++;
if(cnt==5)
returnqizi[i][j];
}
//判断斜向下方向
cnt=1;
for(k=1;k<5;k++)
if(qizi[i][j]==qizi[i+k][j+k])cnt++;
if(cnt==5)
returnqizi[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)
returnqizi[i][j];
}
//判断棋盘是否下满
cnt=1;
for(k=0;k<19;k++)
for(s=0;s<19;s++)
if(qizi[k][s]!
=0)
cnt++;
if(cnt==362)
return3;
}
}
return0;
}
voidxiaqi()//函数4:
使用鼠标下棋
{
//获取鼠标信息
MOUSEMSGm;
while(true)
{
//实现游戏计时功能
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);
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)
{
if(m.x>=600&&m.x<=620)
{
mciSendString("openmusic.mp3aliasmymusic",0,0,0);//打开音乐
mciSendString("playmymusicrepeat",0,0,0);//循环播放音乐
}
if(m.x>=700&&m.x<=720)
mciSendString("closemymusic",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)
{
//判断棋子落下的位子
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(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;
}
//判断是下黑棋还是白棋或是不下棋
inti=m.x/25-3;
intj=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;
}
//判断游戏的赢家是谁
N=panduan(m.x,m.y,f);
if(N!
=0)
{
jieguo(N);
break;
}
}
}
}
//*********************结束***********************//☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆