t_msg *exec_task(t_msg *task) { while (task && task->end != 1 && task->time < get_time()) { if (strcmp(task->comand, "incantation") == 0 && up_level(task) == 1) up_level(task); if (send_mess(task) == -1) printf("unable to send_mess\n"); task = task->nt; free(task->prev); } if (task) task->prev = NULL; return task; }
// Handle mouse clicks, etc. int BlockWindow::handle(int event) { int j, k, mx, my, count; Block *b; Column *c; if (Fl_Double_Window::handle(event)) return (1); else if (interval_ < 0.0 || paused_) return (0); switch (event) { case FL_KEYBOARD: if (Fl::event_text()) { if (strcmp(Fl::event_text(), "+") == 0) up_level(); } break; case FL_PUSH : mx = w() - Fl::event_x() + BLOCK_SIZE; my = h() - Fl::event_y(); count = 0; b = 0; for (j = 0, c = columns_; !count && j < num_columns_; j ++, c ++) for (k = 0, b = c->blocks; !count && k < c->num_blocks; k ++, b ++) if (mx >= c->x && mx < (c->x + BLOCK_SIZE) && my >= b->y && my < (b->y + BLOCK_SIZE)) { if (b->bomb) count = bomb(b->color); else count = click(j, k); break; } if (count < 2) { for (j = 0, c = columns_; j < num_columns_; j ++, c ++) for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++) if (b->color < 0) b->color = -b->color; } else { count --; if (b->bomb) { sound_->play_explosion(0.19 + 0.005 * count); interval_ *= 0.995; score_ += count; } else { sound_->play_explosion(0.09 + 0.005 * count); interval_ *= 0.999; score_ += count * count; } if (score_ > high_score_) { high_score_ = score_; prefs_.set("high_score", high_score_); } for (j = 0, c = columns_; j < num_columns_; j ++, c ++) for (k = 0, b = c->blocks; k < c->num_blocks; k ++, b ++) if (b->color < 0) b->color = BLOCK_BLAST; } return (1); } return (0); }