小编Eva*_*ran的帖子

如何保存和加载文本模式游戏

我参加了一个用C++ 编写的简单文本游戏gamedev项目.我研究了这个项目,我想我知道如何做所有事情,但我遇到了一个问题:如何保存和加载游戏的建议.我不要我想为我完成这件事,只有你告诉我一个方法.

c++ load save

2
推荐指数
1
解决办法
2780
查看次数

宏观问题

在一个软件项目(一些旧的C编译器)上,我们有很多变量必须保存正常和反转.

有人知道如何制作这样的宏吗?

SET(SomeVariable, 137);
Run Code Online (Sandbox Code Playgroud)

哪个会执行

SomeVariable = 137;
SomeVariable_inverse = ~137;
Run Code Online (Sandbox Code Playgroud)

编辑:

最好的解决方案似乎是:

#define SET(var,value) do { var = (value); var##_inverse = ~(value); } while(0)
Run Code Online (Sandbox Code Playgroud)

谢谢你的回答

c macros

2
推荐指数
2
解决办法
599
查看次数

QPainter彩色文字(语法着色)

我有一个自定义的Qt小部件,我用来显示反汇编,我希望添加语法着色.

目前,我只是将其设置QPen为纯色,构造我想要显示的文本,并将其渲染到QPainter适当的坐标.

问题是,添加语法着色的最佳方法是什么?我想到了一些:

  1. 我可以简单地将着色分成逻辑块,每个块之前都将QPen设置为所需的颜色.
  2. 我可以使用特殊的转义字符来表示调色板中的更改,并一次渲染1个字符.
  3. 我可以对#1进行修改并创建一个列表std::pair<QColor, QString>,然后我可以简单地迭代列表设置颜色并绘制文本,因为我从列表的前面弹出项目.
  4. 完全不同的东西?

我知道我列出的3种方法中的每一种都在技术上有效,但我正在寻找一种非常有效的解决方案.这段代码将被大量调用.由于这是一个交互式调试器,如果此代码速度很慢,快速踩踏或跟踪的人会看到明显的减速.

编辑:我知道QSyntaxHighlighterQTextDocument.主要问题是这些通常不能很好地满足我的目的.我有几个列都有分隔线,可以来回滑动.为了给你一个想法,这是我的调试器截图的链接.正如您所看到的,它根本不像文本文档.实际上它更接近列表或表格.但是已经有一堆定制绘图正在进行,使得正常QTextDocument有点不切实际.

编辑:我是不正确的,似乎QTextDocument可以直接渲染到QPainter.看起来像我需要的!

编辑:目前还不清楚如何控制在哪里,如何QTextDocumentQTextLayout将绘制QPainter.我试图用它们无济于事.因此,如果有人可以提供一个基本的例子,那将非常有帮助.

编辑:我最终能够得到我想要的东西,使用这样的东西:

painter.setPen(default_color);
QTextDocument doc;
doc.setDefaultFont(font());
doc.setDocumentMargin(0);
doc.setPlainText(text);
highlighter_->setDocument(&doc);

painter.save();
painter.translate(x, y);
QAbstractTextDocumentLayout::PaintContext context;
context.palette.setColor(QPalette::Text, painter.pen().color());
doc.draw(&painter, context);
painter.restore();
Run Code Online (Sandbox Code Playgroud)

c++ qt syntax-highlighting qpainter

2
推荐指数
1
解决办法
3062
查看次数

putc和ungetc有什么区别?

int ungetc(int c, FILE *fp)将字符c推回fp,并返回c或EOF错误.

其中int putc(int c, FILE *fp)将字符c写入文件fp并返回写入的字符,或者返回EOF错误.

//这些是K&R的陈述.我发现自己很困惑,因为putc()可以在以后使用getc并且可以工作ungetc.那么具体定义的用途是什么ungetc().

c c++ function

2
推荐指数
1
解决办法
1752
查看次数

长12位数?

我正在尝试使用long12位数字,但是它说"整数常量对于"long"类型来说太大了",我尝试使用C++和Processing(类似于Java).发生了什么,我应该用它做什么?

c++ types digit long-integer

2
推荐指数
1
解决办法
5821
查看次数

getaddrinfo上的段错误()

我在getaddrinfo调用上遇到了分段错误,无法找出原因.它发生在我的服务器和客户端上.一些代码(服务器端)是 -

class TcpServer {
public:

    TcpServer(int);
    ~TcpServer();

    void launchServer();

    void communicate();

private:
    const char* port;
    int fd;
    int comm_fd;
};
Run Code Online (Sandbox Code Playgroud)

在tcpserver.cpp-

void TcpServer::launchServer() {
    int status;

    struct addrinfo hints;
    struct addrinfo *servinfo;  //will point to the results

    //store the connecting address and size
    struct sockaddr_storage their_addr;
    socklen_t their_addr_size;

    //socket infoS
    memset(&hints, 0, sizeof hints); //make sure the struct is empty
    hints.ai_family = AF_INET;  //local address
    hints.ai_socktype = SOCK_STREAM; //tcp
    hints.ai_flags = AI_PASSIVE;     //use local-host address

    //get server info, put …
Run Code Online (Sandbox Code Playgroud)

c c++ sockets bsd segmentation-fault

2
推荐指数
1
解决办法
1164
查看次数

为什么free()会阻止我的程序?

我正在使用free来释放在递归函数中为一堆临时数组分配的内存.我会发布代码,但它很长.当我注释掉这些free()调用时,程序运行不到一秒钟.但是,当我使用它们时,程序运行大约需要20秒.为什么会发生这种情况,如何解决?这就像100左右的MB所以我宁愿不要只留下内存泄漏.

此外,当我运行包含所有启用了性能分析的free()调用的程序时,它会在不到一秒的时间内运行.我不知道这会产生什么影响,但确实如此.

在仅使用一些free()调用之后,似乎有一些特别会导致程序变慢.其余的似乎没有效果.

好的......这是所要求的代码:

void KDTree::BuildBranch(int height, Mailbox** objs, int nObjects)
{
int dnObjects = nObjects * 2;
int dnmoObjects = dnObjects - 1;

//Check for termination
if(height == -1 || nObjects < minObjectsPerNode)
{
    //Create leaf
    tree[nodeIndex] = KDTreeNode();

    if(nObjects == 1)
        tree[nodeIndex].InitializeLeaf(objs[0], 1);
    else
        tree[nodeIndex].InitializeLeaf(objs, nObjects);

    //Added a node, increment index
    nodeIndex++;

    return;
}

//Save this node's index and increment the current index to save space for this node
int thisNodeIndex = nodeIndex;
nodeIndex++;

//Allocate memory for split …
Run Code Online (Sandbox Code Playgroud)

c c++

1
推荐指数
1
解决办法
461
查看次数

C++ - 在返回int的函数中通过引用传递参数

我创建了一个C++程序,以测试通过函数引用传递参数的功能.

#include <iostream>

using namespace std;

int f(int &b) {
    b = b + 1;
    cout << b << endl;
    return b;
}

int main() {
    int t = 10;

    cout << f(t) << " " << t << endl;
    //cout << f(&t) << " " << t << endl;

    system("PAUSE");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

能否请您解释为什么这个程序不会影响t执行f函数后的值?b传递的参数是引用,所以我认为它的值会在程序执行后发生变化,因为我正在使用main函数中的实际变量,而不是它的副本.在这种情况下,我希望它是11,但它不受程序执行的影响.

为什么会这样?

c++ pass-by-reference

1
推荐指数
1
解决办法
2614
查看次数

理解浮点计数器

我有以下简单的代码:

for (float i=0; i<1f; i+=0.1) {
    System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)

我刚刚得到以下结果:

0.0
0.1
0.2
0.3
0.4
0.5
0.6
0.70000005
0.8000001
0.9000001
Run Code Online (Sandbox Code Playgroud)

但我无法理解为什么会这样.拜托,我希望你能告诉我.谢谢.

java

1
推荐指数
1
解决办法
563
查看次数

std :: sort中的错误?

好吧,我通常默认假设错误在我的代码中,但我所看到的对我来说几乎没有意义.


我有一个std::vector<DocumentWidget *>,我希望通过一些相对简单的算法进行排序.这就是我所看到的.

代码如下所示:

std::vector<DocumentWidget *> documents = DocumentWidget::allDocuments();

// NOTE(eteran): on my system, I have observed a **consistent** crash
// when documents.size() == 17 while using std::sort.
std::sort(documents.begin(), documents.end(), [](const DocumentWidget *a, const DocumentWidget *b) {

    int rc = (a->filenameSet_ == b->filenameSet_) ? 0 : a->filenameSet_ && !b->filenameSet_ ? 1 : -1;
    if (rc != 0) {
        return rc < 0;
    }
    if(a->filename_ < b->filename_) {
        return true;
    }
    return a->path_ < b->path_;
});
Run Code Online (Sandbox Code Playgroud)

看起来很简单,但是当我在列表中有第17个项目时它会崩溃!排序谓词显然没有vector以任何方式修改,所以我看不出这是一个问题.地址清理器和valgrind在此之前没有显示任何错误. …

c++ sorting vector segmentation-fault c++11

1
推荐指数
1
解决办法
302
查看次数