//+------------------------------------------------------------------+//| CChessman.mqh |//| Copyright 2012, Yury V. Reshetov |//| http://www.mql5.com |//+------------------------------------------------------------------+
#property copyright "Copyright 2012, Yury V. Reshetov"
#property link "http://www.mql5.com"//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CChessman // Класс: шахматная фигура
{
private :
int type; // Тип фигуры: // 0 - пешка,// 1 - ладья// 2 - конь// 3 - слон// 4 - ферзь// 5 - корольint c; // Цвет фигуры: 0 - белый, 1 - черный int h; // Положение фигуры по горизонталиint v; // Положение фигуры по вертикалиbool state; // Состояние фигуры: true - на доске, false - взята противникомpublic :
void CChessman( int t, int horisontal, int vertical, intgroup ); // Конструкторvoid ~CChessman(); // Деструктор// Изменение местонахождения фигуры на доске// Возвращает результат, если изменение корректно и было выполненоbool setPosition( int horisontal, int vertical); // Изменение позиции фигуры на доскеvoid erase(); // Вызывается, если фигура взята противникомint getType(); // Возвращает тип фигурыint getHPosition(); // Возвращает положение фигуры на доске по вертикалиint getVPosition(); // Возвращает положение фигуры на доске по горизонталиint getColor(); // Возвращает цвет фигурыbool getState(); // Возвращает текущий статус фигуры
};
//+------------------------------------------------------------------+//| Конструктор |//+------------------------------------------------------------------+void CChessman::CChessman( int t, int horisontal, int vertical, intgroup )
{
state= true ;
type = t;
h = horisontal;
v = vertical;
c = group ;
}
//+------------------------------------------------------------------+//| Изменение позиции фигуры на доске |//+------------------------------------------------------------------+bool CChessman::setPosition( int horisontal, int vertical)
{
if (!state)
{
return ( false );
}
if (horisontal< 0 )
{
return ( false );
}
if (horisontal> 7 )
{
return ( false );
}
if (vertical< 0 )
{
return ( false );
}
if (vertical> 7 )
{
return ( false );
}
h = horisontal;
v = vertical;
return ( true );
}
//+------------------------------------------------------------------+//| Удаление фигуры с доски |//+------------------------------------------------------------------+void CChessman::erase( void )
{
state= false ;
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int CChessman::getType( void )
{
return (type);
}
//+------------------------------------------------------------------+//| Возвращает горизонтальное положение фигуры на доске |//+------------------------------------------------------------------+int CChessman::getHPosition( void )
{
return (h);
}
//+------------------------------------------------------------------+//| Возвращает вертикальное положение фигуры на доске |//+------------------------------------------------------------------+int CChessman::getVPosition( void )
{
return (v);
}
//+------------------------------------------------------------------+//| Возвращает цвет фигуры |//+------------------------------------------------------------------+int CChessman::getColor( void )
{
return (c);
}
//+------------------------------------------------------------------+//| Возвращает статус фигуры |//+------------------------------------------------------------------+bool CChessman::getState( void )
{
return (state);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| CChessmansArray.mqh |//| Copyright 2012, Yury V. Reshetov |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2012, Yury V. Reshetov"#property link "http://www.mql5.com"#include <Chess/CChessman.mqh>//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CChessmansArray // Класс: Шахматная доска
{
private :
CChessman *table[]; // Массив шахматных фигурpublic :
void CChessmansArray(); // Конструкторvoid ~CChessmansArray(); // Деструктор
CChessman *getChessman( int i);
void goWhite(); // Ход белыхvoid goBlack(); // Ход черных
};
//+------------------------------------------------------------------+//| Конструктор |//+------------------------------------------------------------------+void CChessmansArray::CChessmansArray( void )
{
ArrayResize (table, 32 );
table[ 0 ] = new CChessman( 1 , 0 , 0 , 1 ); // Левая белая ладья
table[ 1 ] = new CChessman( 2 , 1 , 0 , 1 ); // Левый белый конь
table[ 2 ] = new CChessman( 3 , 2 , 0 , 1 ); // Левый белый слон
table[ 3 ] = new CChessman( 4 , 3 , 0 , 1 ); // Белый ферзь
table[ 4 ] = new CChessman( 5 , 4 , 0 , 1 ); // Белый король
table[ 5 ] = new CChessman( 3 , 5 , 0 , 1 ); // Правый белый слон
table[ 6 ] = new CChessman( 2 , 6 , 0 , 1 ); // Правый белый конь
table[ 7 ] = new CChessman( 1 , 7 , 0 , 1 ); // Правая белая ладья
table[ 0 ] = new CChessman( 0 , 0 , 1 , 1 ); // Белая пешка
table[ 1 ] = new CChessman( 0 , 1 , 1 , 1 ); // Белая пешка
table[ 2 ] = new CChessman( 0 , 2 , 1 , 1 ); // Белая пешка
table[ 3 ] = new CChessman( 0 , 3 , 1 , 1 ); // Белая пешка
table[ 4 ] = new CChessman( 0 , 4 , 1 , 1 ); // Белая пешка
table[ 5 ] = new CChessman( 0 , 5 , 1 , 1 ); // Белая пешка
table[ 6 ] = new CChessman( 0 , 6 , 1 , 1 ); // Белая пешка
table[ 7 ] = new CChessman( 0 , 7 , 1 , 1 ); // Белая пешка
table[ 0 ] = new CChessman( 1 , 0 , 7 , - 1 ); // Левая черная ладья
table[ 1 ] = new CChessman( 2 , 1 , 7 , - 1 ); // Левый черный конь
table[ 2 ] = new CChessman( 3 , 2 , 7 , - 1 ); // Левый черный слон
table[ 3 ] = new CChessman( 4 , 3 , 7 , - 1 ); // Черный ферзь
table[ 4 ] = new CChessman( 5 , 4 , 7 , - 1 ); // Черный король
table[ 5 ] = new CChessman( 3 , 5 , 7 , - 1 ); // Правый черный слон
table[ 6 ] = new CChessman( 2 , 6 , 7 , - 1 ); // Правый черный конь
table[ 7 ] = new CChessman( 1 , 7 , 7 , - 1 ); // Правая Черная ладья
table[ 0 ] = new CChessman( 0 , 0 , 6 , - 1 ); // Черная пешка
table[ 1 ] = new CChessman( 0 , 1 , 6 , - 1 ); // Черная пешка
table[ 2 ] = new CChessman( 0 , 2 , 6 , - 1 ); // Черная пешка
table[ 3 ] = new CChessman( 0 , 3 , 6 , - 1 ); // Черная пешка
table[ 4 ] = new CChessman( 0 , 4 , 6 , - 1 ); // Черная пешка
table[ 5 ] = new CChessman( 0 , 5 , 6 , - 1 ); // Черная пешка
table[ 6 ] = new CChessman( 0 , 6 , 6 , - 1 ); // Черная пешка
table[ 7 ] = new CChessman( 0 , 7 , 6 , - 1 ); // Черная пешка
}
//+------------------------------------------------------------------+//| Возвращает объект фигуры по индексу в массиве |//+------------------------------------------------------------------+
CChessman *CChessmansArray::getChessman( int i)
{
return (table[i]);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+//| CChessBot.mqh |//| Copyright 2012, Yury V. Reshetov |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2012, Yury V. Reshetov"#property link "http://www.mql5.com"#include <Chess/CChessman.mqh>#include <Chess/CChessmansArray.mqh>//+------------------------------------------------------------------+//| Класс: бот-шахматист |//+------------------------------------------------------------------+class CChessBot // Класс: бот-шахматист
{
private :
CChessman *chessmans[]; // Шахматные фигурыint table[]; // Шахматная доскаint c; // Цвет фигур: 0 - белый, 1 - черныйpublic :
void CChessBot( int group); // Конструкторvoid ~CChessBot(); // Деструкторvoid setTable(CChessmansArray *t); // Расставляет фигурыint go(); // Ход. Возвращает индекс своей фигуры, которой был сделан ход. int analitic(); // Анализ ходов
};
//+------------------------------------------------------------------+//| Конструктор |//+------------------------------------------------------------------+void CChessBot::CChessBot( int group)
{
c=group;
}
//+------------------------------------------------------------------+//| Расстановка фигур на шахматной доске |//+------------------------------------------------------------------+void CChessBot::setTable(CChessmansArray *mans)
{
ArrayResize (chessmans, 32 );
ArrayResize (table, 64 );
for ( int i= 0 ; i< 32 ; i++)
{
chessmans[i]=mans.getChessman(i);
table[chessmans[i].getHPosition() * 8 + chessmans[i].getVPosition()] = chessmans[i].getType() * 2 + chessmans[i].getColor();
}
}
//+------------------------------------------------------------------+//| Полуход |//+------------------------------------------------------------------+int CChessBot::go( void )
{
return ( 0 );
}
//+------------------------------------------------------------------+
そう、ゲームは性能や技術にキレを与えてくれるのです。ハードを質的に引っ張るからです。(ただし、大学時代の知り合いの教授は、なぜかゲームを普遍的な悪とみなしていた)。
機能の普遍性については、さらにステップバイステップで実装するための方向性を示します。
- 天気予報
- かがくデータしょり
- 薬剤学
- 3Dレンダリング(お金になる実用品として)
で、為替予想に入る...。
PS.
また、UCIでは、先ほど申し上げたように、MTのアプリケーションを作ることができます :)
クラウドの話ではないですが、クラウドの機能は明確です。また、MT以外でも使用することができます。
MTの話です。
MTを前提にしたチェスボット大会を開催することは、何も問題ないと思います。そして、同じボットがクラウドのコンピューティングリソースを 使うことになるのです。
実はFXを諦めてチェスをするのかも?昔はかなり上手かったんですけどね。
でも、私はバックギャモンの方が好きです。多分、誰かがMT5でバックギャモンをプログラムしてくれるなら、私は永遠に感謝します。
ポーカー!EPTを破り捨てよう!)))
MT5のニューラルネットワークについては、大きな計画がある。引き受けたからにはやり抜く。
今のところ、オーバーソースのプロジェクトに本当に参加して時間を使いたいと思う人は少ないという感触があります。
今のところ、本当にオーバーソースのプロジェクトに参加して、時間を無駄にしたいと思う人は少ないという感触があります。
経験がないんです。 当時、自分のチームの誰かをプロジェクトの メンターにすると約束していたはずなんですが。
そして、羊飼いがいなければ、羊は散り散りになってしまう。だから、誰かがコミュニティで何かをすれば、その責任はその人だけにあるのです。
経験なし。チームの誰かをプロジェクトのキュレーターにすることを約束しました。
しかし、羊飼いがいなければ、羊は散らばってしまいます。したがって、誰かがコミュニティで何かをした場合、彼だけが彼の仕事に責任があります。
ボルトロジーの経験以上のもの。そのように盲目にしましょう、そのように座りましょう、など。等祖父クリロフの寓話に従って、カルテットと呼ばれました。誰も何もしません。頭のいい顔をしている人は誰でも自分の意見を表明するだけです。
棒でみんなを促すのに学芸員は必要ありません。プロジェクトマネージャーは、コードの最初の行を作成する必要があります。これは、将来のクラスのインターフェイスであり、そこから、どこでさらに踊り、どこが行き止まりであるかがすでにほぼ明確になっています。そして、一部のプロジェクト参加者は、彼がやろうとしていることを正確に正当化し、彼の潜在的な活動が一般的な方向性と矛盾しない場合、彼は彼のアイデアの実装を委託されます。次に、他の参加者が接続します。等。等
ここでは、たとえば、自由な時間がありました。ここで、チェスプログラムのクラスのスケッチをいくつか投げました。
これで、リポジトリにプロジェクトを作成し、追加の開発者をリポジトリに接続できます。しかし、そこで何らかの意見を表明したいすべての人ではなく、特定のことをしようとしている人の中からです。
ユーリ チェスエンジンの場合は、かなり明確ですね。このテーマは、他の人たちがとてもよくやってくれています。
もし引き受けたとしても、蓄積された経験と、初期設定と極めて歯応えのある最適化(ビットカード、プリセットなど)の10000%セットを使わなければなりません。
ABCやミスでゼロから始めるのは無理。早すぎる最適化は悪」なんてことはない。ここでは、チェスに基づく数値計算を実装するための極めて高い経験が一度に必要です。
幸いなことに、それらについては多くの論文や資料、詳しい解説が公開されています。このテーマを読み始めると、達成されたソリューションのレベルが極めて高いことがすぐに理解できるだろう。
ユーリ チェスエンジンの場合は、かなり明確ですね。このテーマは、他の人たちがとてもよくやってくれています。
もし引き受けたとしても、蓄積された経験と、初期の極めて歯応えのある最適化(ビットカード、プリセットなど)の10000%セットを使わなければならない。
ABCやミスでゼロから始めるのは無理。早すぎる最適化は悪」なんてことはない。ここでは、チェスに基づく数値計算を実装するための極めて高い経験が一度に必要です。
幸いなことに、それらについては多くの論文や資料、詳しい解説が公開されています。このテーマを読み始めるとすぐに、極めて高いレベルのソリューションが達成されていることが理解できるだろう。
私も文献をいくつか持っていますが、ボツビニクはまだ紙媒体です。そして、もちろんMQL5ではなく、muLispで開発したものもあります。
私は、地元の開発者たちに、自分たちのプロジェクトには 監督者が必要ないことを示そうとしたことがあります。すべての技術に精通しているわけではなく、その分野の専門家である場合もありますが、それでもその分野で有能な、特定の開発者のチームを必要としています。そして、プロジェクトがゼロからスタートしないように、最初にこれらすべてを考え、他のチームのために準備するプロジェクトマネージャーが必要で、導入のエクスカーションの後、すぐに本題に入ることができる。そうでなければ、物事は軌道に乗らないのです。