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

Крестики Нолиики - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Самоудаляющаяся программа http://www.cyberforum.ru/cpp-beginners/thread913329.html
Не знал, в какой именно топик написать, и, т.к. сам еще начинающий, написал сюда.:) Нужно написать программу, которая требует ввода пароля, если пароль трижды введен неверно, программа самоудаляется. (.exe файл) Самоудаление реализовывал через создание батника. Сразу скажу, что какое именно содержимое записывать в батник додумался я не сам. Проблема в том, что батник создается, его...
C++ Пол-ль вводит число от 50 до 100. Программа раскладывает число на сумму 4-х квадратов, всеми возможными способами Пример: 39 = 1^2+2^2+3^2+5^2. Не получается написать код для этой задачи Помогите пож разобраться http://www.cyberforum.ru/cpp-beginners/thread913322.html
C++ как изображения конвертировать в текстовый файл
здравствуйте... Я вообще не программист, даже близко не стаю, вот поэтому прошу помощи у знающих людей... Расскажу для чего это, что бы понять, чем я занимаюсь вообще: Все наверно знают, что такое ЧПУ, так у меня есть маленький прототип этого аппарата, собранный из кусков старого принтера... А в голове присоединен двух ваттный лазер...
Шаблон массива с задаваемыми индексами C++
Реализовать шаблон массива с задаваемыми пределами индексов взяв за образец данный шаблон: template<class T, std::size_t N> // параметры шаблона class Array { public: // типы typedef T value_type; typedef T& reference; typedef const T& const_reference; typedef std::size_t size_type; static const size_type static_size = N; // размер массива
C++ Виртуальные функции (нужно ли во всех производных классах писать слово virtual?) http://www.cyberforum.ru/cpp-beginners/thread913299.html
Нужно ли во всех производных классах писать слово virtual? Или достаточно только один раз в базовом классе указать что функция виртуальная? Оно вроде и в одном случае правильно работает, и в другом тоже правильно :scratch: class A { public: virtual void Print() const { cout << "class A" << endl; } };
C++ В одномерном массиве найти среднее арифметическое чисел, которые входят в диапазон от 5 до 10 помогите написать программу)))дан одномерный массив некоторых чисел найти среднее арифметическое чисел которые входят в диапазон от 5 до 10)))) подробнее

Показать сообщение отдельно
Sashaman
Сообщений: n/a

Крестики Нолиики - C++

27.06.2013, 15:36. Просмотров 208. Ответов 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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream> //Стандартная библиотека ввода-вывода
#include <cstring> //Стандартная библиотека для работы со строками]
#include <stdio.h>
 
using namespace std;
 
 
 
 
 
char PlayerName1[80]; //Переменные для имен игроков
char cells[9] = {'-', '-', '-', '-', '-', '-', '-', '-', '-'}; 
char PlayerName2[80]; //почему они объявлены глобальными вы поймете немного позже
char win='-'; //Символ победы ("-" - ничья, "Х" - первого игрока, "О" - второго)
 
void show_cells();
void make_move(int);
char check();
void result(); 
 
int main (){
   do {
      cout << "Enter the name of the 1st player: ";
      gets(PlayerName1);
      cout << "Enter the name of the 2st player: ";
      gets(PlayerName2);
      cout << "\n";
   } while (!strcmp(PlayerName1, PlayerName2));
 
   show_cells();
 
   for (int move = 1; move <= 9; move++) {
      if (move % 2) make_move(1);
              else make_move(2);               
      show_cells();                          
      if (move >= 5)
 
/*Если номер хода 5 или больше, то проходит проверка на победу (раньше, чем на 5-ом ходе победить нельзя)*/
      {
          win=check(); //Символ победы - это возвращенное значение функции проверки
          if(win!='-') //Если символ победы не "-" (то есть кто-то победил),
             break; //то нету смысла в дальнейших ходах и цикл прерывается
      }
    }
 
    //Цикл закончился и ничто не победил - ничья
    result(); //Функция, которая выводит результат
    system ("pause");
    return 0;
}
 
 
 
//в нем хранятся данные о клеточках ("-" - пустая, "Х" - первого игрока, "О" - второго)
 
void show_cells()  {//функция не имеет возвращающего типа, потому что она просто выводит поле
 
   system("cls"); //системная функция, которая очищает экран для того чтобы выглядело солидно
 
 
 
   cout << "Numbers of cells:\n" << endl;
 
   //Номера клеток для того, чтобы человек знал куда ходить
 
   cout << "-" << 1 << "-" << '|' << "-" << 2 << "-" << '|' << "-" << 3 << "-" << endl;
   cout << "-" << 4 << "-" << '|' << "-" << 5 << "-" << '|' << "-" << 6 << "-" << endl;
   cout << "-" << 7 << "-" << '|' << "-" << 8 << "-" << '|' << "-" << 9 << "-" << "\n" << endl;
   cout << "Current situation (--- is empty):\n" << endl;
 
   //Текущая ситуация на поле (клеточка --- - пуста)
   cout << "-" << cells[0] << "-" << '|' << "-" << cells[1] << "-" << '|' << "-" << cells[2] << "-" << endl;
   cout << "-" << cells[3] << "-" << '|' << "-" << cells[4] << "-" << '|' << "-" << cells[5] << "-" << endl;
   cout << "-" << cells[6] << "-" << '|' << "-" << cells[7] << "-" << '|' << "-" << cells[8] << "-" << "\n" << endl;
}
 
 
void make_move(int num) {
 
/*это функция тоже ничего не возвращает, но у нее есть аргумент - номеригрока, который будет делать ход*/
 
   if (num == 1) cout << PlayerName1;
 
//Если аргумент = 1, то выводится имя первого игрока (то есть он будет ходить)
 
      else cout << PlayerName2;
 
   cout << ", enter a cell's number to make move: ";
 
   int cell;
 
   cin >> cell; //Игрок который ходит должен указать номер клеточки
 
   cout << "\n";
 
   while (cell > 9 || cell < 1 || cells[cell-1] == 'O' || cells[cell-1] == 'X') {
 
//Проверка на валидность (клеточка не занята и ее номер не <1 и не >9
 
       cout << "Enter a CORRECT (1-9) or EMPTY (---) cell's number to make move: ";
 
       cin >> cell; //Если проверка не пройдена, то игрок должен еще раз ввести номер клеточки
 
       cout << "\n";
 
   }
 
 
 
   if (num == 1) cells[cell-1] = 'X'; //Первый игрок играет "крестиками", а второй - "ноликами"
 
      else cells[cell-1] = 'O';
 
   show_cells();
 
   system ("pause");
 
//   return 0;
 
        }
 
 
 
 
 
char check()
 
{
 
   for(int i = 0; i < 3; i++) //Для победы нужны 3 клеточки
 
      if (cells[i*3] == cells[i*3+1] && cells[i*3+1] == cells[i*3+2]) //Комбинации для победы вычисляются по
 
         return cells[i]; //разным формулам, эта - по горизонтали
 
         //0-1-2, 3-4-5 и 6-7-8
 
         //нумерация в массиве начинается с 0
 
      else if (cells[i] == cells[i+3] && cells[i+3] == cells[i+6]) //Вертикальная
 
         return cells[i]; //0-3-6, 1-4-7 и 2-5-8
 
      else if ((cells[2] == cells[4] && cells[4] == cells[6]) || (cells[0] == cells[4] && cells[4] == cells[8]))
 
         return cells[i]; //И по диагонали: 0-4-8 и 2-4-6
 
      return '-'; //Иначе - ничья
 
}
 
 
void result() {
 
   if (win=='X') cout << PlayerName1 << " win! Congratulations! " << PlayerName2 << " is looser! " << endl;
 
   else if (win=='O') cout << PlayerName2 << " win! Congratulations! " << PlayerName1 << " is looser! " << endl;
 
   else cout << "Draw!!!" << endl; //Тут я думаю понятно
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru