2014年04月27日

Mint 13 Xfce で Eclipse 3.7 を使ったときのメモ

少し前に、Linux で Eclipse 4.2 のダウンロード,インストール,設定,日本語化,基本操作 を見ながら Eclipse をインストールしました。バージョンは 3.7 にしました、新しいバージョンは重いらしいので。WindowBuilder もインストールしました。WindowBuilder (GUIビルダ) を使ってみました。(前編) | 書きかけの技術書+ を参考にしました。

プロジェクトを実行しようとすると、java.awt.HeadlessException なんていうエラーが出ました。試行錯誤の結果、JRE の定義に oracle の java を追加して、プロジェクトでそれを使用するように設定すると、普通に実行できました。最初から入っている openjdk でも、設定次第では使えるのかもしれませんが。

WindowBuilder のデザイナが重いです。Eclipse は使い始めたばかりなので、慣れるまで大変そうです。

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

2014年04月19日

パネルにハードディスクの温度等をアイコンで表示するコードを書いた

Linux Mint 13 Xfce のパネルにシステムモニタを表示したかったので、xfce4-systemload-plugin をインストールしたんですが、パネルに追加しようとすると、"プラグインは最近 60 秒以内に 1 回以上再起動されました。"などどいうわけのわからないエラーメッセージが出て追加できませんでした。他の xfce4 プラグインもインストールしてみたんですが、やはり同じエラーが出ます。それ以外のシステムモニタもいくつかインストールしてみたんですが、パネルに追加はできても、動いてくれない。仕方ないので、自分で作りました。

Monitor1

左の 3つのアイコンが自作で、CPU 使用率、メモリ使用率、ハードディスクの温度の順になっています。左の 2つのアイコンの見た目をなんとかしたいんですが、デザインのセンスが無くて、どうすればいいのかさっぱりわかりません。あとでログイン時から常駐させる方法を探します。

以下がコードです。hddtemp に渡すパスは、/dev/sda/ とかでもいいと思います。この環境だと、sda になったり sdc になったりするので、変化しないパスを渡しています。




Python や hddtemp といった必要なものは最初から入っていたらしく、何もインストールせずに動きました。試行錯誤している時にそれらをインストールしていたのかもしれませんが。

PyGTKでシステムトレイを使用してメニューを表示する
PyGTKでシステムトレイのアイコンを切り換える(前半)
raw data(バイナリ列や数値列)を画像として表示する
Python Imaging Library Modules

等のページを参考にしました。

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

2014年01月28日

Java でダンジョン自動生成してみた

Windows XP のサポート期限が切れるので、Linux に移行しなければならなくなった。問題が山積みで、その一つが、Visual Studio が使えなくなるという事。今まで Windows しか使っていなかったので全く意識していなかったけど、これからのプログラムは、少なくとも Windows と Linux の両方で動くようにする必要がある。

という事で、Java を始めてみた。とりあえず、壁が薄いダンジョン自動生成のコード を、ローグのように壁を厚くして、Java で書くことにした。Java と C# は、世間の評判通りにとてもよく似ていて、コードを書くのは違和感が殆ど無い。メソッドの先頭が小文字なのが少し気になるけど。IDE は NetBeans を使用したが、デザイナの勝手が Visual Studio とは全く違って、GUI 部分に物凄く手間取った。

以下、生成したダンジョン。

image/_photos_uncategorized_2014_01_28_mgj01.png image/_photos_uncategorized_2014_01_28_mgj02.png image/_photos_uncategorized_2014_01_28_mgj03.png image/_photos_uncategorized_2014_01_28_mgj04.png

区画分けする方法より、この方が好き。

起動するための jar と、ソースファイル。「MG140128.zip」をダウンロード

解説はいずれ書きます。

15/02/01 追記 続き を書きました。ソースと実行ファイルも続きからダウンロードできます。

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

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 でも、スクロールする位置が少しずれるので、このメソッドを書いたのだけど、これが自分の環境だけだったら嫌だなあ。

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

2013年12月10日

壁が薄いダンジョン自動生成のコード

壁が薄いダンジョン自動生成 のコード。namespace とプロパティを省略している。

Grid.cs



Map.cs



コメントを殆ど書かなくなった。面倒なので…

ダンジョンの自動生成を検索すると、区画分けをする方法が多く、以前書いた ダンジョン自動生成 もそうしているが、このコードでは区画分けをしていない。繋ぐ部屋同士の距離を制限して、極端に長い通路が生成されないようにしている。

「DG131202_001.zip」をダウンロード .NET 2.0 が必要。

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

2013年12月08日

壁が薄いダンジョン自動生成

今年の年始の ダンジョン自動生成 は、ダンジョンマスターやローグのような、壁が 1 マスのダンジョンだったけど、今度は、ウィザードリィのような壁が薄いダンジョンを自動生成するコードを書いた。

image/_photos_uncategorized_2013_12_08_dg2_01.png

コードと実行ファイルは後で載せます。

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

2013年11月14日

RichTextBox を下までスクロール 続き

RichTextBox を下までスクロール の続き。

ScrollToCaret を使わない方法で、前の記事と違い、目で確認しなくてもよくなった。Focus も必要ない。

[System.Runtime.InteropServices.DllImport("USER32.dll")]
private static extern IntPtr SendMessage(IntPtr hWnd, int msg, int wp, out Point lp);
private const int EM_SETSCROLLPOS = 0x04DE;

int lineHeight = this.richTextBox1.GetPositionFromCharIndex(
this.richTextBox1.GetFirstCharIndexFromLine(1)).Y - this.richTextBox1.GetPositionFromCharIndex(
this.richTextBox1.GetFirstCharIndexFromLine(0)).Y;
Point p = new Point(0, this.richTextBox1.Lines.Length * lineHeight - this.richTextBox1.ClientSize.Height);
// BorderStyle が None 以外だと、1 ずれる
if (this.richTextBox1.BorderStyle != BorderStyle.None)
{
    ++p.Y;
}
if (p.Y > 0)
{
    SendMessage(this.richTextBox1.Handle, EM_SETSCROLLPOS, 0, out p);
}

lineHeight は一行の高さで、DOBON.NETプログラミング道掲示板 [One Topic All View / Re[2]: RichTextBoxで1行あたりの高さの求め方 / Page: 0] に書いてある方法で計算しています。

12/18 追記 続き を書いた。

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

2013年11月09日

マニュアル製作中

操作の説明を書いてるが、説明の仕方がわからない。困った。

Readme.txt は、ちょっとReadme というソフトでなんとか書いたけど、操作を説明する Manual.txt が書けない。日本語が下手なのは自覚はしていたが、ここまで書けないとは思わなかった。

二日前の記事 で、ファイルの配置の値を変えたら誤検知されなくなったことを書いたが、思いついたコマンドを追加したら、今度は 2048 で誤検知されて、512 だと大丈夫になった。なんなんだよ。ファイルの配置って、このためにあるのかな。

あと、Windows8 で動作確認しようとしたら、BadImageFormatException って出て起動できなかった。64bit だとこうなるらしい。で、x64環境でBadImageFormatException - 3日目の坊主 に書いてある対処法で、32bit でも 64bit でも起動する exe を作れた。

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

2013年11月07日

Visual Studio で作成したプログラムが Avast に誤検知される

Avast の誤検知が多いらしいことは知っていたけど、自分が作ったゲームでそんな目に遭うとは思っていなかった。

Debug しようとすると Avast に止められて、まあ Release は大丈夫だろうと、とりあえず除外リストに追加。しばらくたって、いざ Release ビルドしてみると、これまた止められる。

コードを適当にコメントアウトするとビルドできるんだけど、それじゃゲームが動かないわけで、しばらく困ってた。検索の仕方が悪いのか、対処法が見つからないし。

自分だけが使うのであれば、ウイルスではないとわかってるわけだし、除外すればいいだけなんだけど、公開するつもりだし。

どこかに投稿するとして、受け付ける側が Avast を使っていた場合、審査の時点で不合格になるかもしれない。そうでなくても、Avast ユーザーは少なくないわけで、ウイルスではないから除外してくださいと言っても、信用されるとは限らない。

で、なんとかしなきゃいけないので、いろいろ変更してみたところ、ビルドの詳細設定にファイルの配置というのがあって、その数字を 2048 にすると誤検知されなかった。512 や 1024 だと Avast に止められた。

というわけで、Visual Studio でビルドすると誤検知されてしまう場合、ファイルの配置の数字を変えると、なんとかなるかもしれない。

Avast を入れていなければ、作ったゲームが誤検知されることに気づかなかったわけだし、Avast ユーザーでよかった(倒錯した結論)。

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

2013年11月03日

ゲームがほぼ完成した。

Niwa1

一つ前の記事 とは違うゲームで、10月29日に作り始めた。
これをどこで公開したものか、迷ってる。
以前書いた、ヨートン というゲームに大きすぎる影響を受けていて、オリジナルとは言い難いし。ふりーむでいいんだろうか。初めてゲームを完成させることができたのは嬉しいが、わからないことが多くて、まだ公開できそうにない。

追記 11/04 タイトルに「ほぼ」を追加。バランス調整が必要だし、readmeまだ書いてないし。書いたこと無いから検索しながらでないと書けないし、大変そう。

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

広告


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

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

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