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

Класс типа игра в крестики-нолики - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Класс вектор http://www.cyberforum.ru/cpp-beginners/thread608352.html
Создать абстрактный тип данных - класс вектор, который имеет указатель на float, число элементов и переменную состояния. Определить конструктор без параметров, конструктор с параметром, конструктор с двумя параметрами. Конструктор без параметров выделяет место для одного элемента и инициализирует его в ноль. Конструктор с одним параметром, - размер вектора, - выделяет место и инициализирует...
C++ метод Жордано-Гаусса помогите найти ошибку. первый х считает не правильно #include <cstdlib> #include <iostream> #include <fstream> #include <math.h> using namespace std; int main() {double ka,kb,tempa,tempb; http://www.cyberforum.ru/cpp-beginners/thread608346.html
Создать класс четырехугольников, квадратов и прямоугольников (иерархия) C++
Создать класс четырехугольников, квадратов и прямоугольников. Создать из них иерархию. Определить функции печати, конструкторы и деструкторы, вычисление площади и периметра. за ранее спасибо
C++ Функция main () {}
Есть разные варианты синтаксиса функции мэйн 1.void main () {} 2. int main () {return 0;} 3. int main() {} 4. main (void) {} 5. int main(int argc,char**argv) 6. int main(int argc,char*argv)
C++ Ошибка в значении переменной, передаваемой в функцию http://www.cyberforum.ru/cpp-beginners/thread608319.html
Странный вопрос конечно, ошибка в функции (верней число), но я не могу понять почему не работает правильно. #include <iostream> #include <conio.h> using namespace std; int Add (int x, int y){ cout << "В функции Add(), получено " << x << " и " << y << "\n"; return (x+y); }
C++ Стеки- Ввести строку и вывести его в обратном порядке Ввести строку и вывести его в обратном порядке через стеки.Очень срочно нада.. подробнее

Показать сообщение отдельно
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 10:26     Класс типа игра в крестики-нолики
У меня работает, правда долго не тестил
А я и не присал, что тут класы есть, просто захотелось сделать прогу вот написал код(учусь я много для развития делаю), вывесил чтобы помогли более оптимизировать или подсказать. Вот мне тож интересно как избавиться от стольких переменных в функции proverka ().

З.Ы. В коде много мусора, сам вижу

Добавлено через 3 часа 8 минут
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
#include <iostream>
#include <string.h>
using namespace std;
char arr [3][3]={{'-','-','-'},{'-','-','-'},{'-','-','-'}};
int N,y,n,x1;
string s;
string winx("xxx"), win0("000");
 
int vvod()
{
cout<<"Vvedite stroky - "; cin>>N;
cout<<"Vvedite stolbec - "; cin>>y;
if (arr[N-1][y-1]=='-'){if (n%2==0){arr[N-1][y-1]=2;arr[N-1][y-1]='0';} else {arr[N-1][y-1]=1; arr[N-1][y-1]='x';}}
else {cout<<"zanyato!" <<endl; vvod();} 
}
void pokaz()
{
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++) cout<<arr[i][j]<<"|"; 
cout<<endl;
cout<<"------"<<endl ;
}     
}
int proverka ()
{x1=0;s="";
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++) 
{
s+=arr[i][j];
if (arr[i][j]=='-') x1++;
}
s+=" ";
}
s+=arr[0][0]+arr[1][1]+arr[2][2]+" ";
s+=arr[0][2]+arr[1][1]+arr[2][0]+" ";
if (x1==0) {cout<<"Nichya"<<endl; return 2;}
int foundx=s.find(winx);
if (foundx>=1) {cout<<"Pobedil *X* !!!"<<endl;return 1;}
int found0=s.find(win0);
if (found0>=1) {cout<<"Pobedil *0* !!!"<<endl;return 1;}
}
int main()
{char win=false;
pokaz();
n=1;
while (win!=true)
{
vvod();
pokaz();
if (proverka ()==1||proverka ()==2) break;
n++;
}
system("PAUSE");  
return 0;
}
Переработал код, должен теперь нормально работать.
Кроме 1 момента :
Вопрос почему не находится строка winx в строке s ?

Добавлено через 24 минуты
Вопросы: почему если задать строку s пустой то не находит первые 3 символа корректно. Если задать строку с пробелом, то находит.
Почему нельзя так написать:
C++
1
s+=arr[0][2]+arr[1][1]+arr[2][0]+" ";
а нужно так :
C++
1
s=s+arr[0][2]+arr[1][1]+arr[2][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
#include <iostream>
#include <string.h>
using namespace std;
char arr [3][3]={{'-','-','-'},{'-','-','-'},{'-','-','-'}};
int N,y,n,x1,foundx=0,found0=0;
string s;
string winx("xxx"), win0("000");
 
int vvod()
{
cout<<"Vvedite stroky - "; cin>>N;
cout<<"Vvedite stolbec - "; cin>>y;
if (arr[N-1][y-1]=='-'){if (n%2==0){arr[N-1][y-1]=2;arr[N-1][y-1]='0';} else {arr[N-1][y-1]=1; arr[N-1][y-1]='x';}}
else {cout<<"zanyato!" <<endl; vvod();} 
}
void pokaz()
{
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++) cout<<arr[i][j]<<"|"; 
cout<<endl;
cout<<"------"<<endl ;
}     
}
int proverka ()
{x1=0;s=" ";
for (int i=0;i<3;i++)
{
for (int j=0;j<3;j++) 
{
s+=arr[i][j];
if (arr[i][j]=='-') x1++;
}
s+=" ";
}
s=s+arr[0][0]+arr[1][1]+arr[2][2]+" ";
s=s+arr[0][2]+arr[1][1]+arr[2][0]+" ";
if (x1==0) {cout<<"Nichya"<<endl; return 2;}
foundx=s.find(winx);
if (foundx>=1) {cout<<"Pobedil *X* !!!"<<endl;return 1;}
found0=s.find(win0);
if (found0>=1) {cout<<"Pobedil *0* !!!"<<endl;return 1;}
}
int main()
{char win=false;
pokaz();
n=1;
while (win!=true)
{
vvod();
pokaz();
if (proverka ()==1||proverka ()==2) break;
n++;
}
system("PAUSE");  
return 0;
}
Добавлено через 15 часов 27 минут
АП ап ап
 
Текущее время: 12:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru