PG日誌

受託系 PG が C# の事を書いています

WPFで自力でチャートを描画してみる

WPFで数万点のデータを高速にグラフに表示しようとすると、たいていのチャートライブラリで何十秒も描画に時間がかかって使い物にならないことが多いので、簡単にデータを見たいときに使用する簡易チャートライブライを作成してみました。 線グラフっぽいも…

Stellaris「Synthetic Dawn」コンティンジェンシー・リベンジ

前回の記事でStellaris 1.8.0 + Synthetic Dawnで新しくなった終盤の危機、「コンティンジェンシー」に完膚なきまでに我が機械帝国がボロ負けしてしまいました。大変悔しいので、前回の反省点を生かしつつ、今回はコンティンジェンシーを潰すために機械文明…

.NET と.NET Coreで定義ファイルを読む

.NETのアプリケーションにはアプリケーション設定ファイルから定義を読み取る機能が付いています。自作の定義フォーマットを作成せずとも定義が読み込めたりします。 そこで、.NET Framework と.NET Coreの両方から読み取ってみようと思います。 .NET Framew…

WPF + C#でSetPixelする

はるか昔、WinFromの時代には、System.Drawing.Bitmapクラスがあってそのクラスには、1ドットごとに色を指定して絵を描くことができるSetPixel関数が付いていました。 WPFになって以降、クラス群が更に高級化したのでBitmapImageやImageSourceではそのような…

C#でTemplate Methodパターンを実装する

GoFのデザインパターンの中でも、振る舞いに関するパターンの1つであるTemplate MethodパターンをC#で実装したいと思います。 Template Methodパターンとは? Template Methodパターンとは、処理の手順を基底クラスで決めておいて、具体的な動作を後から派生…

Stellaris新DLC「Synthetic Dawn」ロボット帝国プレイレポ

Stellarisの新DLC「Synthetic Dawn」とパッチ1.8が2017年9月末に配信されました。 今までのゲームに対し大幅な変更とリバランスが入ったため今までの1.6.2までで鉄板と言われていた攻略法とはかなり違う感じになっています。細かい変更はパッチノートが出て…

中3の15%、短文も理解困難が話題なので解いてみた。C#で。

何か少し火種がくすぶっているようなので自分で解いてみました。 https://www.nasnem.xyz/entry/incorrect-comprehension-test http://mubou.seesaa.net/article/453754579.html 国語の問題らしく設問はこんな感じだそうです。 読解力テストの問題例(1) 以下…

MahAppsでマテリアルデザインっぽいボタンを実装する

WPFのオープンソースのGUIライブラリMahAppsを使ってマテリアルデザイン風のボタンをサクッと実装してみました。 作成環境 Windows10 VisualStudio2017 Update3 (15.3.5) .NET Framework 4.7 MahApps.Metro使用 FLATICONを利用 出来上がったもの 使った小技…

C#で汎用リトライ処理を実装する

C#

C#でリトライの共通処理を書いてみました。 特定の操作を指定した回数分自動でリトライしてくれる仕組みになります。 VisualStudio2017 + .NET4.7 + C#7.0で書いています。(Null条件演算子使ってるので、C#6.0以降なら動くかと) リトライのコード 戻り値なし…

C#でリストの特定の要素の位置を変更する

C#

あるリストに入ってる1つの要素の順序(位置)を変更します。 例えば、5番目の要素を3番目に移動したいなどの状況想定します。Listクラスを使いますがそういったメソッドは存在しないため追加で実装します。 実装例 Listクラスの拡張メソッドとして実装したい…

任意の値型をジェネリック(T)型にキャストする

C#

ジェネリックの型をintやboolにキャストして返却しようと思います。以下の例だと明らかに型が決まってるのですが、コンパイルはできません。 public T Convert<T>(string key) { string value = Config.GetValue(key); Type _t = typeof(T); if(_t == typeof(in</t>…

Pavel Haas - オーボエとピアノのための組曲

はじめに ネットで楽譜と音源の両方が参照できる器楽曲を紹介していきたいと思います。 楽曲情報 作曲者:Pavel Haas - パヴェル・ハース 年代:1899年 ~ 1944年 曲名:Suite for Oboe and Piano Op.17 - オーボエとピアノのための組曲 作品17 作曲時期:19…

System.Threading.Semaphoreの使い方

C#

C#のセマフォの使い方です。 C#のセマフォは主に以下の2つのシーンで利用します。 同時に度に実行できるスレッドの数を制限したい 複数のスレッドの進行を同期したい 同時にXXXする数を制限したいという仕様があったときに効果を発揮します。大抵は、共有資…

C#のusingステートメントの機能

C#

IDisposabeleインターフェースを継承したクラスは、以下のように。usingを使用して以下のように記述すると using(var hoge = new Hoge()) { } 以下のように展開されたのとほぼ同じような形で処理が行われ、リソースが即座に解放されます。 Hoge hoge = null;…

C#の4つのTimerの用途と使い方

C#

C#というか.NETのタイマーの種類について整理と説明をしたいと思います。.NETには自分が知っている限り、現時点で4種類のタイマーがあります。 種類 アセンブリ 用途 System.Timers.Timer System 普通の定周期処理 System.Threading.Timer mscorlib 普通の定…

Cocos2d-xで文字送りを実装する

RPGやノベルで表示されるテキストが1文字ずつ表示されていく、「文字送り」機能を作成したいと思います。 画面の構成は、周りの枠をScale9Spriteで表示して、テキストはラベルで表示します。図にするとこんな感じです。 おおよその仕様ですが以下の通りです…

std::stringの日本語の長さを取得する

C++

C++でstd::stringに日本語が設定されているときに、size(), length()メソッドで文字列長を取得しようとすると日本語の長さが取得できません。中身がマルチバイト可変長 + 特殊ルールという構造になっているようで、1文字が1バイト~6バイトとなっているため…

C#で行番号を取得する

C#

C#で行番号を取得する方法です。2種類あってそれぞれ以下の通りです。 using System; using System.Diagnostics; using System.Runtime.CompilerServices; static void Main(string[] args) { GetLine_1(); GetLine_2(); } // C#4.0(VS2010)までの書き方 pub…

コインエフェクトを作成する

Cocos2d-x 3.14.1でコインエフェクトを作成したいとおもいます。 エフェクトは宝箱を開けたときや、敵を倒したときに「複数枚のコインがジャラジャラと出る」ようなエフェクトにしたいと思います。自分で描いたコインの画像を使います。 で、作成したものが…

.NET Core 2.0をVisualStudio2017へ導入する

VisualStudio2017 Update3がリリースされました。同時に、.NET Core, .NET Standardも2.0がリリースされました。 Core 2がリリース、.NET Standard 2.0をサポート https://www.infoq.com/jp/news/2017/08/netcore2-sdk .NET Frmaework4.6.1相当のサポート、.…

Responsibility = 責任ではない?

責任というとどういうものを想像するかは人によると思いますが「責任」とは、どちらを想像しますか? 取るもの 果たすもの 日本(というか日本語圏のミームの中)では、では責任と言ったら取るもので 切腹する 坊主にする 辞任する なんかが代表的なイメージだ…

C#/C++相互運用時の戻り値構造体にwchar_t[]が含まれると例外が出る問題

前回記事で、戻り値の構造体にNon-Bittable型(非Blittable型)が含まれる場合例外が発生する件でchar型の固定長配列は自分でマーシャルしないと例外が出るという話の続きです。前回と同じ条件(戻り値が非ポインタ型の構造体)でwchar_t型の固定長配列が含まれ…

相互運用時に戻り値にNon-Bittable型が含まれる場合例外が発生する件

タイトルの通りですが、C#からC/C++のDLL関数を呼び出すとき(相互運用時)にC++側の関数の"戻り値"が構造体でかつ、非ポインタ型で、その構造体のフィールドメンバーにNon-Bittable型(非Blittable型)が含まれている場合、以下の例外が発生して処理が落ちます…

Cocos2d-xで画像を切り出してアニメーションする。

Cocos2d-xで配布されている素材のキャラクターチップを切り出して歩行アニメーションをつけようと思います。 素材配布サイトさんに以下のような形式で歩行グラフィックが配置されているのを見たことがあるとあると思いますがこの画像、毎回全部分割して画像…

VisualStudio 2015, 2017で.NET Framework 4.7を利用可能にする

VisualStudio2015, 2017*1に.NET4.7を追加する方法です。最近はVSのバージョンごとにインストール方法が違わないんですかね?確認ついでに導入方法をまとめました。 まずは、以下リンクから.NET Framework4.7をWindowsへインストールしましょう。そうでない…

Cocos2d-xで乱数を取得する

Cocos2d-xにはライブラリ標準で乱数を取得できるrandom関数があります。自分でsrand + rand とか、mt19937を自分でしなくて大丈夫です。便利に使えるようにUtility作る必要ありません。使い方ですが、 // Cocos2d-x内の宣言 // ccRandom.h inline int random…

Cocs2d-xでアニメションを停止・再開する

Cocos2d-xでノードに設定したアニメーションを停止・再開する方法です。 Nodeクラスのpasue/resmeメソッドを使用します。使い方は以下の通りです。 auto sp = Sprite::create("sample.png"); // アクションを作成 auto jumpAction1 = JumpBy::create(0.25f, …

Cocos2d-xでFF5風のダメージを再現する

Cocos2d-x(3.x系)で、FF5風のダメージ表示のエフェクトを再現してみました。 制作環境は以下の通りです。 Cocos2d-x 3.14.1 Windows10上でWin32プロジェクトにて確認 参考にした動画 www.youtube.com 実装した結果 微妙に画像がつぶれているので見づらい場合…

新DLC"Synthetic Dawn"を一足先に体験?Animated Synthetics Portraits MOD最序盤レビュー

Synthetic Dawnとパッチ1.8がリリースされたのでいかにプレイレポを書きました。 takachan.hatenablog.com 以降古い内容なのでそれでも良ければどうぞ Stellarisに新DLC「Synthetic Dawn」が発表されました。発売時期はComingSoonとなっていてこれからみたい…

Sprite, LabelのアンチエイリアスをOFFにする

Cocos2d-x3 3.x系でアンチエイリアスをON/OFFにする方法です。 ラベルのテキストのアンチエイリアス指定方法が途中で変わっていたので、priteとLabel両方の指定方法まとめてみました。 Spriteの場合 こちらは、結構昔から変わっていません。 auto sp = Sprit…