PMG
https://forum.pmg.org.ru/

Сдвиг фишек
https://forum.pmg.org.ru/viewtopic.php?f=3&t=111
Страница 2 из 2

Автор:  MagicWolf [ 09 авг 2006 08:59 ]
Заголовок сообщения: 

Уже пробывал реализовать...

Автор:  R.I.P. [ 09 авг 2006 13:23 ]
Заголовок сообщения: 

Код:
const int N; // число дорожек
int D[N]; // Расстояния до левого края

void Comp(int *ot, int *sk) // ot - откуда(номер дорожки), sk - сколько шагов
{
   int sum=0;
   for (int a = 0; a < N; a ++)
      sum ^= D[a];

   if (sum==0) // не повезло - игрок в более выигрышном положении
      for (int a = 0; a < N; a ++)
         if (D[a]>0)
         {
            *ot = a; *sk = 1; return; // здесь можно сделать какой-нить рандом
         }

   for (int a = 0; a < N; a ++)
      if ((D[a]^sum) < D[a])
      {
         *ot = a; *sk = D[a]-(D[a]^sum); return;
      }
}

=)

Автор:  MagicWolf [ 09 авг 2006 16:10 ]
Заголовок сообщения: 

Просто ;). И как работает?

Автор:  R.I.P. [ 09 авг 2006 16:24 ]
Заголовок сообщения: 

Ах, да, инструкция к коду....

N и D[N] - глобальные.
Когда нужно узнать, как ходит комп пишем:
Код:
int x, y;
Comp(&x, &y);
D[x]-=y;

=)

Автор:  MagicWolf [ 10 авг 2006 08:29 ]
Заголовок сообщения: 

Так у тебя наверное уже готовая прога есть? Посмотреть можно?

Автор:  R.I.P. [ 10 авг 2006 15:00 ]
Заголовок сообщения: 

Пожалуйста:

Код:
#include <iostream>

#define MAX_N 10

using namespace std;
int N, D[MAX_N], x, y;

void Comp(int *ot, int *sk)
{...}

bool Change(int ot, int sk)
{
   D[ot]-=sk;

   for (int a = 0; a < N; a ++)
      if (D[a]!=0)
         return false;
   return true;
}

void Out()
{
   cout << "\n";
   for (int a = 0; a < N; a ++)
         cout << D[a] << "\t";
   cout << "\n";
}

int main()
{
   char ch;
   cout << "Kolichestvo Dorojek(max10)->";
   cin >> N;
   cout << "Rasstojanija po Dorojkam(max32000)->";
   for (int a = 0; a < N; a ++)
      cin >> D[a];

   while(1)
   {
      Out();
      cout << "(Dorojka)(Naskolko dvigat)->";
      cin >> x >> y;
      if (Change(x-1, y))
      {
         cout << "Tyi vyigral";
         break;
      }
      Out();
      Comp(&x, &y);
      cout << x+1 << " " << y << "\n";
      if (Change(x, y))
      {
         cout << "Comp vyigral";
         break;
      }
   }

   cout << "\nVvedite cho-nibud->";
   cin >> ch;
    return 0;
}


Только здесь нет защиты от дурака. Прога писалась, чтобы отладить алгоритм. (Совет: чтобы начать игру вторым, надо подвинуть фишку на 0 клеток).
=)

Автор:  MagicWolf [ 11 авг 2006 10:07 ]
Заголовок сообщения: 

Ok, спасибо, надо попробывать ...

Страница 2 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/