[C++] 253 SDL : テトリス画面にベストスコア5つを表示 その1 ChatGPT

[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]

テトリス画面にベストスコア5つを表示するためのxmlファイル作成関数をChatGPTに書かせました。

いともあっさり書いてくれました。検証はしていませんが以下の通りです。おそらく新データは何位であろうと5番目になるはずなので、後で降順ソートが必要でしょう。

ChatGPT Plusは現在月額20ドルですが、今後DAZNのようにハイペースで値上げさせないためにも競合AIの頑張りに期待したいところです。

Q: xmlファイルのentryデータは5個まででscoreが5つの最小値を上回った場合はデータを入れ替える、というコードを書いてください

以下は5つ以下のエントリーがある場合のコードです。

void AddDataToXML(string fileName, string score, string date, string playTime)
{
    // ファイルをパースする
    pugi::xml_document doc;
    pugi::xml_parse_result result = doc.load_file(fileName.c_str());

    if (!result)
    {
        std::cerr << "XMLの読み込みに失敗しました。" << std::endl;
        return;
    }

    // エントリーを格納するノードを取得する
    pugi::xml_node entryNode = doc.child("data").child("entry");

    // 新しいエントリーを作成する
    pugi::xml_node newEntryNode = doc.append_child("entry");
    newEntryNode.append_child("score").text() = score.c_str();
    newEntryNode.append_child("date").text() = date.c_str();
    newEntryNode.append_child("playtime").text() = playTime.c_str();

    // エントリー数をカウントする
    int entryCount = 0;
    for (pugi::xml_node node = entryNode; node; node = node.next_sibling("entry"))
    {
        entryCount++;
    }

    // エントリーが5個未満の場合は新しいエントリーを追加する
    if (entryCount < 5)
    {
        return;
    }

    // スコアが5つの最小値を上回っている場合は新しいエントリーを追加し、古いエントリーを削除する
    pugi::xml_node minScoreNode = entryNode;
    int minScore = std::atoi(entryNode.child_value("score"));
    for (pugi::xml_node node = entryNode.next_sibling("entry"); node; node = node.next_sibling("entry"))
    {
        int scoreVal = std::atoi(node.child_value("score"));
        if (scoreVal < minScore)
        {
            minScoreNode = node;
            minScore = scoreVal;
        }
    }

    if (std::atoi(score.c_str()) > minScore)
    {
        doc.remove_child(minScoreNode);
        doc.append_child(newEntryNode);
    }

    doc.save_file(fileName.c_str());
}