⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guess.cpp

📁 全新的纯内存式实时数据库
💻 CPP
字号:
/******************************************************************* *                                                                 * *  guess.cpp                                                      * *                                                                 * *  This file is a part of the eXtremeDB source code               * *  Copyright (c) 2001-2007 McObject LLC                           *  *  All Rights Reserved                                            * *                                                                 * *******************************************************************/#include "guess.h"void input(char const* prompt, char* buf, size_t buf_size){    char* p;    do {        printf(prompt);        *buf = '\0';        fgets(buf, (int)buf_size, stdin);        p = buf + strlen(buf);    } while (p <= buf+1);    if (*(p-1) == '\n') {        *--p = '\0';    }}bool askQuestion(char const* question) {    char answer[MAX_STR_LENGTH];    input(question, answer, sizeof answer);    return *answer == 'y' || *answer == 'Y';}Reference* GuessGame::whoIsIt(Reference* parent) {    char animal[MAX_STR_LENGTH];    char difference[MAX_STR_LENGTH];    input("What is it ? ", animal, sizeof animal);    input("What is a difference from other ? ", difference, sizeof difference);        Record* animalNode = table->createRecord(trans);    questionField->set(animalNode, String::create(animal));        Record* diffNode = table->createRecord(trans);    questionField->set(diffNode, String::create(difference));    yesField->set(diffNode, table->getRID(animalNode));    noField->set(diffNode, parent);    return table->getRID(diffNode);}Reference* GuessGame::dialog(Record* rec) {    char question[MAX_STR_LENGTH+16];    sprintf(question, "May be %s (y/n) ? ", questionField->get(rec)->stringValue()->cstr());    if (askQuestion(question)) {        Reference* yes = (Reference*)yesField->get(rec);        if (yes->isNull()) {            printf("It was very simple question for me...\n");        } else {            Reference* clarify = dialog(yes->dereference());            if (clarify != NULL) {                yesField->set(rec, clarify);                rec->updateRecord();            }        }    } else {        Reference* no = (Reference*)noField->get(rec);        if (no->isNull()) {            if (yesField->get(rec)->isNull()) {                return whoIsIt(table->getRID(rec));            } else {                noField->set(rec, whoIsIt(NULL));                rec->updateRecord();            }        } else {            Reference* clarify = dialog(no->dereference());            if (clarify != NULL) {                noField->set(rec, clarify);                rec->updateRecord();            }        }    }    return NULL;}void GuessGame::loadMetadata(DataSource* source){    Iterator<Field>* fields = source->fields();    while (fields->hasNext()) {        Field* f = fields->next();        String* name = f->name();        if (name->compare("yes") == 0) {            yesField = f;        } else if (name->compare("no") == 0) {            noField = f;        } else if (name->compare("question") == 0) {            questionField = f;        }    }    assert(yesField != NULL);    assert(noField != NULL);    assert(questionField != NULL);    table = yesField->table();}void GuessGame::play(){    DataSource* result;    Cursor* cursor;    engine.open("guessdb", guessdb_get_dictionary(), DATABASE_SIZE, PAGE_SIZE, MAP_ADDRESS);    while (askQuestion("Think of an animal. Ready (y/n) ? ")) {        result = engine.executeQuery("select * from Guess for update");        if (table == NULL) {             loadMetadata(result);        }        trans = result->currentTransaction();        cursor = result->records();        if (cursor->hasNext()) {            cursor->next(); // first question is in record number 2            dialog(cursor->next());         } else {            whoIsIt(NULL);        }        result->release();    }    engine.close();    printf("End of the game\n");}GuessGame::GuessGame() {    yesField = noField = questionField = NULL;    table = NULL;}int main() {    GuessGame game;    game.play();    return 0;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -