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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2014, 14:21   #1
VerGeSS
Новичок
Джуниор
 
Регистрация: 15.09.2014
Сообщений: 3
По умолчанию Ребят, помогите перевести с C# на C++


Код:
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;
}

Последний раз редактировалось VerGeSS; 15.09.2014 в 14:39.
VerGeSS вне форума Ответить с цитированием
Старый 15.09.2014, 14:28   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что за программа? Что она делает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2014, 14:33   #3
VerGeSS
Новичок
Джуниор
 
Регистрация: 15.09.2014
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
А что за программа? Что она делает?
Игра происходит на прямоугольной площадке, разделённой на поля. Число полей должно быть нечётным и задаётся с клавиатуры в диалоговом режиме. Поля слева покрыты 4 шашками некоторого цвета (или ноликами), поля справа – 4 шашками другого цвета (или крестиками). Крестики могут передвигаться только влево, нолики – только вправо. Шашка может быть либо продвинута на один шаг, если следующее поле в направлении её перемещения свободно, либо перепрыгнуть через шашку другого цвета, если следующее за ней поле свободно.


Цель игры состоит в перемещении всех шашек одного цвета (или вида) на противоположную сторону поля. Написать программу, реализующую данную игру, где один из игроков - компьютер.
VerGeSS вне форума Ответить с цитированием
Старый 15.09.2014, 14:35   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Ребят, помогите перевести с Delphi на C++
Delphi как-то не заметно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.09.2014, 14:48   #5
Helloween
Форумчанин
 
Регистрация: 24.04.2012
Сообщений: 300
По умолчанию

Чтоб компилировалось вот, а логику смотрите сами. Тут и не C# и не С++ а не пойми что в первом посте

Код:
#include <vector>
#include <iostream>

enum Cell{
  BLACK,
  WHITE,
  CLEAR,
};

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] = CLEAR;

  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.size();
  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.size()-1) return false;
    if(field[pos+1] == CLEAR){
      field[pos] = CLEAR, field[pos+1]=BLACK;
      return true;
    }
    if(pos == field.size()-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.size(); ++i) if(field[i] == player && Move(field, i)) return true;
  return false;
}
Помог? Оставляем отзыв =)
Helloween вне форума Ответить с цитированием
Старый 15.09.2014, 14:52   #6
VerGeSS
Новичок
Джуниор
 
Регистрация: 15.09.2014
Сообщений: 3
По умолчанию

Спасибо огромное))
VerGeSS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите перевести с C++ на Delphi Gerzs Общие вопросы Delphi 3 16.10.2009 02:20
ребят можетет перевести ?? qasw Помощь студентам 11 06.10.2009 00:17
Ребят, помогите с решением задачи на Delphi TaYgA Помощь студентам 3 25.09.2009 20:29
Ребят помогите с экзаменом Delphi NoobInDelphi Помощь студентам 4 01.04.2009 23:13