简易的控制台五子棋(C++)

黑夜给了我黑色的眼睛~最近用c++写了个控制台的双人版的五子棋,算是巩固自己的基本编程能力吧,但是有关左下到右上斜线的判断输赢算法还没写出来,以后想写再写吧!

//五子棋小游戏
#include <iostream>
#include <bits/stdc++.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
static int edge = 15;
char panel[15][15];
int _panel_[15][15];
void initPanel(int _psize){
     for(int i=0;i<_psize;i++)
        for(int j=0;j<_psize;j++){
            _panel_[i][j] = 2;
            panel[i][j] = '.';
        }
}

void outputPanel(int Psize){
    printf("\t\t\t\t\t\t------------------------------------------------\n");
    printf("\t\t\t\t\t\t\t\t五子棋大战\n");
    printf("\n");
    printf("\t\t\t\t\t\t");
    for(int i=0;i<=Psize;++i){
        if(i<9) printf("%d  ",i);
        else printf("%x  ",i);
    }
    printf("\n");
    //输出键盘
    for(int i=0;i<Psize;++i){
        printf("\t\t\t\t\t\t");
        if(i<9)
        {
            printf("%d  ",1+i);
        }
        else
        {
            printf("%x  ",i+1);
        }
        for(int j=0;j<Psize;++j){
            printf("%c  ",panel[i][j]);
        }
        printf("\n");
    }
     printf("\n");
}

int judgeGame(int psize,int flag,int posX,int posY)//判断是否结束
{
   int distance = psize - 4;
   int t = 0;
   //纵向判断
   for(int i=0;i<distance;++i){
       while(i<distance && _panel_[i][posY] == flag){
            if(++t == 5) return 1;
            ++i;
       }
        t = 0;
   }

   //横向判断
   t = 0;
   for(int i=0;i<distance;++i){
       while(i<distance && _panel_[posX][i] == flag){
           if(++t == 5) return 1;
           ++i;
       }
       t = 0;
   }

   //斜判断
   //左上到右下
   t = 0;       
   int begin = posX < posY ? posX : posY;
   int beginX = posX - begin ;
   int beginY = posY - begin ;
    for(;beginX<distance,beginY<distance;++beginX,++beginY){
        if(_panel_[beginX][beginY] == flag && _panel_[beginX+1][beginY+1] == flag && _panel_[beginX+2][beginY+2] == flag &&
        _panel_[beginX+3][beginY+3] == flag && _panel_[beginX+4][beginY+4] == flag){
            return 1;
        }
    }
    //左下到右上
    // beginX = posX - begin;
    // beginY = posY - begin;
    //  for(;beginX<distance,beginY<distance;++beginX,++beginY){
    //     if(_panel_[beginX][beginY] == flag && _panel_[beginX+1][beginY+1] == flag && _panel_[beginX+2][beginY+2] == flag &&
    //     _panel_[beginX+3][beginY+3] == flag && _panel_[beginX+4][beginY+4] == flag){
    //         return 1;
    //     }
    // }
   return 0;
}

void play(int x,int y,int flag){
    panel[x][y] = (flag==1)?'#':'@';
    _panel_[x][y] = flag;
}


int main(int argc, char const *argv[])
{
    int32_t _psize = sizeof(panel) / sizeof(panel[0]);
    initPanel(_psize);
    outputPanel(_psize);
    int x,y;
    int flag = 1;
    while(cin >> x >> y){
        flag = flag xor 1;
       
        play(--x,--y,flag);//下棋
        //判断输赢
        if(judgeGame(_psize,flag,x,y) == 1){
            cout << "your win!" <<endl;
            break;
        }
        std::system("clear");
        outputPanel(_psize);
        printf(flag==1?"我方下棋:\n":"电脑下棋:\n");
    }
    return 0;
}

在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值