简易五子棋的制作c++控制台完成

#include<iostream>
using namespace std;
//C/C++:
// -------------------- 数据设计 --------------------
/*
    棋盘:
        map[i][j]表示坐标(i,j)的值
        0表示空地
        1表示黑子
        2表示白子
    如: map[3][6] = 1  表示(3,6)的位置是黑子
*/
int map[19][19];

// 表示当前回合数  偶数表示黑棋落子  奇数表示白棋落子
// 如: flag = 20 表示当前是第[20]次落子  由黑方落子
int flag;
// -------------------- 数据设计 --------------------


// -------------------- service --------------------
/*
    负责人: 张三
    功能: 初始化游戏数据
        将棋盘的值初始化为0
        当前回合设为黑棋(flag设为0)
    参数: void
    返回值: void
*/
void init();

/*
    *难点1
    负责人: 张三
    功能: 根据传入的坐标(map对应位置)和flag值 判断落点后是否获胜
    参数:
        x: 当前回合落子的x坐标
        y: 当前回合落子的y坐标
    返回值:
        0表示没有获胜
        1表示黑子胜利
        2表示白子胜利
*/
int isWin(int x, int y);

/*
    负责人: 张三
    功能: 在指定位置落子
        如果map[x][y]是空地 则修改map[x][y]的值:改为相应颜色(flag对应颜色)
        否则不操作
    参数:
        x: 当前回合落子的x坐标
        y: 当前回合落子的y坐标
    返回值:
        0表示落子失败 (棋盘已经有子)
        1表示落子成功

*/
int playerMove(int x, int y);
// -------------------- service --------------------



// -------------------- view --------------------
/*
    功能: 展示选项, 玩家可以在这里选择进入游戏, 进入设置或退出游戏
        进入游戏: 调用游戏界面函数gameView();
        进入设置: 敬请期待...
        退出游戏: 调用exit(0);
*/
void menuView();

/*
    负责人: 张三
    功能: 根据map数组 打印游戏棋盘
    参数: void
    返回值: void
*/
void gameView_ShowMap();

/*
    负责人: 张三
    功能: 根据flag的值  打印游戏胜利界面  用户可以按任意键回到主菜单
    参数: void
    返回值: void
*/
void winView();

/*
    *难点2
    负责人: 张三
    功能: 游戏界面整合
        初始化游戏数据(调用函数init())
        while(1){
            打印游戏界面(调用函数gameView_ShowMap())
            接收玩家坐标输入

            落子(调用落子函数playerMove())
                (如果落子失败 重新开始循环)

            判断游戏是否胜利(调用胜利判断函数isWin())
                (如果游戏胜利 调用胜利界面函数 然后结束当前界面)
            切换玩家(修改flag值)
        }
    参数: void
    返回值: void
*/
void gameView();
// -------------------- view --------------------

int main()
{
    menuView();
    return 0;
}

void init() {
    map[19][19] = { 0 };//棋盘清空
    flag = 0;//下棋步数 黑旗回合
    //在此处完成代码
}

int isWin(int x, int y) {
    int player = flag % 2 + 1;//黑旗是1,白棋是2
    //行
    int count = 1;//五子连棋为胜,count记录连起来的个数
    int i = 1;//i相当于坐标 0为原点,为放置棋子的点
    while (map[x][y - i] == player)//右边
    {
        count++;
        i++;

    }

    i = 1;//左边
    while (map[x][y + i] == player)
    {
        count++;
        i++;
    }
    if (count == 5)  return player;


    //列
    //注意初始化
    count = 1;
    i = 1;//i相当于坐标 0为原点,为放置棋子的点
    while (map[x - i][y] == player)//上边
    {
        count++;
        i++;

    }

    i = 1;//i从原点开始
    while (map[x + i][y] == player)//下边
    {
        count++;
        i++;
    }
    if (count == 5) return player;
    //对角线
    count = 1;
    i = 1;//i相当于坐标 0为原点,为放置棋子的点
    while (map[x - i][y - i] == player)//左上边
    {
        count++;
        i++;

    }

    i = 1;//i从原点开始
    while (map[x + i][y + i] == player)//右下边
    {
        count++;
        i++;
    }
    if (count == 5) return player;//五子连棋,对应玩家胜利
    //在此处完成代码
    return 0;//没有胜利

}

int playerMove(int x, int y) {
    if (map[x][y] != 0) return 1;
    //如果这里有棋就不能再下棋,下子失败
    else map[x][y] = flag % 2 + 1;
    //黑棋下子为1,相应次数为偶数
    //白棋下子为2,相应局数为奇数
    return 0;//下子成功
    //在此处完成代码
}

void menuView() {
    cout << "1.进入游戏" << endl;
    cout << "2.进入设置" << endl;
    cout << "3.退出游戏" << endl;
    cout << "请输入选项" << endl;
    int select;
    cin >> select;
    switch (select)
    {
    case  1:
        gameView();
        break;
    case  2:
        cout << "敬请期待...";
        break;
    case 3:
        exit(0);
    }
    //在此处完成代码
}

void gameView_ShowMap() {
    cout << "###################棋盘##################" << endl;
    cout << "   ";
    for (int i = 0; i <= 9; i++)
    {
        cout << i << " ";
    }
    for (int i = 10; i < 19; i++)
    {
        cout << i ;
    }//棋盘最上面一行的坐标数据
    cout << endl;
    for (int i = 0; i < 19; i++)
    {
        
        if (i >= 0 && i <= 9) cout << " ";
        cout << i << " ";//左边一列坐标的设计
        for (int j = 0; j < 19; j++)
        {
            cout << map[i][j] << " ";
            //打印棋盘,用空格间隔
        }
        cout << endl;//每行换行
    }
    //在此处完成代码
}

void winView() {
    int player = flag % 2 + 1;
    if (player == 1)
        cout << "黑棋玩家胜利!游戏结束" << endl;
    else if(player==2)
        cout << "白棋玩家胜利!游戏结束" << endl;
    //在此处完成代码
}

void gameView() {
    init();
    while (1) {
        gameView_ShowMap();
        int player = flag % 2 + 1;//1为黑方,2为白方
        switch(player)//提示哪一方玩家下棋
        {
        case 1:
            cout << "黑棋";
            break;
        case 2:
            cout << "白棋";
            break;

        }
        cout << "玩家落棋,请输入落棋位置坐标,并且以空格分开"
            << endl;
        int x, y;
        cin >> x >> y;//输入坐标值
        int ret = 0;
        int retWin = 0;
        ret = playerMove(x, y);
        //返回值为一,下棋失败重新开始下棋
        if (ret == 1) continue;
        else
        {
            retWin = isWin(x, y);
            if (retWin != 0) //有人赢
            {
                winView();
                break;//有人赢了跳出死循环
            }
            else flag ++;//切换玩家,下一轮下棋

        }


        
    }

    //在此处完成代码
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值