c++ - wxWidgets:如何在不将控制权传递给它的情况下制作图形用户界面?

标签 c++ user-interface wxwidgets

我做了一个简单的 score4 游戏。这是一个项目,所以我制作了一个 CLI IO 系统。

为了将来升级,我把整个IO接口(interface)(移动选择,板子显示)都放在一个类中的一堆虚函数中。所以我通过使用 iostream 实现这些功能来创建 CLI 接口(interface)。我像这样初始化这个接口(interface):

IOInterface *ii = new IOConsoleInterface();

现在我想制作游戏的 wxWidgets 界面并使用 -gui 开关运行它。我很容易制作框架,但现在我想最终连接这些部分,当我初始化 GUI 时,它进入无限循环并且不会返回到 Score4 游戏循环。

游戏循环调用 ii 函数,所以我不需要 wxWidgets 中的控件。我希望它就在那里并执行游戏循环命令它执行的操作。

提前谢谢你

编辑:Score4 不是 wx 应用程序。我只想对其应用一些 wxGUI 类。

Edit2:游戏循环代码:

“ii”是InputInterface,一个获取信息的对象 喜欢移动和重玩答案

“oi”是OutpuInterface,一个画板的对象, 告诉玩家轮到他了

void Mechanics::gameLoop(){

bool newGame = true;
int gameCounter = 0;

while(newGame){

    short choice = 0;
    short turn;
    gameCounter++;

    currentPlayer = decideStart(gameCounter);
    board.clear();
    oi->refreshTable(board, p1,p2); 


    for (turn = 1; turn <= ROWS*COLS; turn++){

        oi->playerPrompt(currentPlayer);

        do{
            if (currentPlayer->isAI == 0)
                choice = ii->getPlayersMove(currentPlayer);
            else{
                GameInstance gi = exportGameInstance();
                choice = currentPlayer->chooseMove(gi);     // AI's movement
            }

        } while (!(board.checkMoveValidity(choice)));   //breaks when move is valid--> when condition is >0

        board.move(choice,currentPlayer);

        oi->moveAnimation(choice,currentPlayer);

        oi->refreshTable(board, p1,p2); 

        if (board.winConditionCheck(currentPlayer))
            break;

        changeCurrentPlayer();
    }

    if (turn > ROWS*COLS)       //draw
        oi->draw_conclusion();
    else
        oi->win_loss_conclusion(true,currentPlayer);


    newGame = ii->newGamePrompt();
}

    delete ii;
    delete oi;
                    // GAME ENDS HERE

最佳答案

您需要在 GUI 应用程序中运行事件循环,没有(合理的)解决方法。因此,虽然您可以在不进入事件循环的情况下使用例如初始化 wxWidgets wxEntryStart(),稍后你仍然需要运行它。

如果你想同时拥有控制台和 GUI 界面,最好是在这两种情况下都运行事件循环,除非你在前一种情况下运行自己的事件循环,在后者中运行 wx 一个。

关于c++ - wxWidgets:如何在不将控制权传递给它的情况下制作图形用户界面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987382/

相关文章:

c++ - 将 map<string, pair> 传输到 vector

c++ - 自定义 C++ 类上的错误

c++ - native GUI 的解决方案是什么?

c++ - 使用 GCC-4.8.1 在 MinGW 上编译 wxWidgets-2.8.12 时出错

c++ - MFC:嵌入式子对话框未显示在父对话框中

python - 如何仅在Python Tkinter中关闭TopLevel窗口?

c++ - HTML 渲染器插件,C++ 代码

python - 如何关闭 MDIParentFrame 中的所有 MDIChildFrame?

c++ - 在 Ubuntu 上使用 wxWidgets2.9.3 出错

c++ - 如何使用 cin.get() 来检测空的用户输入?