2013年01月05日

ダンジョン自動生成・続き

前回の記事 の続き。

NetHack のダンジョンのサイズと同じ、80×20だとこんな感じ。
80x20_00

通路の曲がり方をもう少し複雑にしたい。他にも、改善の余地は多い。

このプログラムをダウンロードできるようにした。前回省略した部分も含め、ソースファイルも同梱してある。
「MG130105.zip」をダウンロード
使用するには、.NET Framework 3.5 が必要です。

Mgexe
操作に関して説明する必要は無さそうに思うけど、それは作ったのが自分だからかもしれない。

posted by Takenoko at 21:34| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2013年01月03日

ダンジョン自動生成

ローグライクゲーム用に書いたダンジョンを自動生成するコード。C#。ちょうど一年前に書いたと思う。プログラミングの教育を受けた事はないので、全体的に自信がない。コメントの書き方とか。変な部分があれば、教えていただけるとありがたいです。

Grid.cs

Room.cs

Division.cs

Map.cs

XorShift は省略。Random でも代用できるし。GUI部分も省略。

これでダンジョンを生成すると、こんな感じになる。Form の英語も自信がない。
image/_photos_uncategorized_2013_01_03_genedun1.png
マップのサイズが小さいければ、特に違和感はない。部屋を1x1にするとこうなる。
image/_photos_uncategorized_2013_01_03_genedun2.png
マップのサイズを150x150に。
image/_photos_uncategorized_2013_01_03_genedun3.png
極端に長い通路ができたり、かなり不自然になる。さらに300x300。
image/_photos_uncategorized_2013_01_03_genedun4.png
こんなローグライク、プレイしたくない。ついでに部屋を1x1に。
image/_photos_uncategorized_2013_01_03_genedun5.png
こんなダンジョンがあったら発狂しそう。

textarea タグでコードを貼り付けたけど、思った以上に見た目がよくない。なんとかしたいが、どうすればいいのかわからないので、わかったら直そうと思う。

続いた。

posted by Takenoko at 23:32| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2011年03月03日

ToolStripMenuItem を RadioButton のように扱う

タイトルのような事がやりたかったので、ユーザーコントロールを作ってみた。

    public partial class ToolStripExclusiveMenuItem : ToolStripMenuItem
    {

        public ToolStripExclusiveMenuItem()
        {
            InitializeComponent();
        }

        protected override void OnClick(EventArgs e)
        {
            this.SelectCheckedItem(this);
            base.OnClick(e);
        }

        private void SelectCheckedItem(ToolStripExclusiveMenuItem sender)
        {
            for (int i = 0; i < base.Owner.Items.Count; i++)
            {
                if (base.Owner.Items[i].GetType() == typeof(ToolStripExclusiveMenuItem))
                {
                    ((ToolStripExclusiveMenuItem)base.Owner.Items[i]).Checked = base.Owner.Items[i].Equals(sender);
                }
            }
        }
    }

これでRadioButton のようになる。
[C#]MenuStripドロップダウンアイテムのチェック切り替え|Assertion Failed! が参考になった。

追記

以前の記述だと、ToolStrip にこれ以外のコントロールがあるとエラーが出るので、修正した。

posted by Takenoko at 22:55| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2011年02月20日

ブックマークレット

前回 、はてブを表示するブックマークレットを作ったけど、新しいタブで開いたほうが便利だと思ったので、改良してみた。

新しいタブではてブを表示

元のタブに変なメッセージが表示されたりして悩んだが、function() を入れると上手くいった。あと、window.open の二つめの引数は必要なかったようだ。

posted by Takenoko at 22:11| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2011年02月12日

初javascript

C#ばかり使っていたけど、javascript も少しは使えたほうがいいなあと思ったので、試しにブックマークレットを作ってみた。

見ているページのはてなブックマークに移動する
はてブを使っていないけど、見るという人向け。

http://をhttps://に、https://をhttp://に変換して移動
これ役に立たない気がする。ロケーションバーで操作したほうが早いし。

なかなか楽しい。

参考にしたページ

http://www.tohoho-web.com/js/index.htm

http://www.teria.com/~koseki/memo/bookmarklets/tips.html

http://www42.atwiki.jp/tomokazu0525/pages/56.html

http://let.hatelabo.jp/

posted by Takenoko at 22:18| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2011年02月11日

NumericUpDown のカーソル

キャレットを非表示にした けど、それ以外にも、カーソルが TextBox 内で IBeam になるのが気になっていたので、なんとかしてみた。NumericUpDown のプロパティ Controls で TextBox を取得できるようなので、コンストラクタに

this.Controls[1].Cursor = Cursors.Arrow

を記述することでカーソルが変化しないようになった。

posted by Takenoko at 01:16| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

2011年02月03日

NumericUpDown のキャレットを消す

マップエディタを作っていて、マスの倍率を変更するためにNumericUpDown を使うことにした。キャレットがチカチカしてうっとうしいので、キャレットを消す方法を検索していろいろ試してみたが、なかなかうまくいかない。HideCaret を使う方法がいくつか出てくるけど、なぜか消えなかった。そこで、DestroyCaret を使うと消えてくれた。環境によるのだろうか。

public partial class NumericUpDownEx : NumericUpDown
{
    [DllImport("user32.dll", SetLastError = true)]
    private static extern bool DestroyCaret();

    [DefaultValue(true)]
    [Category("動作")]
    public bool CaretVisible { get; set; }

    public NumericUpDownEx()
    {
        InitializeComponent();
    }

    protected override void OnGotFocus(EventArgs e)
    {       
        if (!this.CaretVisible)
        {
            DestroyCaret();
        }
        base.OnGotFocus(e);
    }
}

ここではNumericUpDown を継承しているけど、TextBox 等でもできると思う。

posted by Takenoko at 20:21| Comment(0) | TrackBack(0) | programming | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。