Example #1
0
void run0()
{
    /* Setup */
    int count = 0;
    while(count++ < body_count)
    {
        bodies[count] = new_body(10, count, 0, 0, 0, 0, 0); /* TODO Fill in values for bodies */
    }
    
    /* Update all bodies while running */
    while(!done)
    {
        count = 0;
        while(count++ < body_count)
        {
            update(bodies[count]);
        }
        count = 0;
        while(count++ < body_count)
        {
            step(bodies[count], time_step);
        }
    }
    
    /* Free resources when done*/
    count = 0;
    while(count++ < body_count)
    {
        free(bodies[count]);
    }
    
}
Example #2
0
File: snake.c Project: kahn04/snake
void add_last_body(SNAKE *snake)
{
    snake->length = snake->length+1;
    BODY *new_b = new_body();
    new_b->pre = snake->body_last;
    snake->body_last->next = new_b;

    if (snake->body_last->x == snake->body_last->pre->x)
    {
        new_b->x = snake->body_last->x;
        if (snake->body_last->y > snake->body_last->pre->y)
            new_b->y = snake->body_last->y+1;
        else
            new_b->y = snake->body_last->y-1;
    }
    else
    {
        new_b->y = snake->body_last->y;
        if (snake->body_last->x > snake->body_last->pre->x)
            new_b->x = snake->body_last->x+1;
        else
            new_b->x = snake->body_last->x-1;
    }

    snake->body_last = new_b;
}
Example #3
0
File: snake.c Project: kahn04/snake
void new_body_affer_head(SNAKE *snake)
{
    BODY *new_b = new_body();
    new_b->x = snake->x;
    new_b->y = snake->y;
    new_b->next = snake->body_1st;
    snake->body_1st->pre = new_b;
    snake->body_1st = new_b;
    mvaddch(new_b->y, new_b->x, '#');
}
Example #4
0
File: snake.c Project: kahn04/snake
void init_snake(SNAKE *snake)
{
    snake->head_chr = '@';
    snake->body_chr = '#';
    snake->length = 7;
    snake->d = KEY_LEFT;
    snake->y = LINES/2;
    snake->x = COLS/2;
    snake->body_1st = NULL;
    
    BODY *pre_b;
    BODY *b;
    int i;
    for (i=0; i<snake->length; i=i+1)
    {
        b = new_body();
        b->i = i;
        b->x = snake->x+i+1;
        b->y = snake->y;
        if (i==0)
        {
            snake->body_1st = b;
        }
        else
        {
            b->pre = pre_b;
            b->next = NULL;
            pre_b->next = b;
        }
        if (i==snake->length-1)
        {
            snake->body_last = b;
        }
        pre_b = b;
    }
}
Example #5
0
void bv_elim::elim(quantifier* q, quantifier_ref& r) {

    svector<symbol>  names, _names;
    sort_ref_buffer  sorts(m_manager), _sorts(m_manager);
    expr_ref_buffer  pats(m_manager);
    expr_ref_buffer  no_pats(m_manager);
    expr_ref_buffer  subst_map(m_manager), _subst_map(m_manager);
    var_subst        subst(m_manager);
    bv_util          bv(m_manager);
    expr_ref         new_body(m_manager);
    expr*            old_body = q->get_expr();
    unsigned num_decls = q->get_num_decls();
    family_id bfid = m_manager.get_family_id("bv");

    //
    // Traverse sequence of bound variables to eliminate
    // bit-vecctor variables and replace them by 
    // Booleans.
    // 
    unsigned var_idx = 0;
    for (unsigned i = num_decls; i > 0; ) {
        --i;
        sort*  s  = q->get_decl_sort(i);
        symbol nm = q->get_decl_name(i);

        if (bv.is_bv_sort(s)) {
            // convert n-bit bit-vector variable into sequence of n-Booleans.
            unsigned num_bits = bv.get_bv_size(s);
            expr_ref_buffer args(m_manager);
            expr_ref bv(m_manager);
            for (unsigned j = 0; j < num_bits; ++j) {
                std::ostringstream new_name;
                new_name << nm.str();
                new_name << "_";
                new_name << j;
                var* v = m_manager.mk_var(var_idx++, m_manager.mk_bool_sort());                
                args.push_back(v);
                _sorts.push_back(m_manager.mk_bool_sort());
                _names.push_back(symbol(new_name.str().c_str()));
            }
            bv = m_manager.mk_app(bfid, OP_MKBV, 0, 0, args.size(), args.c_ptr());
            _subst_map.push_back(bv.get());
        }
        else {
            _subst_map.push_back(m_manager.mk_var(var_idx++, s));
            _sorts.push_back(s);
            _names.push_back(nm);
        }
    }
    // 
    // reverse the vectors.
    // 
    SASSERT(_names.size() == _sorts.size());
    for (unsigned i = _names.size(); i > 0; ) {
        --i;
        names.push_back(_names[i]);
        sorts.push_back(_sorts[i]);
    }
    for (unsigned i = _subst_map.size(); i > 0; ) {
        --i;
        subst_map.push_back(_subst_map[i]);
    }

    expr* const* sub  = subst_map.c_ptr();
    unsigned sub_size = subst_map.size();

    subst(old_body, sub_size, sub, new_body);

    for (unsigned j = 0; j < q->get_num_patterns(); j++) {
        expr_ref pat(m_manager);        
        subst(q->get_pattern(j), sub_size, sub, pat);
        pats.push_back(pat);
    }
    for (unsigned j = 0; j < q->get_num_no_patterns(); j++) {
        expr_ref nopat(m_manager);
        subst(q->get_no_pattern(j), sub_size, sub, nopat);
        no_pats.push_back(nopat);
    }

    r = m_manager.mk_quantifier(true, 
                                names.size(),
                                sorts.c_ptr(),
                                names.c_ptr(),
                                new_body.get(),
                                q->get_weight(),
                                q->get_qid(),
                                q->get_skid(),
                                pats.size(), pats.c_ptr(),
                                no_pats.size(), no_pats.c_ptr());
}