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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Lordi1289
2 / 2 / 0
Регистрация: 02.11.2010
Сообщений: 103
#1

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

18.06.2012, 12:40. Просмотров 1366. Ответов 6
Метки нет (Все метки)

Создать класс типа игра в крестики-нолики. Поле класса - массив из (3х3). Ставить можно только на свободные.



за ранее спасибо
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2012, 12:40
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Класс типа игра в крестики-нолики (C++):

Игра [Крестики Нолики] C++ - C++
Всем привет. Возможно кому-то пригодится исходный код игры . Все очень просто и легко. Компилятор Borland C++ Builder 6. #pragma...

Игра крестики-нолики - C++
Здравствуйте, ребята! Вообщем такое задание: Создать класс типа игра крестики-нолики. Поле класса - массив из (3х3). Ставить можна...

игра крестики нолики - C++
Есть готовая игра,работающая,как мне добавить функцию sleep,чтобы заменить это: for(int i = 0; i < 400000000; i++) ...

Игра Крестики-нолики - C++
Реализуйте игру «Крестики-нолики». Кроме главной функции, выделите отдельные подпрограммы для · Инициализации матрицы 3х3 «пустыми»...

Игра крестики нолики - C++
Помогите пожалуйста. Нужна очень срочно игра крестики-нолили Добавлено через 8 минут Люди спасите!!!

игра крестики нолики - C++
пытаюсь сделать игру крестики нолики. извиняюсь сразу за корявый код) // Example program #include <iostream> #include <string> ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Wolfed
2 / 2 / 1
Регистрация: 15.02.2011
Сообщений: 70
18.06.2012, 12:52 #2
по 3 кнопки в 3 ряда расставляешь, изначально с пустым Text. При нажатии на кнопку проверяет пустой ли Text. Если да, то вставляет либо Х либо О(буквы для простоты). Чтобы осуществить последовательные ходы, нужно также добавить булеановскую переменную, которая после проверки на пустоту Text и захода в цикл меняется на противоположную. Осталось только проверку на выигрыш и всё.

Можешь посмотреть здесь:
1
Gepar
1177 / 533 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
18.06.2012, 12:53 #3
Ну так вперёд реализовывать как хочется, задание весьма свободное в плане того как его реализовать. Если возникли конкретные проблемы или вопросы (задание, хоть и является одной большой проблемой обычно, в этот список проблем в данном случае не входит) - опиши их здесь и тебе подскажут как что-то реализовать конкретное. Полностью задание за тебя реализовывать вряд ли кто захочет.

Добавлено через 1 минуту
Wolfed, реализовать просят через массив - это и так указано в задании да и что-то мне подсказывает что задание на чистый с++...
1
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
18.06.2012, 14:00 #4
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
#include <iostream>
using namespace std;
int mass[6][6]={{0,0,0},{0,0,0},{0,0,0}};
char arr [6][6];
int N,y,n;
char z=('x'), w=('0');
int vvod()
{
cout<<"Vvedite stroky - "; cin>>N;
cout<<"Vvedite stolbec - "; cin>>y;
if (mass[N][y]==0){if (n%2==0){mass[N][y]=2;arr[N][y]=z;} else {mass[N][y]=1; arr[N][y]=w;}}
else {cout<<"zanyato!" <<endl; vvod();} 
}
void pokaz()
{
for (int i=1;i<4;i++)
{
for (int j=1;j<4;j++) cout<<arr[i][j]<<"|"; 
cout<<endl;
cout<<"------"<<endl ;
}     
}
int proverka ()
{char win=false;
int sum1=mass[1][1]+mass[1][2]+mass[1][3];
int sum2=mass[2][1]+mass[2][2]+mass[2][3];
int sum3=mass[3][1]+mass[3][2]+mass[3][3];
int sum4=mass[1][1]+mass[2][1]+mass[3][1];
int sum5=mass[1][2]+mass[2][2]+mass[3][2];
int sum6=mass[1][3]+mass[2][3]+mass[3][3];
int sum7=mass[1][1]+mass[2][2]+mass[3][3];
int sum8=mass[1][3]+mass[2][2]+mass[3][1]; 
if (sum1==6||sum2==6||sum3==6||sum4==6||sum5==6||sum6==6||sum7==6||sum8==6) {cout<<"Vuigral *X* !!"<<endl; win=true; return 1;}
if (sum1==6||sum2==6||sum3==6||sum4==6||sum5==6||sum6==6||sum7==6||sum8==6) {cout<<"Vuigral *0* !!"<<endl; win=true; return 1;}
else return 0;}
int main()
{char win=false;
pokaz();
n=1;
while (win!=true)
{
vvod();
pokaz();
if (proverka ()==1) break;
n++;
}
system("PAUSE");  
return 0;
}
Подскажите, как можно было реализовать проверку проще? Не уходя, конечно, в высший пилотаж с++
1
bLesk
41 / 41 / 1
Регистрация: 24.11.2009
Сообщений: 165
18.06.2012, 14:37 #5
Aesonet
Я конечно прошу прощения, если ошибаюсь, но где тут у вас класс? Да и использовать столько глобальных переменных и два массива, вроде бы не очень рационально, или я не прав?
0
NeonLost
Пес войны
74 / 85 / 3
Регистрация: 23.02.2012
Сообщений: 653
18.06.2012, 14:39 #6
Aesonet это ваще работать не должно...
если нужно могу свой проект скинуть в winForms...там для 1 игрока и для 2 есть)
0
Aesonet
23 / 23 / 1
Регистрация: 04.04.2012
Сообщений: 119
19.06.2012, 10:26 #7
У меня работает, правда долго не тестил
А я и не присал, что тут класы есть, просто захотелось сделать прогу вот написал код(учусь я много для развития делаю), вывесил чтобы помогли более оптимизировать или подсказать. Вот мне тож интересно как избавиться от стольких переменных в функции 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 минут
АП ап ап
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.06.2012, 10:26
Привет! Вот еще темы с ответами:

Игра Крестики-нолики - C++
Ребят, такая ситуация, задумал написать игру крестики нолики:) Суть в том чтобы сами крестики и нолики прописывались в матрицу 3 на 3, но...

Игра Крестики-нолики - C++
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;string&gt; void SetRussianLocale() { setlocale(LC_ALL, &quot;Russian&quot;); } char board...

игра крестики-нолики - C++
Доброго времени суток! собственно говоря не знаю как сделать нормально изображения Х и O программа вот #include &lt;allegro.h&gt; ...

Игра крестики-нолики в классах - C++
Здравствуйте. Вот код написанный без классов: #include &lt;iostream&gt; //Стандартная библиотека ввода-вывода #include &lt;cstring&gt;...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.06.2012, 10:26
Ответ Создать тему
Опции темы

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