Exemple #1
0
void run_game() {

  // Create player 1
  std::list<Link> player1;
  Link p1start = {5, MAX_BOARD_Y / 2, 'X', 1};
  player1.push_back(p1start);

  // Create player 2
  std::list<Link> player2;
  Link p2start = {MAX_BOARD_X - 5, MAX_BOARD_Y / 2, 'O', 2};
  player2.push_back(p2start);

  clear();
  print_board();
  print_snake(player1);
  print_snake(player2);

  // Wait for initial direction input
  int p1direction;
  int p2direction;
  bool p1sel = false;
  bool p2sel = false;
  while(!(p1sel && p2sel)) {
    if (kbhit()) {
      int input = getch();
      if (!p1sel) {
        p1sel = get_init_dir(p1direction, input, 1);
      }
      if (!p2sel) {
        p2sel = get_init_dir(p2direction, input, 2);
      }
    }
  }

  int loser = 0;
  while(loser == 0) {
    game_frame(player1, p1direction, player2, p2direction);
    loser = check_collisions(player1, player2);
    if (loser == 0) {
      loser = check_collisions(player2, player1);
    }
  }
  if (!play_again(loser)) {
    return;
  }
  else {
    run_game();
  }
}
Exemple #2
0
void game_frame(std::list<Link>& player1, int& p1direction,
                std::list<Link>& player2, int& p2direction) {
  // Wait and accept up to 1 direction change
  clock_t start = clock();
  bool p1changed = false;
  bool p2changed = false;
  while( ((clock()-start) / (double) CLOCKS_PER_SEC) < (1 / FRAMES_PER_SEC)) {
    if (kbhit()) {
      int input = getch();
      if (!p1changed) {
        p1changed = get_dir(p1direction, input, 1);
      }
      if (!p2changed) {
        p2changed = get_dir(p2direction, input, 2);
      }
    }
  }
  move_snek(player1, p1direction);
  move_snek(player2, p2direction);
  print_snake(player1);
  print_snake(player2);
}
Exemple #3
0
bool snake_valid( cube_t *cube, position_t *position, char *binary_string) {
  int i;
  position_t * position_;
  bool valid_snake;

  printf( "%s\n", binary_string);
  print_snake( position);
  if( strlen( binary_string) == 1) {
    return true;
  }

  if( binary_string[0] == '0') {
    position_ = position_append( position, position->d);
    if( position_valid( cube, position_)) {
      valid_snake = snake_valid( cube, position_, binary_string + 1);
      free_position( position_);
      return valid_snake;
    } else {
      free_position( position_);
      return false;
    }
  } else {
    for( i = 1; i <= 3; i++) {
      if( abs( position->d ) != abs( i)) {
        position_ = position_append( position, i );
        if( position_valid( cube, position_)){
          valid_snake = snake_valid( cube, position_, binary_string + 1);
          free_position(position_);
          if( valid_snake) return true;
        }
      }
    }
    for( i = -1; i >= -3; i--) {
      if( abs( position->d ) != abs( i)) {
        position_ = position_append( position, i );
        if( position_valid( cube, position_)){
          valid_snake = snake_valid( cube, position_, binary_string + 1);
          free_position(position_);
          if( valid_snake) return true;
        }
      }
    }
    return false;
  }
}
Exemple #4
0
void restart_game(int *sx, int *sy, int len)
{
	int i = 5;
	while(i--)
	{
		print_snake(sx, sy, len);
		usleep(1000*500);
		erase_snake(sx,sy, len);
		usleep(1000*500);
	}
	memset(fb_v.memo, 0, fb_v.w*fb_v.h*fb_v.bpp/8);
	barriar();
	for(i=0; i<len; i++)
	{
		sx[i] = 250-i*50;
		sy[i] = 300;
	}
}