//移棋第三步:不想移棋,把棋子放回去 void board::move_cancel() { if (!isSelected) { //cout << "move cancel error : 没有选中棋子,怎么放回去???" << endl; } int x, y; data_itoxy(selected_chess,x, y); isSelected = false; if (lay(selected_color, x, y)) { m_curr_color[x][y] = m_chess_pos; m_chess[m_chess_pos] = selected_chess; isSelected = false; /*string c_color; switch (selected_color) { case WHITE:c_color = "后手"; break; case BLACK:c_color = "先手"; break; case NONE:c_color = "没有"; break; default:c_color = "未知"; break; }*/ //cout << c_color << "方把棋子放回到(" << x << ',' << y << ')' << endl; } else { //cout << "出错:不知道为什么放不回去棋子???内核有问题" << endl; } //return false; }
static void append_engine(gchar * dlname) { gchar * can; gchar * err; (void) dlerror(); void * hand = dlopen(dlname,RTLD_NOW); err = dlerror(); if (!hand || err) { g_warning(err); if (hand) dlclose(hand); return; } can = canonize_name(dlname); if (engine_is_unique(can)) { layout_settings_proc lay; lay = dlsym(hand,"layout_engine_settings"); if ((err=dlerror())) g_warning(err); if (lay) { get_meta_info_proc meta; EngineData * d = malloc(sizeof(EngineData)); GtkTreeIter i; const gchar * format = "<b>%s</b> (%s)\n" "<i><small>%s</small></i>"; meta = dlsym(hand,"get_meta_info"); if ((err=dlerror())) g_warning(err); d->meta.description=g_strdup("No Description"); d->meta.version=g_strdup("0.0"); d->meta.last_compat=g_strdup("0.0"); d->meta.icon=gtk_widget_render_icon(EngineCombo,GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_LARGE_TOOLBAR,"themeengine"); if (meta) meta(&(d->meta)); else g_warning("Engine %s has no meta info, please update it, using defaults.",dlname); d->dlname = dlname; d->canname = can; d->vbox = gtk_vbox_new(FALSE,2); g_object_ref(d->vbox); lay(d->vbox); EngineList = g_slist_append(EngineList,d); gtk_list_store_append(EngineModel,&i); gtk_list_store_set(EngineModel,&i,ENGINE_COL_DLNAME,d->dlname,ENGINE_COL_NAME,d->canname, ENGINE_COL_VER,d->meta.version,ENGINE_COL_LAST_COMPAT,d->meta.last_compat, ENGINE_COL_ICON,d->meta.icon,ENGINE_COL_MARKUP, g_markup_printf_escaped(format,d->canname,d->meta.version,d->meta.description), -1); //gtk_combo_box_prepend_text(GTK_COMBO_BOX(EngineCombo),d->canname); } } dlclose(hand); }
//移棋第二步:在新位置下棋 bool board::move_step(int x, int y) { if (isSelected) { string c_color; switch (selected_color) { case WHITE:c_color = "白"; break; case BLACK:c_color = "黑"; break; case NONE:c_color = "没有颜"; break; default:c_color = "未知"; break; } if (lay(selected_color, x, y)) { int b_x(0), b_y(0); data_itoxy(selected_chess, b_x, b_y); m_chess[m_curr_color[b_x][b_y]] = data_xytoi(x, y); m_curr_color[x][y] = m_curr_color[b_x][b_y]; m_curr_color[b_x][b_y] = 0; cout << c_color << "方把(" << b_x << ',' << b_y << ")移动到(" << x << ',' << y << ')' << endl; isSelected = false; pre_chess = data_xytoi(x, y); return true; } else { int b_x(0), b_y(0); data_itoxy(selected_chess, b_x, b_y); cout << "错误:在(" << b_x << ',' << b_y << ")处不能放下" << c_color << "色棋子,移棋失败" << endl; return false; } } else { cout << "错误:未选中棋子!" << endl; return false; } }
bool operator()() const { mapnik::Map m(256,256,"+init=epsg:3857"); mapnik::parameters params; params["type"]="memory"; auto ds = std::make_shared<mapnik::memory_datasource>(params); // add whitespace to trigger phony "reprojection" mapnik::layer lay("layer",m.srs() + " "); lay.set_datasource(ds); lay.add_style("style"); m.add_layer(lay); // dummy style to ensure that layer is processed m.insert_style("style",mapnik::feature_type_style()); // dummy bbox, but "valid" because minx and miny are less // with an invalid bbox then layer.visible() returns false // and the initial rendering setup is not run m.zoom_to_box(mapnik::box2d<double>(-1,-1,0,0)); for (unsigned i=0;i<iterations_;++i) { mapnik::image_rgba8 im(256,256); mapnik::agg_renderer<mapnik::image_rgba8> ren(m,im); ren.apply(); } return true; }
//悔棋,p1:现在坐标,p2=为前坐标;mode=0下棋,1移棋 bool board::back(bool mode, int p1, int p2) { int current_x(0), current_y(0); data_itoxy(p1, current_x, current_y); int pre_x(0), pre_y(0); data_itoxy(p2, pre_x, pre_y); if (retract(static_cast<CHESS_COLOR>(m_curr_color[current_x][current_y] % 2), current_x, current_y)) { if (mode == 0) { //下棋 m_curr_color[current_x][current_y] = 0; pre_chess = p2; --m_chess_num; return true; } else { //移棋 m_curr_color[pre_x][pre_y] = m_curr_color[current_x][current_y]; m_curr_color[current_x][current_y] = 0; lay(static_cast<CHESS_COLOR>(m_curr_color[pre_x][pre_y] % 2), pre_x, pre_y); pre_chess = p2; return true; } } else { string c_color; switch (m_curr_color[current_x][current_y]%2) { case WHITE:c_color = "白"; break; case BLACK:c_color = "黑"; break; case NONE:c_color = "没有颜"; break; default:c_color = "未知"; break; } cout << "不能拿起在(" << current_x << ',' << current_y << ")的" << c_color << "色棋子!" << endl; return false; } }
//移棋第三步:不想移棋 bool board::move_cancel() { int x, y; data_itoxy(selected_chess,x,y); isSelected = false; if (lay(selected_color, x, y)){ string c_color; switch (selected_color) { case WHITE:c_color = "白"; break; case BLACK:c_color = "黑"; break; case NONE:c_color = "没有颜"; break; default:c_color = "未知"; break; } cout << c_color << "方把棋子放回到(" << x << ',' << y << ')' << endl; } else { cout << "出错:不知道为什么放不回去棋子???内核有问题" << endl; } return false; }
//下棋 bool board::step_inside(int x, int y) { if (selected_color != (m_chess_num + 1) % 2) { //cout << "step_inside error: 颜色对不上????" << endl; return 0; } CHESS_COLOR color = static_cast<CHESS_COLOR>((m_chess_num + 1) % 2); /*string c_color; switch (color) { case WHITE:c_color = "后手"; break; case BLACK:c_color = "先手"; break; case NONE:c_color = "没有"; break; default:c_color = "未知"; break; }*/ //who_step++; if (lay(color, x, y)) { m_chess_pos=++m_chess_num; m_chess[m_chess_pos] = data_xytoi(x, y); m_curr_color[x][y] = m_chess_pos; //cout << c_color << "方在(" << x << ',' << y << ")下子" << endl; pre_chess = data_xytoi(x, y); return true; } else { //cout << "错误:在(" << x << ',' << y << ")处不能放下" << c_color << "棋子" << endl; return false; } }
pos string_cast<pos, tstring> (const tstring & value) { pos pos; int32 index = value.find(';', 0); pos.x = string_cast<float32>(value.substr(0, index)); int32 index2 = value.find(';', ++index); pos.y = string_cast<float32>(value.substr(index, index2 - index)); pos.l = lay(string_cast<int32>(value.substr(++index2, value.size() - index2))); return pos; }
//移棋第二步:在新位置下棋 bool board::move_step(int x, int y) { if (isSelected) { /*string c_color; switch (selected_color) { case WHITE:c_color = "后手"; break; case BLACK:c_color = "先手"; break; case NONE:c_color = "没有"; break; default:c_color = "未知"; break; }*/ if (lay(selected_color, x, y)) { /*int b_x(0), b_y(0); data_itoxy(selected_chess, b_x, b_y);*/ if (m_chess_pos == 0) { //cout << "move_step error: 位置m_chess_pos出错了,为什么??" << endl; } if (m_chess_pos % 2 != selected_color) { //cout << "move_step error :: 放的位置和颜色不一样,为什么??" << endl; } m_chess[m_chess_pos] = data_xytoi(x, y); m_curr_color[x][y] = m_chess_pos; m_chess_pos = 0; //m_curr_color[b_x][b_y] = 0; //cout << c_color << "方把(" << b_x << ',' << b_y << ")移动到(" << x << ',' << y << ')' << endl; isSelected = false; pre_chess = data_xytoi(x, y); // 判断棋面修改 selected_color = (selected_color + 1) % 2; who_step++; m_before[0].push(pre_chess); m_before[1].push( selected_chess); return true; } else { /*int b_x(0), b_y(0); data_itoxy(pre_chess, b_x, b_y);*/ //cout << "错误:在(" << b_x << ',' << b_y << ")处不能放下" << c_color << "色棋子,移棋失败" << endl; return false; } } else { //cout << "错误:未选中棋子!" << endl; return false; } }
suic::Size ScrollViewer::ArrangeOverride(const suic::Size& availableSize) { ClearVisualChildren(); suic::ElementPtr cont(GetContent()); if (cont) { suic::Rect rect; rect.right = availableSize.cx; rect.bottom = availableSize.cy; _vScroll->SetVisible(false); _hScroll->SetVisible(false); suic::Size desiredSize = cont->GetDesiredSize(); // // 计算是否有滚动条 // _hScroll->UpdateScrollInfo(rect.right, desiredSize.cx, false); _vScroll->UpdateScrollInfo(rect.bottom, desiredSize.cy, false); ComputeScrollBar(rect.right, rect.bottom, desiredSize.cx, desiredSize.cy); suic::PanelPtr lay(cont); if (lay) { lay->SetHorizontalOffset(_hScroll->GetScrollSize()); lay->SetVerticalOffset(_vScroll->GetScrollSize()); } rect.left += _contentOffset.x; rect.top += _contentOffset.y; if (rect.bottom > rect.top) { AddVisualChild(cont.get()); cont->Arrange(rect); } } return availableSize; }
TakeOf::TakeOf(QWidget *parent) : AbstractCentWid(parent) { setObjectName("Take-Off"); lc=new ListCollection; lc->append(new CommonList("Les Vols Prets",new TousVol)); set_lc(lc); _fly=new Fly(); connect(_fly,SIGNAL(doneVol()),this,SLOT(setModel())); sc=new OneATimeShowCollection(_fly); DropReceiver *dr=new DropReceiver(sc,true); set_sc(sc); add_dr(dr); lay(); }
//下棋 bool board::step(CHESS_COLOR color, int x, int y) { string c_color; switch (color) { case WHITE:c_color = "白"; break; case BLACK:c_color = "黑"; break; case NONE:c_color = "没有颜"; break; default:c_color = "未知"; break; } if (lay(color, x, y)) { m_chess[++m_chess_num] = data_xytoi(x, y); m_curr_color[x][y] = m_chess_num; cout << c_color << "方在(" << x << ',' << y << ")下子" << endl; pre_chess = data_xytoi(x, y); return true; } else { cout << "错误:在(" << x << ',' << y << ")处不能放下" << c_color << "色棋子" << endl; return false; } }
void main() { lay(1,1); getchar(); }
OpenSave::OpenSave(QWidget *papa) : QDialog(papa) { setWindowTitle("Open files..."); QLabel *version_text = new QLabel(" Genie version:", this); genie_version = new QComboBox(this); genie_version->setMaxVisibleItems(30); dataset_check = new QCheckBox("Compressed dataset:", this); dataset_path = new QLineEdit(this); QPushButton *fill_from_reg = new QPushButton("Fill paths from registry", this); QPushButton *browse_dataset = new QPushButton("Browse", this); QPushButton *decompress_do = new QPushButton("Decompress only", this); decompress_path = new QLineEdit(this); QPushButton *browse_decompress = new QPushButton("Browse", this); lang_check = new QCheckBox("Language file location:", this); lang_path = new QLineEdit(this); QPushButton *browse_lang = new QPushButton("Browse", this); langX_check = new QCheckBox("Language x1 file location:", this); langX_path = new QLineEdit(this); QPushButton *browse_langX = new QPushButton("Browse", this); langP_check = new QCheckBox("Language p1 file location:", this); langP_path = new QLineEdit(this); QPushButton *browse_langP = new QPushButton("Browse", this); drs_check = new QCheckBox("Path for DRS files *:", this); drs_folder = new QLineEdit(this); QPushButton *browse_drs = new QPushButton("Browse", this); mod_check = new QCheckBox("Path for mod DRS files:", this); mod_folder = new QLineEdit(this); QPushButton *browse_mod = new QPushButton("Browse", this); extra_check = new QCheckBox("Extra 1st priority DRS file:", this); extra_path = new QLineEdit(this); QPushButton *browse_extra = new QPushButton("Browse", this); QGridLayout *layout_main = lay(new QGridLayout, 2, 2, 5); QLabel *donate_text = new QLabel("<a href=\"https://www.paypal.com/cgi-bin/webscr?cmd=_donations" "&business=4JDUUTF6B9HFN&lc=FI&item_name=Advanced%20Genie%20Editor" "¤cy_code=EUR&bn=PP%2dDonationsBF%3abtn_donate_SM%2egif" "%3aNonHostedGuest\">Donate to developers</a>", this); donate_text->setTextFormat(Qt::RichText); donate_text->setTextInteractionFlags(Qt::TextBrowserInteraction); donate_text->setOpenExternalLinks(true); QPushButton *button_ok = new QPushButton("Load", this); genie_version->addItem("TEST"); genie_version->addItem("TEST.DAT"); genie_version->addItem("MICKEY.DAT"); genie_version->addItem("DAVE.DAT"); genie_version->addItem("MATT.DAT < 6.92"); genie_version->addItem("Age of Empires Beta (7.04 - 7.11)"); genie_version->addItem("Age of Empires (7.2)"); genie_version->addItem("Rise of Rome (7.24)"); genie_version->addItem("Age of Kings Alpha (10.19)"); genie_version->addItem("Age of Kings Beta (11.05)"); genie_version->addItem("Age of Kings (11.5)"); genie_version->addItem("The Conquerors (11.76)"); genie_version->addItem("The Forgotten + The African Kingdoms > 12"); genie_version->addItem("Star Wars: Galactic Battlegrounds (1.0)"); genie_version->addItem("Clone Campaigns (1.1)"); genie_version->addItem("Mod: Expanding Fronts"); genie_version->setCurrentIndex(EV_TC); int row = 0; layout_main->addWidget(version_text, row, 0); layout_main->addWidget(genie_version, row, 1); layout_main->addWidget(fill_from_reg, row, 2, 1, 2); layout_main->addWidget(dataset_check, ++row, 0); layout_main->addWidget(dataset_path, row, 1, 1, 2); layout_main->addWidget(browse_dataset, row, 3); layout_main->addWidget(decompress_do, ++row, 0); layout_main->addWidget(decompress_path, row, 1, 1, 2); layout_main->addWidget(browse_decompress, row, 3); layout_main->addWidget(lang_check, ++row, 0); layout_main->addWidget(lang_path, row, 1, 1, 2); layout_main->addWidget(browse_lang, row, 3); layout_main->addWidget(langX_check, ++row, 0); layout_main->addWidget(langX_path, row, 1, 1, 2); layout_main->addWidget(browse_langX, row, 3); layout_main->addWidget(langP_check, ++row, 0); layout_main->addWidget(langP_path, row, 1, 1, 2); layout_main->addWidget(browse_langP, row, 3); layout_main->addWidget(drs_check, ++row, 0); layout_main->addWidget(drs_folder, row, 1, 1, 2); layout_main->addWidget(browse_drs, row, 3); layout_main->addWidget(mod_check, ++row, 0); layout_main->addWidget(mod_folder, row, 1, 1, 2); layout_main->addWidget(browse_mod, row, 3); layout_main->addWidget(extra_check, ++row, 0); layout_main->addWidget(extra_path, row, 1, 1, 2); layout_main->addWidget(browse_extra, row++, 3); pad(layout_main, false, true); layout_main->addWidget(donate_text, ++row, 1, Qt::AlignRight); layout_main->addWidget(button_ok, row, 2); layout_main->setColumnStretch(1, 1); setLayout(layout_main); button_ok->setDefault(true); connect(browse_dataset, &QPushButton::released, [this] { dataset_path->setText(QFileDialog::getOpenFileName(this, "Select a file", "", "Compressed data set (*.DAT)")); }); connect(browse_decompress, &QPushButton::released, [this] { decompress_path->setText(QFileDialog::getOpenFileName(this, "Select a file", "", "Compressed genie file (*)")); }); connect(decompress_do, &QPushButton::released, [this] { std::string filename = decompress_path->text().toStdString(), savename = filename + "u"; if(!filename.empty()) { genie::DatFile raw; raw.extractRaw(filename.c_str(), savename.c_str()); QMessageBox::information(this, "Decompress", "Saved to " + QString::fromStdString(savename)); } }); connect(button_ok, &QPushButton::released, [this] { accept(); }); }
static void append_engine(gchar * dlname) { gchar * can; gchar * err; (void) dlerror(); void * hand = dlopen(dlname,RTLD_NOW); err = dlerror(); if (!hand || err) { g_warning("%s", err); if (hand) dlclose(hand); return; } can = canonize_name(dlname); if (engine_is_unique(can)) { layout_settings_proc lay; lay = dlsym(hand,"layout_engine_settings"); if ((err=dlerror())) g_warning("%s", err); if (lay) { get_meta_info_proc meta; EngineData * d = g_malloc0(sizeof(EngineData)); GtkTreeIter i; const gchar * format = "<b>%s</b> (%s)\n" "<i><small>%s</small></i>"; meta = dlsym(hand,"get_meta_info"); if ((err=dlerror())) g_warning("%s", err); d->meta.description=g_strdup("No Description"); d->meta.version=g_strdup("0.0"); d->meta.last_compat=g_strdup("0.0"); d->meta.icon=gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "image-missing",24, GTK_ICON_LOOKUP_USE_BUILTIN, NULL); if (meta) meta(&(d->meta)); else g_warning("Engine %s has no meta info, please update it, using defaults.",dlname); d->dlname = dlname; d->canname = can; d->vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL,2); g_object_ref(d->vbox); lay(d->vbox); EngineList = g_slist_append(EngineList,d); gtk_list_store_append(EngineModel,&i); gtk_list_store_set(EngineModel,&i,ENGINE_COL_DLNAME,d->dlname,ENGINE_COL_NAME,d->canname, ENGINE_COL_VER,d->meta.version,ENGINE_COL_LAST_COMPAT,d->meta.last_compat, ENGINE_COL_ICON,d->meta.icon,ENGINE_COL_MARKUP, g_markup_printf_escaped(format,d->canname,d->meta.version,d->meta.description), -1); /* gtk_combo_box_prepend_text(GTK_COMBO_BOX(EngineCombo),d->canname); */ } } dlclose(hand); }
// 悔棋:无须传入参数: 传出参数 : p1 现在位置的棋子, p2=0 下棋模式,p2!=0 之前位置的棋子 void board::back(int& p1,int& p2) { if (m_before[0].empty()){ //cout << "error:: 无棋可悔" << endl; return; } p1=(m_before[0].top()), p2=(m_before[1].top()); m_before[0].pop(); m_before[1].pop(); if (m_before[0].empty()) pre_chess = -1; else pre_chess = m_before[0].top(); // 局面改变 who_step--; selected_color = (selected_color + 1) % 2; int cx(0), cy(0); data_itoxy(p1, cx, cy); m_chess_pos = m_curr_color[cx][cy]; if (m_chess_pos % 2!=selected_color) { //cout << "back error; 颜色不一样???" << endl; return; } m_curr_color[cx][cy] = 0; if (!retract(selected_color, cx, cy)) { //cout << "back error ::不能移棋???" << endl; return; } // p2!=0 表示移棋的模式 if (p2) { int bx(0), by(0); data_itoxy(p2, bx, by); lay(selected_color, bx, by); m_curr_color[bx][by] = m_chess_pos; m_chess[m_chess_pos] = p2; // m_chess_num--; } else { if (m_chess_pos != m_chess_num) { //cout << "error:: 删除的棋子不是最后下的棋子??" << endl; } m_chess_num--; int b_x(0), b_y(0); data_itoxy(m_chess[m_chess_pos], b_x, b_y); //cout << "错误:在(" << b_x << ',' << b_y << ")处success" <<endl; } }
void lay(int row,int column) { bool kkk=false; //行(row)优先摆放 if (graph[row][column]!=0) { if (row<n) { lay(row+1,column); } else if (row==n&&column<n) { lay(1,column+1); } else { for (int x = 1; x <= n; x++) { for (int y = 1; y <= n; y++) { printf("%2d",graph[x][y]); } printf("\n"); } printf("\n"); } } else { for (int i = 1; i <= n; i++) { if (check(row,column,i)) { graph[row][column]=i; kkk=true; if (row<n) { lay(row+1,column); } else if (row==n&&column<n) { lay(1,column+1); } else { for (int x = 1; x <= n; x++) { for (int y = 1; y <= n; y++) { printf("%2d",graph[x][y]); } printf("\n"); } printf("\n"); } } } if (kkk==true) { graph[row][column]=0; } } }