Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
// 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);
}