能不能帮我看看这个五子棋程序,能运行,不能落子啊

Cherish_ws 2013-07-03 05:51:37
#include<stdio.h>
#include<graphics.h>
#include<conio.h>
#include<stdlib.h>
#include<windows.h>
#define N 690 //棋盘大小
void printpage(); //打印游戏规则
void MainFace(); //开局打印棋牌
void mouse(); //鼠标响应算法
int Game_Over1 (int a[690][690],int chess_symbol); //判断棋子是否连成‘--’形或‘|’形
int Game_Over2 (int a[690][690],int chess_symbol); //判断棋子是否连成‘/’形
int Game_Over3 (int a[690][690],int chess_symbol); //判断棋子是否连成‘\’形
void main()
{

printpage();
MainFace();
mouse();

}
void printpage()
{
char select;
printf("\t\t\t欢迎进入五子棋世界\n");
printf("游戏规则:\n");
printf("1、玩家分别持黑棋和白棋\n");
printf("2、玩家轮流下棋,单击鼠标左键落子\n");
printf("3、棋子落在两线交叉处\n");
printf("4、允许玩家悔棋一步\n");
printf("5、三局两胜\n");
printf("6、是否遵守规则并开局(y/n)\n");
scanf("%c",&select);
fflush(stdin);
if(select=='y'||select=='Y')
{
MainFace();
}
if(select=='n'||select=='N')
{
exit(0);
}
else
{
printf("非法输入,只能接受(Y,y,N,n)\n1秒后继续选择");
Sleep(1000);
system("cls");
printpage();
}
}
void MainFace() //打印23*23的方格棋盘,红线,白色背景
{
int x;
initgraph(690,690);
setbkcolor(LIGHTGRAY);
cleardevice();
setcolor(RED);
for(x=0;x<=690;x+=30)
{
line(x,0,x,690);
line(0,x,690,x);
}
}
int Game_Over1 (int a[N][N],int chess_symbol)
{
int i,j,k,l,r;
for(i=0;i<N;i++)
for(k=0;k<N-4;k++)
{
l=r=0;
for(j=k;j<k+5;j++)
{
if(a[i][j]==chess_symbol)
l++;
if(a[j][i]==chess_symbol)
r++;
}
if(l==5||r==5)
return 1;
}
return 0;
}
int Game_Over2 (int a[N][N],int chess_symbol)
{
int i,j,k,m,LeftDown,RightUp;
for(m=0;m<N-4;m++)
for(k=0;k<N-4;k++)
{
RightUp=LeftDown=0;
for(i=k,j=k+m;i<k+5;i++,j++)
{
if(a[i][j]==chess_symbol)
RightUp++;
if(a[j][i]==chess_symbol)
LeftDown++;
}
if(RightUp==5||LeftDown==5)
return 1;
}
return 0;
}
int Game_Over3 (int a[N][N],int chess_symbol)
{
int i,j,k,m,LeftUp,RightDown;
for(m=N-1;m>=4;m--)
for(k=0;k<m+1-4;k++)
{
LeftUp=RightDown=0;
for(i=k,j=m-k;i<k+5;i++,j--)
{
if(a[i][j]==chess_symbol)
LeftUp++;
if(a[N-1-j][N-1-i]==chess_symbol)
RightDown++;
}
if(RightDown==5||LeftUp==5)
return 1;
}
return 0;
}
void mouse() //鼠标响应
{
int x,y ;
int n=1 ; //n初始化为1,n=1或2分别标记两个玩家
int i,j ;
int chess[N][N]={0}; //存放棋盘的二维数组,初值为0
int v[2]={0}; //v[0]和v[1]分别标记玩家胜局次数
char ch;
MOUSEMSG m;

while(true)
{
m=GetMouseMsg(); //获得鼠标信息
if(m.uMsg==WM_LBUTTONDOWN)
{
x=m.x%30 ; //将鼠标左键点击处坐标转化为棋盘线相交处坐标,即确定落子位置
if(x<=15)m.x=m.x-x ;
else m.x=m.x+(30-x);
y=m.y%30 ;
if(y<=15)m.y=m.y-y ;
else m.y=m.y+(30-y);
i=m.x/30 ;
j=m.y/30 ;

if(chess[i][j]!=0)continue ; // 防止在一个地方重复下棋,chess[i][j]==1为白子,chess[i][j]==2为黑子
if(n==1) //判断玩家
{
setcolor(WHITE);
setfillcolor(WHITE);
fillcircle(m.x,m.y,6); //白棋落子
chess[i][j]=1 ; //标记已落棋子位置
if(Game_Over1(chess,1)==1||Game_Over2(chess,1)==1||Game_Over3(chess,1)==1)//判断是否赢棋
{
setcolor(BLACK);
outtextxy(200,200,"此局白子获胜"); //如赢棋,在棋盘上打印"此局白子获胜"
v[0]++; //胜局次数加1
if(v[0]==2) //判断胜局次数是否达到2次,三局两胜
{
outtextxy(200,300,"三局两胜,白子胜两局,白子胜出");
break ;
}
outtextxy(250,250,"是否继续下棋:Y or N");
ch=getch();
if(ch=='N')break ; //判断是否继续下棋
else
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
chess[i][j]=0 ;
setbkcolor(LIGHTGRAY);
cleardevice();
setcolor(RED);
for(x=0;x<=690;x+=30)
{
line(x,0,x,690);
line(0,x,690,x);
}
}
}
n=2 ; //标记下次落子玩家2
}
else //如果玩家不是1
{
chess[i][j]=2 ; //标记以落子位置
setcolor(BLACK);
setfillcolor(BLACK);
fillcircle(m.x,m.y,6); //黑棋落子
if(Game_Over1(chess,2)==1||Game_Over2(chess,2)==1||Game_Over3(chess,2)==1)//判断是否赢棋
{
setcolor(BLACK);
outtextxy(200,200,"此局黑子胜利");
v[1]++;
if(v[1]=2)
{
outtextxy(200,200,"三局两胜,黑子胜两局,黑子胜出");
break ;
}
outtextxy(250,250, "是否继续下棋:Y or N");
ch=getch();
if(ch=='N')break ;
else
{
for(i=0;i<N;i++)
for(j=0;j<N;j++)
chess[i][j]=0 ;
setbkcolor(LIGHTGRAY);
cleardevice();
setcolor(RED);
for(x=0;x<=690;x+=30)
{
line(x,0,x,690);
line(0,x,690,x);
}

}
}
n=1; //标记下次落子玩家1
}
}
if(m.uMsg==WM_RBUTTONUP)break;
}
}
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
add1 2013-07-08
  • 打赏
  • 举报
回复
自己和自己下?
c090869 2013-07-07
  • 打赏
  • 举报
回复
#define N 690 可能是 #define N 24 可惜,不能试机,改天要换tc了
赵4老师 2013-07-04
  • 打赏
  • 举报
回复
代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。 提醒:再牛×的老师也无法代替学生自己领悟和上厕所! 单步调试和设断点调试是程序员必须掌握的技能之一。
ForestDB 2013-07-04
  • 打赏
  • 举报
回复
有没有想过为什么没人回答?
Cherish_ws 2013-07-03
  • 打赏
  • 举报
回复
Cherish_ws 2013-07-03
  • 打赏
  • 举报
回复
Cherish_ws 2013-07-03
  • 打赏
  • 举报
回复
零回复啊零回复
Cherish_ws 2013-07-03
  • 打赏
  • 举报
回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧