c++实现人机成语接龙

        以下是用C++实现的人机成语接龙:

#include <iostream>
#include <string>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;

vector<string> idioms{"金蝉脱壳", "百里挑一", "金玉满堂", "背水一战", "霸王别姬", "天上人间", "不吐不快", "海阔天空", "情非得已", "滴水不漏"};

bool isLegal(const string& lastWord, const string& newWord) // 判断新成语是否合法
{
    if (newWord.empty()) return false;
    if (lastWord.empty()) return true;
    if (lastWord.back() != newWord.front()) return false;
    for (const auto& idiom : idioms)
    {
        if (idiom == newWord) return false;
    }
    return true;
}

string generateWord(const string& lastWord) // 生成新成语
{
    srand(static_cast<unsigned int>(time(nullptr)));
    vector<string> temp;
    for (const auto& idiom : idioms)
    {
        if (lastWord.empty() || lastWord.back() == idiom.front()) temp.push_back(idiom);
    }
    if (temp.empty()) return "";
    return temp[rand() % temp.size()];
}

int main()
{
    string lastWord;
    while (true)
    {
        cout << "请输入成语(不要带句号):";
        string newWord;
        getline(cin, newWord);
        if (!isLegal(lastWord, newWord))
        {
            cout << "你输错了,请重新输入!" << endl;
            continue;
        }
        lastWord = newWord;
        cout << "计算机回答:" << generateWord(lastWord) << endl;
    }
    return 0;
}

        此程序使用了vector存储成语库,通过isLegal函数判断新成语是否合法,通过generateWord函数生成新成语。主函数中不断循环读入用户输入的成语,并调用以上两个函数进行判断和生成新成语。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
五子棋是一种非常古老的游戏,也是一种非常常见的人机对战游戏。下面是一个简单的C++五子棋人机对战项目实现的示例: 1. 定义棋盘类 首先,我们需要定义一个棋盘类。在这个类中,我们需要定义棋盘的大小、棋子的状态(黑、白、空)、以及各种棋子的位置等信息。 ```cpp // 定义棋盘类 class ChessBoard { public: ChessBoard(int boardSize); // 构造函数,初始化棋盘 ~ChessBoard(); // 析构函数,释放棋盘内存 void reset(); // 重置棋盘 bool setChessman(int row, int col, ChessmanType type); // 在指定位置下子 ChessmanType getChessman(int row, int col) const; // 获取指定位置的棋子状态 bool isFull() const; // 判断棋盘是否已满 private: int m_boardSize; // 棋盘大小 ChessmanType** m_board; // 棋盘数组,存储各个位置的棋子状态 }; ``` 2. 定义AI类 接下来,我们需要定义一个AI类,用于计算机与人类玩家交互并生成下一步的走法。在这个类中,我们需要实现一个算法来判断哪一步最有可能赢得比赛。 ```cpp // 定义AI类 class AI { public: AI(ChessBoard* board, ChessmanType aiType); // 构造函数,初始化AI ~AI(); // 析构函数,释放AI内存 void getNextStep(int& row, int& col); // 获取下一步走法 private: ChessmanType m_aiType; // AI的棋子类型(黑或白) ChessBoard* m_board; // 棋盘 }; ``` 3. 定义游戏类 最后,我们需要定义一个游戏类,用于处理游戏的流程和逻辑。在这个类中,我们需要实现人机交互、判断胜负、判断游戏是否结束等功能。 ```cpp // 定义游戏类 class Game { public: Game(int boardSize); // 构造函数,初始化游戏 ~Game(); // 析构函数,释放游戏内存 void start(); // 开始游戏 private: ChessBoard* m_board; // 棋盘 AI* m_ai; // AI bool m_isPlayerTurn; // 当前是否是玩家回合 bool m_isGameOver; // 游戏是否结束 }; ``` 以上是一个简单的C++五子棋人机对战项目的实现示例。当然,这只是一个简单的示例,实际的实现可能会更加复杂,需要根据具体的需求进行调整和修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy银河

你的鼓励是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值