強化学習 FROZEN_LAKE 8x8

PythonでなくC++で最短経路を探すプログラムを書いてみました。 ソースはこちら https://github.com/sugarontop/etc/tree/master/Qlearning2 ★最短経路を検索 S: スタートG: ゴールH: 穴(hole)o: フリー // 地図block BlockMap1[] = { S, o, H, o, H, o, o, …

UWP Framework Direct2D TypeScript

TypeScriptでこんなコードを書いて、Chakra.dllに読み込ませるとButtonクラスはIDispatch*に なりC++の世界でそれを操作できます。(IDispatchが何物なのかは、ググって下さい。) declare function CreateWindow(me:any, ty:string,title:string, x:number,y:…

UWP

Direct2DのWindowシステムを作ってみました。リンク UWPはHWNDが消えたため、裏の仕組みを想像しながらDirect2Dで実装しました。Windowシステムの肝はキャプチャーの仕組みです。 キャプチャーとはWindowsメッセージを一時的にあるオブジェクトに集中させる…

1、WindowsへPython インストール○ Python 3.5.2 [Windows x86-64 executable installer] をインストール ○ Visual Studio 2015 の Visual C++ 再頒布可能パッケージ vc_redist.x64.exe をインストール ○ C:\Users\[your name]\AppData\Local\Programs\Pyth…

 HDCとID2D1RenderTargetとの大きな違い

従来のHDCとID2D1RenderTargetとの大きな違いは、 HDCというデバイスコンテキストはWM_PAINT段階で作成->廃棄されるのに対して、 ID2D1RenderTargetはアプリ起動時にコンテキストが作成され、終了時までそれを使用し続けることにある。 しかし、あるタイミン…

どこかわからない場所で多分話題のUWP(UniversalWindowsPlatform)というWindows10以降の開発環境が用意されているので、せっかくだからこれのTextboxを作ってみた。 VisualSudio2015にあるC++ユニバーサルWindowsのテンプレート(DirectX11アプリ)をもとに3D…

Y = WX+B の式の意味は次のところ(51/187)で。 この式を高速で計算するC++AMPでの行列演算をつくってみた。(CUDAがこの分野での業界標準で、C++AMPの今後はどうよという気もするけど。) #include "stdafx.h" #include #include using namespace concurrency…

JsValueRefはvoid* のtypedefなので、何者なのか掴みにくい。また、スタック上でない場所でキープする場合は、AddRefしなければならない。多分、GarvageCollectが働いた時に回収されてしまうのを避けるため。 そこで、CJsValueRefというラッパークラスを作っ…

ChakraからCOMやVARIANTが消えたために、またやり直しだ。こちらが主流になると思われる。 以下はC++によるArrayとMapへの操作例。#include "stdafx.h" #define _JSRT_ #include "ChakraCore.h"#include #include #include #pragma comment (lib, "chakracor…

Dispatcher

スレッドは常時3つあります。1 呼び出し側のスレッド 2 呼び出される側のスレッド 3 2の結果を返すスレッド 1のスレッドを起こす呼び出し側は大抵WindowMessageと同じGUIスレッド。 2はGUIと異なるスレッド。独自のスタックを持ち重い関数を処理します…

方法1: Direct2Dで色を塗るとこうなります。ブラシというリソース(作成時にRenderTargetを必要とする)を作成して、描画後に開放します。 GDI32のSelectObjectに似た感じですが、リソースを描画単位で作成する方法はメモリリークの点で確実ですが、動作が…

HWNDレスを目的にしたWindowsコントロール フレームワークを作成しました。*コントロール類をDirect2Dだけで描画しています。 *C関数として呼び出せるようにDLLにまとめました。少なくとも最低これだけは作っておかないとマズイと思われるコントロールを…

一時的な文字バッファにstd::stringクラスは使わない、ただそれだけで速くなった。 #pragma oncenamespace V4 {class SplitString { public : SplitString(){} ~SplitString(){ clear(); } USHORT Split( LPCWSTR str, WCHAR ch ) { USHORT s = 0, e=0; std:…

C++には文字の分割で気の利いた方法がない。vectorで結果を受け取る方法は、その過程でメモリの やり取りに無駄が多い。 そこで、SplitStringというクラスを作成して、試してみるとなんと3倍も速くなった。 #include "stdafx.h" #include #include #include…

結局、NodeJS+V8に押された形で、JavaScript(Chakrart)のネイティブアプリ採用を公に認めた。 今までは煮え切らない態度で、IActiveScriptを作ったもののそれ以上何もしてこなかった。 セキュリティの問題が発生しやすいので、本当はあまりプッシュしたくな…

Metro, ユニバーサルアプリ, HWND

ユニバーサルアプリでHWNDを必要とする例は滅多にないだろうけど、こんな方法で取得できるらしい。 extern "C" int __stdcall GetWindowTextW(HWND hwnd, PWSTR text, int count); #pragma comment (lib, "user32.lib")struct __declspec(uuid("45D64A29-A63…

Windowsコントロールで一番難関のTextboxを作成、アップしました。ここです。 Direct2Dですべてを実装しているためHWNDレスです。TSFによる漢字変換に対応しています。 SingleLineのみですが、一見すると普通のTextboxと見分けが使いないはずです。なお、TSF…

BSTRは::SysFreeString(x); を実行しても直ぐには消えない。 デバッグの時ににこれが厄介になる場合がある。 下の関数を一度実行するとキャッシュを切ることができる。 #ifdef _DEBUG typedef int (*SETOANOCACHE)(void); // 昔は非公開関数だった?// BSTR…

bmp,gif,jpg,pngの画像ファイルをID2D1Bitmapへ変換するサンプルです。 LoadImage内でファイルをbinaryで取得しStreamへ変換しID2D1Bitmapを作成します。 なお、ID2D1RenderTargetを再構築するとID2D1Bitmapも作り直しが必要なので、StreamかFileNameは どこ…

ID2D1HwndRenderTargetとID2D1DeviceContext比較してみました。 以下はID2D1DeviceContextを使用した例です。 USE_DEVICECONTEXTをコメントにするとID2D1HwndRenderTargetになります。 #include "stdafx.h" #include "Win32Project.h" #define MAX_LOADSTRIN…

最新のxml paserはmsxml6。でもリリースからだいぶ時間もたち忘れられそうでメモしておく。使い方に癖があって、 #includeではなく、#importでライブラリ情報を動的に取得しなければならない。 しかも、COMは自動的にスマートポインタになる。 #include "std…

HWNDを必要としない入力コントールをDirect2Dで作成しました。C++で作成されるアプリはやがてこの方式へ移行すると思われます。 従来、Windowsコントロール(button,textbox,listbox,...)は以下のようにParent Windowのchild windowとして作成しなければ、な…

前のBinaryクラスで簡単なサンプルを作成。PNGファイルを暗号->複合。 非常にあっさりとしたプログラムになる。int _tmain(int argc, _TCHAR* argv[]) { _tsetlocale ( LC_ALL, L"" ); _CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_DELAY_FREE_MEM_DF|_C…

前のBinaryクラスを使用して文字列(unicode)とバイナリデータ(ansi文字列を含む)のややこしいやり取りを極限まで簡素化してみた。 // utf8とunicodeの変換 Binary utf8( std::wstring& s ); std::wstring utf8( const Binary& b );// バイナリーデータのbase…

バイナリデータを扱う上で必ず必要になる情報はバイナリデータの長さである。 これらをまとめて、かつ参照カウンタで寿命を管理する簡単便利なクラスを作ってみた。 参照カウンタの加減算にロックはかけていないので、スレッドには未対応である。 //////////…

HWNDはウインドウハンドルだが、OOPではちょっと邪魔な存在である。 子ウインドウは親ウインドウのWM_PAINTとは別系統でシステムが描画するからである。 コントロールの描画をWM_PAINTだけで統一できれば、色々なことができるはずだが、20年以上前のメモリ4M…

Direct2DでイメージファイルであるPNGを表示する方法。 ID2D1RenderTarget* cxt = ...CComPtr bmp; D2DResource::LoadImage( cxt, L"e:\test\images\abc.png", &bmp ); // auto image_size = bmp->GetPixelSize(); イメージの大きさ//リソースから読み込む場…

下のMainFrameをDirect2Dで今風(Windows8 Desktop)に作成してみました。Caption右上のボタンは手作りです。 // Win32Project2.cpp : アプリケーションのエントリ ポイントを定義します。 //#include "stdafx.h" #include "Win32Project2.h" // VSが作成した…

JavaScriptのArray(VARIANT型)をCOM側で作成する方法、map編 static bool CreateJavaScriptMap( IActiveScript* pAS, std::map& src, IDispatch** pout ) { HRESULT hr; CComPtr pD; CComVariant vr; DISPID idMethod; LPOLESTR nm[] = { L"Array" }; hr = p…

JavaScriptのArray(VARIANT型)をCOM側で作成する方法、list編 bool CreateJavaScriptArray( IActiveScript* pAS, VARIANTARG* varg, int varg_cnt, IDispatch** pout ) { HRESULT hr; CComPtr pD; CComVariant vr; DISPID idMethod; LPOLESTR nm[] = { L"Arr…