C++游戏实例--五子棋

#include<iostream>
#include<iomanip>
using  namespace  std;
 
const  int  X = 21;  //棋盘行数
const  int  Y = 21;  //棋盘列数
char  p[X][Y];   //定义棋盘
int  m=0; //定义临时点,保存输入坐标
int  n=0;
 
void  display()   //输出棋盘
{
     for ( int  i=0; i<X; i++)
         cout<<setw(3)<<setfill( ' ' )<<i;
     cout<<endl;
     for ( int  i=1; i<Y; i++)
     {
         cout<<setw(3)<<setfill( ' ' )<<i;
         for ( int  j=1;j<X;j++)
             cout<<setw(3)<<setfill( ' ' )<<p[i][j];
         cout<<endl;
     }
     
}
 
void  black()   //黑方落子
{
     cout<< "请黑方输入落子位置:\n"
         << "请输入落子的行数:" ;
     cin>>m;
     cout<< "请输入落子的列数:" ;
     cin>>n;
     if (m<=0||m>=X||n>=Y||n<=0)
     {
         cout<< "超出棋盘范围,请重新输入正确坐标!\n" ;
         black();
     }
     else  if ((p[m][n]==1)||p[m][n]==2)
     {
         cout<< "该点已有棋子,请重新选取落子点!\n" ;
         black();
     }
     else
         p[m][n]=1;  //黑方用1来表示
     system ( "cls" );
     display();
}
 
void  red()   //红方落子
{
     cout<< "请红方输入落子位置:\n"
         << "请输入落子的行数:" ;
     cin>>m;
     cout<< "请输入落子的列数:" ;
     cin>>n;
     if (m>=X||m<=0||n<=0||n>=Y)
     {
         cout<< "超出棋盘范围,请重新输入正确坐标!\n" ;
         red();
     }
     else  if ((p[m][n]==1)||p[m][n]==2)
     {
         cout<< "该点已有棋子,请重新选取落子点!\n" ;
         red();
     }
     else
         p[m][n]=2;  //红方用2来表示
     system ( "cls" );
     display();
}
 
int  evalue()   //只需要判断落子点为中心的九点“米”字是否连续即可
{
     int  k = 0,r = 0;
     /*斜线判断*/
     for (k=3;k<X-2;k++)   //两条,其中的p[k][r]!='-'是排除空子的情况
     {
         for (r=3;r<Y-2;r++)
         {
             if (p[k][r]!= '-' &&p[k-2][r-2]==p[k][r]&&p[k-1][r-1]==p[k][r]&&p[k+1][r+1]==p[k][r]&&p[k+2][r+2]==p[k][r])
                 return  1;
             else  if (p[k][r]!= '-' &&p[k+2][r-2]==p[k][r]&&p[k+1][r-1]==p[k][r]&&p[k-1][r+1]==p[k][r]&&p[k-2][r+2]==p[k][r])
                 return  1;
         }
     }
     /*横线判断*/
     for (k=1;k<X;k++)   //p[k][r]!='-'是排除空子的情况
         for (r=3;r<Y-2;r++)
             if (p[k][r]!= '-' &&p[k][r-2]==p[k][r]&&p[k][r-1]==p[k][r]&&p[k][r+1]==p[k][r]&&p[k][r+2]==p[k][r])
                 return  1;
     /*竖线判断*/
     for (k=3;k<X-2;k++)   //p[k][r]!='-'是排除空子的情况
         for (r=1;r<Y;r++)
             if (p[k][r]!= '-' &&p[k-2][r]==p[k][r]&&p[k-1][r]==p[k][r]&&p[k+1][r]==p[k][r]&&p[k+2][r]==p[k][r])
                 return  1;
     return  0; 
}
 
int  main()
{
     memset (p, '-' ,441);   //初始化为‘-’
     cout<< "欢迎使用简易双人对战五子棋游戏\n"
         << "五子棋棋谱如下:\n" ;
     display();
     while (1)
     {
         red();
         if (evalue())
         {
             cout<< "红方赢!\n" ;
             break ;
         }
         black();
         if (evalue())
         {
             cout<< "黑方赢!\n" ;
             break ;
         }  
     }
     return  0;
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值