void input_t::keyboard_to_signal(){ const bool alt_key = query_key(SDL_SCANCODE_LALT) || query_key(SDL_SCANCODE_RALT); if(unlikely(alt_key)){ if(query_key(SDL_SCANCODE_1)){ set_signal(SIGNAL_QUIT_LOOP, true); }else{ set_signal(SIGNAL_QUIT_LOOP, false); } } }
void query_options(struct soap *soap, struct option *options) { char *s = query(soap); /* get arguments from query string */ while (s) { char *key = query_key(soap, &s); /* decode next query string key */ char *val = query_val(soap, &s); /* decode next query string value */ if (key) set_option(key, val, options); } }
bool wait_restart(void){ disable_interrupt(); if ( query_key('r' - 'a') ){ release_key('r' - 'a'); return true; } enable_interrupt(); return false; }
//改变蛇的运动方向 void ChangeDir() { disable_interrupt(); //寻找已经按下的键,若有多个键按下,处理优先级以此为上下左右 int i; for(i=0;i<4;i++) { if(query_key(i)) switch(i) { case 0:snake.dir = up;break; case 1:snake.dir = down;break; case 2:snake.dir = left;break; case 3:snake.dir = right;break; } release_key(i); } enable_interrupt(); }
/* 更新按键 */ bool update_keypress(void) { fly_t it, target = NULL; float min = -100; disable_interrupt(); /* 寻找相应键已被按下、最底部且未被击中的字符 */ for (it = head; it != NULL; it = it->_next) { assert(it->text >= 0 && it->text < 26); if (it->v > 0 && it->x > min && query_key(it->text)) { min = it->x; target = it; } } /* 如果找到则更新相应数据 */ if (target != NULL) { release_key(target->text); target->v = -3; /* 速度改为向上 */ return TRUE; } enable_interrupt(); return FALSE; }
/* 更新按键 */ bool update_keypress(void) { fly_t it, target = NULL; FLOAT min = -int2F(100); cli(); /* 寻找相应键已被按下、最底部且未被击中的字符 */ for (it = head; it != NULL; it = it->_next) { assert(it->text >= 0 && it->text < 26); if (it->v > 0 && it->x > min && query_key(it->text)) { min = it->x; target = it; } } /* 如果找到则更新相应数据 */ if (target != NULL) { release_key(target->text); target->v = -int2F(3); /* 速度改为向上 */ return true; } sti(); return false; }