Windows XP のサポートが2014年4月に切れるらしいので、Linux にしようと思っている。検索してみると、色々な Linux があるようで、どれにすればいいのやら。Windows 用のアプリケーションを動かすための Wine っていうのがあるらしいけど、全てが動作するわけではないらしいし、とても不安。自作のツールやゲームは動くんだろうか。自作のソフトが動かなくても、別の言語で書き直せば勉強にもなるから、悪くは無いが。まだ時間はあるので、ゆっくり検討したい。
2013年12月30日
Windows XP から Linux に移行する予定
2013年12月18日
RichTextBox を下までスクロール さらに続き
前回 の方法では WordWrap による改行が考慮されていなかったので、それを考慮したコードを書いた。ついでに、SendMessage の引数を IntPtr にした。IntPtr ってどう読むんだろう。コードを短くするために、this. を省略している。rtb が RichTextBox のインスタンス。ScrollBars が Vertical と ForcedVertical で動作することを確認した。
[DllImport("user32.dll")]
private static extern int SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
private void ScrollToBottomRichTextBox()
{
const uint EM_SETSCROLLPOS = 0x04DE;
int[] pos = new int[2];
int lineHeight = rtb.GetPositionFromCharIndex(rtb.GetFirstCharIndexFromLine(1)).Y - rtb.GetPositionFromCharIndex(rtb.GetFirstCharIndexFromLine(0)).Y;
pos[1] = (rtb.GetLineFromCharIndex(rtb.TextLength) + 1) * lineHeight - rtb.ClientSize.Height;
// BorderStyle が None 以外だと、1 ずれる
if (rtb.BorderStyle != BorderStyle.None)
{
++pos[1];
}
if (pos[1] > 0)
{
IntPtr iPtr = Marshal.AllocCoTaskMem(Marshal.SizeOf(typeof(int)) * pos.Length);
Marshal.Copy(pos, 0, iPtr, pos.Length);
SendMessage(rtb.Handle, EM_SETSCROLLPOS, IntPtr.Zero, iPtr);
}
}
ScrollToCaret でも、AppendText でも、スクロールする位置が少しずれるので、このメソッドを書いたのだけど、これが自分の環境だけだったら嫌だなあ。
2013年12月10日
壁が薄いダンジョン自動生成のコード
壁が薄いダンジョン自動生成 のコード。namespace とプロパティを省略している。
Grid.cs
Map.cs
コメントを殆ど書かなくなった。面倒なので…
ダンジョンの自動生成を検索すると、区画分けをする方法が多く、以前書いた ダンジョン自動生成 もそうしているが、このコードでは区画分けをしていない。繋ぐ部屋同士の距離を制限して、極端に長い通路が生成されないようにしている。
「DG131202_001.zip」をダウンロード .NET 2.0 が必要。
2013年12月08日
壁が薄いダンジョン自動生成
今年の年始の ダンジョン自動生成 は、ダンジョンマスターやローグのような、壁が 1 マスのダンジョンだったけど、今度は、ウィザードリィのような壁が薄いダンジョンを自動生成するコードを書いた。
コードと実行ファイルは後で載せます。