bool SmartSnake::go_die() { is_died = true; auto game = (MyGame*)game_map->getParent(); game->kill--; auto label = (Label*)game->getChildByName("label_kill"); if (label) { if (game->kill > 0) { label->setString(" x" + Value(game->kill).asString()); } else { label->setString(" ok!"); } } /*auto game = (MyGame*)getUserObject(); if (snake_nodes->size() > 1) { schedule([this](float dt) { new_tail(); }, 1 / 30.0f, snake_nodes->size() - 1, 0, "go die"); }*/ return true; game_map->add_empty_n(snake_nodes->size()); while (!snake_nodes->empty()) { new_tail(); } return true; }
void mk_array_instantiation::instantiate_rule(const rule& r, rule_set & dest) { //Reset everything selects.reset(); eq_classes.reset(); cnt = src_manager->get_counter().get_max_rule_var(r)+1; done_selects.reset(); ownership.reset(); expr_ref_vector phi(m); expr_ref_vector preds(m); expr_ref new_head = create_head(to_app(r.get_head())); unsigned nb_predicates = r.get_uninterpreted_tail_size(); unsigned tail_size = r.get_tail_size(); for(unsigned i=0;i<nb_predicates;i++) { preds.push_back(r.get_tail(i)); } for(unsigned i=nb_predicates;i<tail_size;i++) { phi.push_back(r.get_tail(i)); } //Retrieve selects for(unsigned i=0;i<phi.size();i++) retrieve_selects(phi[i].get()); //Rewrite the predicates expr_ref_vector new_tail(m); for(unsigned i=0;i<preds.size();i++) { new_tail.append(instantiate_pred(to_app(preds[i].get()))); } new_tail.append(phi); for(obj_map<expr, var*>::iterator it = done_selects.begin(); it!=done_selects.end(); ++it) { expr_ref tmp(m); tmp = &it->get_key(); new_tail.push_back(m.mk_eq(it->get_value(), tmp)); } proof_ref pr(m); src_manager->mk_rule(m.mk_implies(m.mk_and(new_tail.size(), new_tail.c_ptr()), new_head), pr, dest, r.name()); }