Exemple #1
0
int find_free(point_t pos, point_t *free)
{
	int cnt;
	point_t p;
	int i = rand() % DELTA_FIELDS;

	for (cnt = 0; cnt < DELTA_FIELDS; cnt++) {
		if (i >= DELTA_FIELDS) {
			i = 0;
		}

		p.x = pos.x + delta_pos[i].x;
		p.y = pos.y + delta_pos[i].y;

		if (p.x < 0 || p.y < 0 || p.x >= field_count_x || p.y >= field_count_y) {
			i++;
			continue;
		}

		if (check_food(p) == NULL) {
			*free = p;
			return 0;
		}

		i++;
	}
	return -1;
}
Exemple #2
0
int snake_start()
{
restart:
  score = 0;
  init_snake();
  init_map();
  clear();
  refresh();
  draw_score();
  draw_help();
  draw_box(0, 1, LINES-2, COLS-2);
  draw_snake();
  draw_map();
  gen_food();

  if ((pthread_create(&thread_input, NULL, get_input, NULL)) != 0)
    exit(1);
  while (1) {
    usleep(speed);
    check_input();
    if (exit_flag) {
      pthread_cancel(thread_input);
      exit_snake();
      break;
    }
    if (pause_flag) {
      pthread_cancel(thread_input);
      getch();
      pause_flag = 0;
      if ((pthread_create(&thread_input, NULL, get_input, NULL)) != 0)
        exit(1);
    }
    move_snake();
    if (check_dead()) {
      pthread_cancel(thread_input);
      if (snake_dead_exit()) {
        exit_snake();
        break;
      }
      goto restart;
    }
    if (check_food()) {
      inc_score();
      draw_score();
      snake_grow_one();
      gen_food();
    }
  };

  return 0;
}
Exemple #3
0
Collision find_collision(Snake* snake, FoodList* food_list, Screen* screen) {
    if (!within_screen(snake, screen)) {
        return SCREEN;
    }

    if (check_autophagy(snake)) {
        return SNAKE;
    }

    if (check_food(snake, food_list)) {
        return FOOD;
    }

    return NONE;
}