#include<iostream.h>
#include<windows.h>
#include<stdlib.h>
int i;
const char*ru(const char*s)
{
static char but[256];
CharToOem (s,but);
return but;
};
class game
{
public:
game();
int n,p;
char x[100];
void podskazka(void);
void perestanovka(void);
void avtoperestanovka(void);
void vivod(void);
};
game::game()
{
cout<<ru("Количество фишек в игре = ");
cin>>n;
while (n%2!=0) //остаток от деления
{
cout<<ru("Количество фишек в игре = ");
cin>>n;
}
if (n%2==0)
{
p=n/2;
for (i=0; i<p; i++)
{
x=62;
}
x=32;
p=n/2;
for (i=0; i<p; i++)
{
x[i+1+p]=60;
}
}
}
void game::podskazka(void)
{
cout<<" ";
for (i=0; i<=n; i++) //выводим под фишками цифры
{
cout<<i<<" ";
}
}
void game::perestanovka(void) //переставляем фишки
{
int m;
char a;
cout<<"\n";
cout<<ru("Номер=");
cin>>m;
for (i=0; i<=n; i++)
{
if (x[m+1]==32)
{
if (x[m]==62)
{
a=x[m];
x[m]=x[m+1];
x[m+1]=a;
}
}
else if (x[m+2]==32)
{
if (x[m]==62)
{
a=x[m];
x[m]=x[m+2];
x[m+2]=a;
}
}
else if (x[m-1]==32)
{
if (x[m]==60)
{
a=x[m];
x[m]=x[m-1];
x[m-1]=a;
}
}
else if (x[m-2]==32)
{
if (x[m]==60)
{
a=x[m];
x[m]=x[m-2];
x[m-2]=a;
}
}
}
}
void game::avtoperestanovka(void) //автоматческая перестановка фишки
{
int m,k;
char a;
k=1;
for (m=0; m<=n; m++)
{
if (k==1)
{
if (x[m+1]==32)
{
if (x[m]==62)
{
a=x[m];
x[m]=x[m+1];
x[m+1]=a;
}
}
else if (x[m+2]==32)
{
if (x[m]==62)
{
a=x[m];
x[m]=x[m+2];
x[m+2]=a;
}
}
}
if (k==2)
{
if (x[m-1]==32)
{
if (x[m]==60)
{
a=x[m];
x[m]=x[m-1];
x[m-1]=a;
}
}
else if (x[m-2]==32)
{
if (x[m]==60)
{
a=x[m];
x[m]=x[m-2];
x[m-2]=a;
}
}
}
}
} //end void
void game::vivod(void) //выводим фишки
{
int i;
cout<<" ";
for (i=0; i<=n; i++)
{
cout<<x<<" ";
}
};
void main()
{
int t;
game q;
cout<<ru("1-Новая игра\n");
cout<<ru("2-Обучение\n");
cout<<ru("№ ");
cin>>t;
if (t==1)
{
q.vivod(); cout<<endl;
q.podskazka(); cout<<endl;
for (i=0; i<q.n; i++)
{
while (q.x!=60 || q.x[i+1+q.p]!=62)
{
q.perestanovka();
system("cls"); cout<<endl;
q.vivod(); cout<<endl;
q.podskazka(); cout<<endl<<endl;
}
}
cout<<endl;
cout<<ru(" !!!Победа!!!\n\n\n");
}
if (t==2)
{
q.vivod(); cout<<endl;
q.podskazka(); cout<<endl;
for (i=0; i<q.n; i++)
{
while (q.x!=60 || q.x[i+1+q.p]!=62)
{
q.avtoperestanovka();
system("cls"); cout<<endl;
q.vivod(); cout<<endl;
q.podskazka(); cout<<endl<<endl;
}
}
cout<<endl;
cout<<ru(" !!!Победа!!!\n\n\n");
}
}
игра в консоли
>>> <<<
фишка может ходить на 1 позицию и на 2, тоесть через фишку. Я все сделал, но не все. Функция автоматическая перестановка работает не так как бы мне этого хотелось. Она далжна автоматически переставить фишки, а у меня она переставляет только первую половину. и 2 не знаю как прощитать что б победа выводилась, тоесть когда для конкретного числа фишек я задавал просто условие и в нем проверял если значения изменились, тогда победа, а тут что то не олучилось, есл кому интересно, помогте пожалуйста
Код:
пользуйся форматированием кода -- желающих помочь станет больше ;)
оттабулировал, думаю так код будет лутьше воспринят
PS Мегареспект <SCORP>, единственный человек который не отвернулся
тогда вот так...
Код:
BOOL CheckForWin(void)
{
int w=0;
int d=0;
for (w=0;w<=n;w++){
if (x[w]==">"){d=1; continue;} //если встретилась ">" после нее уже не должно быть "<"
if ((x[w]=="<")&&(d==1)) return false; // если есть то еще не победа
}
return true; // если после > ниразу не встретилась < - значит победа.
}
{
int w=0;
int d=0;
for (w=0;w<=n;w++){
if (x[w]==">"){d=1; continue;} //если встретилась ">" после нее уже не должно быть "<"
if ((x[w]=="<")&&(d==1)) return false; // если есть то еще не победа
}
return true; // если после > ниразу не встретилась < - значит победа.
}
функция возвращает true если победа. false если нет. не проверял в компиляторе но должно работать вроде.
Насчет алгоритма автоматической перестановки то он помоему неверный насколько я понял. По крайней мере у меня вообще ничего не переставляет кроме 1 первой фишки.
Писать просто влом.. короче > по одной перегоняешь вправо а < ее перепрыгивают.
Код:
bool CheckForWin()
{
for (int i = 0 ; i < n/2 ; i++)
{
if (x != '<' || x[n-i] != '>')
return false;
}
return true;
}
{
for (int i = 0 ; i < n/2 ; i++)
{
if (x != '<' || x[n-i] != '>')
return false;
}
return true;
}
Цитата: vanyavl
Решил написать игру. Правила гры следующие. Задается количество фишек игроком, после этого у нас появляються эти фишки на экране(к примеру мы задали 6)
>>> <<<
фишка может ходить на 1 позицию и на 2, тоесть через фишку. Я все сделал, но не все. Функция автоматическая перестановка работает не так как бы мне этого хотелось. Она далжна автоматически переставить фишки, а у меня она переставляет только первую половину. и 2 не знаю как прощитать что б победа выводилась, тоесть когда для конкретного числа фишек я задавал просто условие и в нем проверял если значения изменились, тогда победа, а тут что то не олучилось, есл кому интересно, помогте пожалуйста
>>> <<<
фишка может ходить на 1 позицию и на 2, тоесть через фишку. Я все сделал, но не все. Функция автоматическая перестановка работает не так как бы мне этого хотелось. Она далжна автоматически переставить фишки, а у меня она переставляет только первую половину. и 2 не знаю как прощитать что б победа выводилась, тоесть когда для конкретного числа фишек я задавал просто условие и в нем проверял если значения изменились, тогда победа, а тут что то не олучилось, есл кому интересно, помогте пожалуйста
Извиняй, если что не так... Условия не понял, написал по-своему.
Правила хода такие, как ты и написал, с той разницей, что если шагаешь через фишку соперника, то она исчезает. Выигрывает тот, у кого остаются фишки. :) Правда, обычно ничья выходит. :(
AI туповат получился. Если все ж интересно, смотри!
Если появяться вопросы - пиши, постараюсь ответить.
PS: играть можно только Человек протип CPU. Если что, сам сможешь дописать!
Удачи!
очень понравилась реализация SOle, хотя и неверно но интересно. молодец)