void loop_xboard(void) { position_t* pos = position_new(); color_t engineColor = C_BLACK; IF.info_depth = info_depth; IF.info_pv = info_pv; IF.info_curmove = info_curmove; IF.search_done = search_done; log_set_mode(MODE_GUI); log_line("xboard mode"); threads_init(pos); while (1) { char* line = get_line(); char* token = arg_start(line); if (!strcmp(token, "new")) { position_reset(pos); TT_clear(); engineColor = C_BLACK; InGame = 1; } else if (!strcmp(token, "quit")) { InGame = 0; threads_search_stop(); break; } else if (!strcmp(token, "protover")) { char* v = arg_next(); if (v && atoi(v) == 2) { send_line("feature myname=\"Walce\""); send_line("feature setboard=1 usermove=1 sigint=0 sigterm=0"); send_line("feature playother=1 ping=1 time=1 colors=0 name=1"); send_line("feature ics=1 analyze=1"); send_line("feature option=\"Search Depth -spin %d 0 20\"", 0); send_line("feature option=\"Thinking Time -spin %d 0 600000\"", 0); send_line("feature done=1"); } } else if (!strcmp(token, "random") || !strcmp(token, "bk") || !strcmp(token, "ics") || !strcmp(token, "name") || !strcmp(token, "accepted") || !strcmp(token, "computer") ) { ; // IGNORE } else if (!strcmp(token, "variant") || !strcmp(token, "rejected") || !strcmp(token, "draw") || !strcmp(token, "hint") || !strcmp(token, "hard") || !strcmp(token, "easy") || !strcmp(token, "rating") || !strcmp(token, "pause") || !strcmp(token, "resume") || !strcmp(token, "memory") || !strcmp(token, "cores") || !strcmp(token, "egtpath") ) { send_line("Error (not implemented yet): %s", token); } else if (!strcmp(token, "?")) { threads_search_stop(); } else if (!strcmp(token, "st")) { token = arg_next(); if (token) TC.l_time = atoi(token) * 1000; } else if (!strcmp(token, "level")) { char* moves = arg_next(); char* min = arg_next(); char* inc = arg_next(); char* sec = min ? strchr(min, ':') : NULL; if (sec) *sec++ = 0; if (inc) { int t = atoi(min) * 60 + (sec ? atoi(sec) : 0); TC.togo = atoi(moves); TC.ctime[0] = TC.otime[0] = t * 1000; TC.ctime[1] = TC.otime[1] = atoi(inc) * 1000; } } else if (!strcmp(token, "time")) { token = arg_next(); if (token) TC.ctime[0] = atoi(token) * 10; } else if (!strcmp(token, "otim")) { token = arg_next(); if (token) TC.otime[0] = atoi(token) * 10; } else if (!strcmp(token, "analyze")) { ModeAnalyze = 1; TC.infinite = 1; engineColor = pos->to_move; threads_search(); } else if (ModeAnalyze && !strcmp(token, "exit")) { threads_search_stop(); ModeAnalyze = 0; TC.infinite = 0; } else if (ModeAnalyze && !strcmp(token, ".")) { //send_line("Error (not implemented yet): %s", token); } else if (!strncmp(line, "result", 6)) { InGame = 0; threads_search_stop(); } else if (!strncmp(line, "force", 5)) { engineColor = C_NONE; } else if (!strcmp(token, "go")) { engineColor = pos->to_move; threads_search(); } else if (!strcmp(token, "playother")) { engineColor = 1 ^ pos->to_move; } else if (!strcmp(token, "white")) { pos->to_move = C_WHITE; engineColor = C_BLACK; } else if (!strcmp(token, "black")) { pos->to_move = C_BLACK; engineColor = C_WHITE; } else if (!strcmp(token, "sd")) { char* d = arg_next(); if (d) TC.l_depth = atoi(d); } else if (!strcmp(token, "ping")) { char* a = arg_rest(); if (a) send_line("pong %s", a); else send_line("pong"); } else if (!strcmp(token, "edit")) { send_line("Error (command not implemented): %s", token); } else if (!strcmp(token, "undo")) { if (!position_unmove(pos)) send_line("Error (command not legal now): %s", token); } else if (!strcmp(token, "remove")) { if (!position_unmove(pos) || !position_unmove(pos)) send_line("Error (command not legal now): %s", token); } else if (!strcmp(token, "setboard")) { char* b = arg_rest(); if (!b) send_line("Error (missing argument): %s", token); else position_set(pos, b); } else if (!strcmp(token, "post")) { ModePost = 1; } else if (!strcmp(token, "nopost")) { ModePost = 1; } else if (!strcmp(token, "option")) { char* o = arg_next_sep('='); char* v = arg_next(); if (!o) log_line("missing option"); else if (!strcmp(o, "Thinking Time")) { if (v) TC.l_time = atoi(v); } else if (!strcmp(o, "Search Depth")) { if (v) TC.l_depth = atoi(v); } else log_line("unknown option: %s", o); } else { if (!strcmp(token, "usermove")) token = arg_next(); threads_search_stop(); move_t move = parse_move(pos, token); if (!move) { send_line("Illegal move: %s", token); } else { position_move(pos, move); position_print(pos, C_WHITE); if (ModeAnalyze || engineColor == pos->to_move) threads_search(); } } } threads_exit(); position_destroy(pos); }
bool SettingScene::init() { if (!DrawLayer::init()) { return false; } this->setKeypadEnabled(true); const CCPoint ORIGIN = Screen::getOrigin(); const CCSize VISIBLE_SIZE = Screen::getVisibleSize(); const float SCALE = Screen::getScaleFactor(); _main_menu = CCMenu::create(); _main_menu->setPosition(ORIGIN); //Back Button CCMenu* menu = _back.start(this, [this](){this->onButtonBackClicked(0);}); this->addChild(menu); // CCLabelTTF * settings = CCLabelTTF::create(_("Settings"), // Fonts::getFontName(), // 60); // settings->setPosition(ccp(ORIGIN.x + VISIBLE_SIZE.width*0.5 + 25/SCALE, // ORIGIN.y + VISIBLE_SIZE.height - 70/SCALE)); // settings->setColor(GameInfo::getInstance()->getTitleColor()); // this->addChild(settings); float up_ellements = 120/SCALE; CCSprite* music = CCSprite::create("settings-menu/music.png"); CCSize music_size = music->getContentSize(); music->removeFromParentAndCleanup(true); CCSprite* buttons = CCSprite::create("settings-menu/node.png"); CCSize buttons_size = buttons->getContentSize(); buttons->removeFromParentAndCleanup(true); float space_between_buttons = buttons_size.height; float free_space_sum_y = VISIBLE_SIZE.height - up_ellements - music_size.height - buttons_size.height*4 - (space_between_buttons-buttons_size.height)*3; float one_free_place = free_space_sum_y/3.0f; one_free_place = MIN(one_free_place, VISIBLE_SIZE.height*0.1); float music_position_y = VISIBLE_SIZE.height - up_ellements - one_free_place - music_size.height/2.0f; float reset_position_y = VISIBLE_SIZE.height - up_ellements - one_free_place*2 - music_size.height - buttons_size.height/2.0f; float restore_position_y = reset_position_y - space_between_buttons; float dev_position_y = restore_position_y - space_between_buttons; float rate_position_y = dev_position_y - space_between_buttons; /////////////////////////////////////////////////////////////////// //Music Button CCPoint position_music(ccp(VISIBLE_SIZE.width*0.35, music_position_y)); _music_button = createButton(CCSprite::create("settings-menu/music.png"), menu_selector(SettingScene::onMusicClicked), position_music, "", getMusicColor()); ////////////////////////////////////////////////////////////////// //Sound Button CCPoint position_sound(ccp(VISIBLE_SIZE.width*0.65, music_position_y)); _sound_button = createButton(CCSprite::create("settings-menu/sound.png"), menu_selector(SettingScene::onSoundClicked), position_sound, "", getSoundColor()); ////////////////////////////////////////////////////////////////// CCPoint position_reset(ccp(VISIBLE_SIZE.width*0.5,reset_position_y)); AnimatedMenuItem* reset_button = createButton(CCSprite::create("settings-menu/node.png"), menu_selector(SettingScene::onResetClicked), position_reset, _("Reset"), GameInfo::getInstance()->getTitleColor()); _buttons.push_back(reset_button); ////////////////////////////////////////////////////////////////// if(GameInfo::getVersion() != Version::Premium) { CCPoint position_restor(ccp(VISIBLE_SIZE.width*0.5,restore_position_y)); AnimatedMenuItem* restor_button = createButton(CCSprite::create("settings-menu/node.png"), menu_selector(SettingScene::onRestorClicked), position_restor, _("Restore"), GameInfo::getInstance()->getTitleColor()); _buttons.push_back(restor_button); } ////////////////////////////////////////////////////////////////// CCPoint position_dev(ccp(VISIBLE_SIZE.width*0.5,dev_position_y)); AnimatedMenuItem* developers_button = createButton(CCSprite::create("settings-menu/node.png"), menu_selector(SettingScene::onDevelopersClicked), position_dev, _("Developers"), GameInfo::getInstance()->getTitleColor()); _buttons.push_back(developers_button); ////////////////////////////////////////////////////////////////// CCPoint position_rate(ccp(VISIBLE_SIZE.width*0.5,rate_position_y)); AnimatedMenuItem* rate_button = createButton(CCSprite::create("settings-menu/node.png"), menu_selector(SettingScene::onRateMeClicked), position_rate, _("Rate"), GameInfo::getInstance()->getNegativeColor()); _buttons.push_back(rate_button); this->addChild(_main_menu); showAnimation(); return true; }