Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
VerGeSS
1 / 1 / 0
Регистрация: 02.09.2012
Сообщений: 11
#1

Надо перевести прогу с дельфи на С++ - C++

10.06.2014, 08:44. Просмотров 201. Ответов 0
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2014, 08:44     Надо перевести прогу с дельфи на С++
Посмотрите здесь:

Построение графика (перевести програму с Дельфи) - C++
Добрый вечер! Мой научный руководитель в срочном порядке сказал перевести мою расчетную программу из Дельфи в Си/Си++, а я, увы, знаю...

надо изменить прогу - C++
#include &lt;stdio.h&gt; #include &lt;conio.h&gt; void proga (int m) { int h,z,y,x,r,a,i,d,n,w; float...

Перевести прогу на C++ - C++
Помогите перевести программу с Pascal на Си uses crt; var a: array of byte; i, j, n, x, min: byte; begin {Выводим...

Надо написать прогу на вычесление этого - C++
min f (X) = 30X + 30X + 45X 1 2 3 при 0.06Х1 + 0.04Х2 + 0.02Х3 ≤ 0.03 2Х1 + 4Х2 + 3Х3 ≤ 3.25 Х1 + Х2 + Х3 = 1 Х1,2,3 ≥ 0. Вот это...

Помогите решить прогу оченя надо - C++
17) Отримати квадратну матрицю порядку n . 1 2 3 ... n-1 n 2 1 2 ... n-2 n-1 3 2 1 ...

Может кто перевести эту прогу,для codeblocks - C++
#include &quot;stdafix.h&quot; #include &lt;iostream&gt; using namespace std; int _tmain(int argc, _TCHAR* argv) { float s,t; long...

Перевести надо из паскала на с++ - C++
program rung; var yh,y:array of real; h,x,a1,b1,a,c,y0,k1,k2,k3,k4,e:real; i,n,n2: integer;l:boolean; ff:text; function...

Надо перевести программу из ПАСКАЛЯ в СИ - C++
uses crt; var a:array of integer; m,n,i,j,k,m1,n1,q1,q2:integer; c:integer; begin clrscr; randomize; k:=0; ...

Надо перевести текст с паскаля в С++ - C++
Дали программу, а я в паскали совершенно не шарю, помогите перевести в С++ uses crt; const nmax=20; type frac=record ...

C# RSA шифравание и дешифравание надо перевести C++ - C++
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Analitik_usul { class...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru