Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

игра в консоли

17K
02 апреля 2007 года
vanyavl
23 / / 25.12.2006
Решил написать игру. Правила гры следующие. Задается количество фишек игроком, после этого у нас появляються эти фишки на экране(к примеру мы задали 6)
>>> <<<
фишка может ходить на 1 позицию и на 2, тоесть через фишку. Я все сделал, но не все. Функция автоматическая перестановка работает не так как бы мне этого хотелось. Она далжна автоматически переставить фишки, а у меня она переставляет только первую половину. и 2 не знаю как прощитать что б победа выводилась, тоесть когда для конкретного числа фишек я задавал просто условие и в нем проверял если значения изменились, тогда победа, а тут что то не олучилось, есл кому интересно, помогте пожалуйста
Код:
#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");

    }

}
355
02 апреля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
пользуйся форматированием кода -- желающих помочь станет больше ;)
17K
03 апреля 2007 года
vanyavl
23 / / 25.12.2006
оттабулировал, думаю так код будет лутьше воспринят
17K
06 апреля 2007 года
vanyavl
23 / / 25.12.2006
всем большое спасибо за "помощь".

PS Мегареспект <SCORP>, единственный человек который не отвернулся
26K
08 апреля 2007 года
Atomic
8 / / 06.04.2007
проверка победы состоит в том чтобы все > фишки были справа а < слева ?

тогда вот так...

 
Код:
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; // если после > ниразу не встретилась < - значит победа.
}


функция возвращает true если победа. false если нет. не проверял в компиляторе но должно работать вроде.

Насчет алгоритма автоматической перестановки то он помоему неверный насколько я понял. По крайней мере у меня вообще ничего не переставляет кроме 1 первой фишки.
Писать просто влом.. короче > по одной перегоняешь вправо а < ее перепрыгивают.
355
09 апреля 2007 года
&lt;SCORP&gt;
786 / / 21.10.2006
помоему лучше будет
 
Код:
bool CheckForWin()
{
  for (int i = 0 ; i < n/2 ; i++)
  {
     if (x != '<' || x[n-i] != '>')
       return false;
  }
  return true;
}
28K
11 апреля 2007 года
SOle
2 / / 10.04.2007
Цитата: vanyavl
Решил написать игру. Правила гры следующие. Задается количество фишек игроком, после этого у нас появляються эти фишки на экране(к примеру мы задали 6)
>>> <<<
фишка может ходить на 1 позицию и на 2, тоесть через фишку. Я все сделал, но не все. Функция автоматическая перестановка работает не так как бы мне этого хотелось. Она далжна автоматически переставить фишки, а у меня она переставляет только первую половину. и 2 не знаю как прощитать что б победа выводилась, тоесть когда для конкретного числа фишек я задавал просто условие и в нем проверял если значения изменились, тогда победа, а тут что то не олучилось, есл кому интересно, помогте пожалуйста




Извиняй, если что не так... Условия не понял, написал по-своему.
Правила хода такие, как ты и написал, с той разницей, что если шагаешь через фишку соперника, то она исчезает. Выигрывает тот, у кого остаются фишки. :) Правда, обычно ничья выходит. :(
AI туповат получился. Если все ж интересно, смотри!
Если появяться вопросы - пиши, постараюсь ответить.
PS: играть можно только Человек протип CPU. Если что, сам сможешь дописать!
Удачи!

17K
11 апреля 2007 года
vanyavl
23 / / 25.12.2006
всем большое спосибо, курсовик уже сдал)
очень понравилась реализация SOle, хотя и неверно но интересно. молодец)
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог