C++实现简易的五子棋游戏

 更新时间:2022年05月05日 11:37:00   作者:shandy1012  
这篇文章主要为大家详细介绍了C++实现简易的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C++实现简易五子棋游戏的具体代码,供大家参考,具体内容如下

//用c++实现五子棋
#include <iostream>
#include <cstdlib>
#include "getch.h"

using namespace std;

enum Role{RED=99,BLUE};

class Gobang
{
    char board[15][15];
    int key_x,key_y;
    Role role;
public:
    Gobang(int key_x=7,int key_y=7,Role role=RED):key_x(key_x),key_y(key_y),role(role) {}

    void start(void)
    {
        for(;;)
        {
            show_board();

            get_key();

            if(check_key())
            {
                show_board();
                printf("%d\n",role);
                cout << "恭喜" << (role==RED?"红方":"蓝方") << "胜利!" << endl;
                break;
            }
            
            change_role();
        }
    }

    // 显示棋盘
    void show_board(void)
    {
        system("clear");
        printf("  ");
        for(int i=0; i<15; i++)
        {
            printf(" %c",'A'+i);
        }
        printf("\n");

        for(int x=0; x<15; x++)
        {
            printf("%2d",x+1);
            for(int y=0; y<15; y++)
            {
                if(RED==board[x][y])
                {
                    printf("\33[31m");
                    printf(" @");
                    printf("\33[0m");
                }
                else if(BLUE == board[x][y])
                {
                    printf("\33[34m");
                    printf(" #");
                    printf("\33[0m");
                }
                else
                {
                    printf(" *");
                }
            }
            printf("\n");
        }
    }


    // 获取棋子
    void get_key(void)
    {
        for(;;)
        {
            // 设置光标的位置
            printf("\33[%d;%dH",key_x+2,(key_y+2)*2);
            switch(getch())
            {
                case 183: key_x>0 && key_x--; break;
                case 184: key_x<15 && key_x++; break;
                case 185: key_y<15 && key_y++; break;
                case 186: key_y>0 && key_y--; break;
                case 10:if(RED!=board[key_x][key_y] && BLUE!=board[key_x][key_y])
                {
                    board[key_x][key_y] = role;
                    return;
                }
            }
        }
    }

    size_t count_key(int off_x,int off_y)
    {
        size_t count = 0;
        for(int x=key_x+off_x,y=key_y+off_y; 
            x>=0 && x<15 && y>=0 && y<15 && board[x][y] == board[key_x][key_y]; x+=off_x,y+=off_y)
        {
            count++;
        }
        return count;
    }

    // 检查是否有5子产生
    bool check_key(void)
    {
        if(4 <= count_key(0,-1)+count_key(0,1)) return true;
        if(4 <= count_key(-1,0)+count_key(1,0)) return true;
        if(4 <= count_key(-1,-1)+count_key(1,1)) return true;
        if(4 <= count_key(-1,1)+count_key(1,-1)) return true;
        return false;
    }

    // 切换角色
    void change_role(void)
    {
        role = (RED==role?BLUE:RED);
    }
};

int main() 
{
    Gobang b;
    b.start();
}

效果图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 关于C++中的static关键字的总结

    关于C++中的static关键字的总结

    C++的static有两种用法:面向过程程序设计中的static和面向对象程序设计中的static。前者应用于普通变量和函数,不涉及类;后者主要说明static在类中的作用
    2013-09-09
  • 详解C++中的析构函数

    详解C++中的析构函数

    这篇文章主要介绍了C++中的析构函数的相关知识,文中讲解非常详细,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-06-06
  • C语言中main函数两个参数的作用

    C语言中main函数两个参数的作用

    这篇文章主要介绍了C语言中main函数两个参数的作用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • C语言实现全排列算法模板的方法

    C语言实现全排列算法模板的方法

    这篇文章主要介绍了C语言实现全排列算法模板的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • C++排序算法之插入排序解析

    C++排序算法之插入排序解析

    这篇文章主要介绍了C++排序算法之插入排序解析,将数组分为有序表和无序表,每次从有序表中取出一个元素,插入到有序表的适当位置,每遍历一次,有序表中元素增加一个,无序表中元素个数减少一个,重复n-1次,完成排序,需要的朋友可以参考下
    2023-10-10
  • Java C++ 算法题解leetcode669修剪二叉搜索树示例

    Java C++ 算法题解leetcode669修剪二叉搜索树示例

    这篇文章主要为大家介绍了Java C++ 算法题解leetcode669修剪二叉搜索树示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C语言链表实现图书管理系统

    C语言链表实现图书管理系统

    这篇文章主要为大家详细介绍了C语言链表实现图书管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • C语言函数的递归和调用实例分析

    C语言函数的递归和调用实例分析

    一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层
    2013-07-07
  • C++ 基础编程之十进制转换为任意进制及操作符重载

    C++ 基础编程之十进制转换为任意进制及操作符重载

    这篇文章主要介绍了C++ 基础编程之十进制转换为任意进制及操作符重载的相关资料,需要的朋友可以参考下
    2017-02-02
  • 字典树的基本知识及使用C语言的相关实现

    字典树的基本知识及使用C语言的相关实现

    这篇文章主要介绍了字典树的基本知识及使用C语言的相关实现,这也是ACM等计算机考试和竞赛题目的基本知识,需要的朋友可以参考下
    2015-08-08

最新评论