Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.06.2013, 14:09   #1
Кост Я
 
Регистрация: 05.06.2013
Сообщений: 4
По умолчанию Программирование игр и головоломок

Здравствуйте! Помогите, пожалуйста с кодом. Задание такое:
Игра происходит на прямоугольной площадке, разделенной на поля.
Число полей должно быть нечетным и задается с клавиатуры в диалоговом режиме.
Поля слева покрыты 4 шашками некоторого цвета (или ноликами), поля справа - 4 шашками другого цвета (или крестиками).
Крестики могут передвигаться только влево, нолики - только вправо.
Шашка может быть либо продвинута на один шаг, если следующее поле в направлении ее перемещения свободно, либо перепрыгнуть через шашку другого цвета, если следующее за ней поле свободно.
Цель игры состоит в перемещении всех шашек одного цвета (или вида) на противоположную сторону поля.
Написать программу, реализующую данную игру, где один из игроков - компьютер.
Кост Я вне форума Ответить с цитированием
Старый 05.06.2013, 15:06   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

То, что размеры площадки 1xN, где N нечётное и не меньше девяти, должны были Вы написать, а не читатели протелепатировать.
Цитата:
Шашка может быть либо продвинута на один шаг, если следующее поле в направлении ее перемещения свободно, либо перепрыгнуть через шашку другого цвета, если следующее за ней поле свободно.
Цель игры состоит в перемещении всех шашек одного цвета (или вида) на противоположную сторону поля.
Написать программу, реализующую данную игру, где один из игроков - компьютер.
Код:
enum Cell{
  BLACK,
  WHITE,
  EMPTY
};

typedef bool (*Player)(std::vector<Cell>&, int);

bool Computer(std::vector<Cell>&, int);
bool Human(std::vector<Cell>&, int);

bool HasWon(const std::vector<Cell>&, int);

int main(void){
  int n=0;
  while(n<9 || (n%2)==0){
    std::cin >> n;
  }
  std::vector<Cell> field = std::vector<Cell>(n);
  field[0]=field[1]=field[2]=field[3]=BLACK;
  field[n-1]=field[n-2]=field[n-3]=field[n-4]=WHITE;
  for(int i=4; i<n-4; ++i) field[i] = EMPTY;

  Player players[2] = {Computer, Computer};

  int currentPlayer=1;
  do {
    currentPlayer = 1-currentPlayer;
    if(!players[currentPlayer](field, currentPlayer)){
      std::cout << "Player " << currentPlayer+1 << " can't make a turn." << std::endl;
      std::cout << "Player " << 2-currentPlayer << " wins!" << std::endl;
      return 0;
    }
  } while(!HasWon(field, currentPlayer));

  std::cout << "Player " << currentPlayer+1 << " wins!" << std::endl;
  return 0;
}

bool HasWon(const std::vector<Cell>& field, int player){
  if(player==1) return field[0]==WHITE && field[1]==WHITE && field[2]==WHITE && field[3]==WHITE;
  int n = field.length();
  return field[n-1]==BLACK && field[n-2]==BLACK && field[n-3]==BLACK && field[n-4]==BLACK;
}

bool Move(std::vector<Cell>& field, int pos){
  switch(field[pos]){
  case CLEAR:
    return false;
  case WHITE:
    if(pos == 0) return false;
    if(field[pos-1] == CLEAR){
      field[pos] = CLEAR, field[pos-1]=WHITE;
      return true;
    }
    if(pos == 1) return false;
    if(field[pos-2] == CLEAR && field[pos-1] == BLACK){
      field[pos] = CLEAR, field[pos-2]=WHITE;
      return true;
    }
    return false;
  case BLACK:
    if(pos == field.length()-1) return false;
    if(field[pos+1] == CLEAR){
      field[pos] = CLEAR, field[pos+1]=BLACK;
      return true;
    }
    if(pos == field.length()-2) return false;
    if(field[pos+2] == CLEAR && field[pos+1] == WHITE){
      field[pos] = CLEAR, field[pos+2]=BLACK;
      return true;
    }
    return false;
  }
}

bool Computer(std::vector<Cell>& field, int player){
  for(int i=0; i<field.length(); ++i) if(field[i] == player && Move(field, i)) return true;
  return false;
}
Сделано.

Последний раз редактировалось Abstraction; 05.06.2013 в 15:25. Причина: Прыгать можно только через камни другого цвета - поправил.
Abstraction вне форума Ответить с цитированием
Старый 05.06.2013, 15:10   #3
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Какой язык?
Я правильно понимаю, что прямоугольная площадка будет 1 на N. (где для N существует такое неотрицательное K, что 2*K +1 = N)

И должно быть какое-то ограничение.. Слово "игра" подразумевает победителя и проигравшего (ну или "победила дружба" (= ничья) на худой конец.

[VANGA] Ни каких проблем с реализацией не предвидится [/VANGA] Обычный одномерный массив.. Единственное, это поиск стратегии.. Над этим можно подумать..

Кстати, без Ваших средств ничего не получится. (Под "средствами" подразумевают : идеи алгоритмов, код, какие-либо соображения или, на худой конец, деньги (тогда Вам в раздел фриланс))


Не успел..
Poma][a вне форума Ответить с цитированием
Старый 05.06.2013, 15:12   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Кстати, без Ваших средств ничего не получится. (Под "средствами" подразумевают : идеи алгоритмов, код, какие-либо соображения или, на худой конец, деньги (тогда Вам в раздел фриланс))


Не успел..
Ну, это ещё вопрос. Код, реализующий спрошенное, конечно, есть - если ТС'у только это было нужно, то и ладно.
Но есть у меня подозрение, что человек был недостаточно аккуратен в формулировке своих желаний.
Abstraction вне форума Ответить с цитированием
Старый 05.06.2013, 15:20   #5
Кост Я
 
Регистрация: 05.06.2013
Сообщений: 4
По умолчанию

Спасибо, большое, Abstraction!))
Кост Я вне форума Ответить с цитированием
Старый 05.06.2013, 16:49   #6
Shulc
 
Регистрация: 27.11.2011
Сообщений: 5
По умолчанию

http://vk.com/id82756023
вот он шарит его попроси
Shulc вне форума Ответить с цитированием
Старый 06.06.2013, 16:07   #7
Кост Я
 
Регистрация: 05.06.2013
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Shulc Посмотреть сообщение
http://vk.com/id82756023
вот он шарит его попроси
Доброго времени Shulc! Сам знаешь как он шарит))
Кост Я вне форума Ответить с цитированием
Старый 15.12.2013, 18:53   #8
Programylkin
 
Регистрация: 04.06.2013
Сообщений: 2
По умолчанию

Константин добрый день вы задачу эту реализовали или нет. Просто точно такую же нужно сдать в течение недели) Помогите студенту ответьте на Pash-ka.net@mail.ru
Или на телефон 89058479195/ О цене договоримся
Programylkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование игр и головоломок Shulc Помощь студентам 7 15.05.2013 15:06
программирование игр и головоломок Slava19 Помощь студентам 4 22.03.2013 20:16
Программирование игр и головоломок Олеся Ю Паскаль, Turbo Pascal, PascalABC.NET 33 10.05.2012 20:26