箱庭諸島をJAVAで作る(2)

新規島の自動生成機能は完成した。(上記の島も自動生成)
開拓画面は8割くらい?出来た。

スマホ表示の場合。Bootstrapでレスポンシブ対応。
縦画面だとマップサイズ10以上の場合は横にはみ出るけど、スクロールできるようにしてある。

スマホは最初長押しでメニュー展開にしてたんだけど、Androidだとどうしても標準メニューと干渉するから止む無くクリック(タッチ)判定にした。
iPadだといい感じだったんだけどね~…

PCはマウスオーバーで地形情報、右クリックでメニュー展開にした。
コマンドリストはD&Dで並べ替えできるようにしてある。スマホなら指でD&D

今週末からはターン処理を書こう。

箱庭諸島をJAVAで作る(1)

結構昔に遊んでたブラウザゲームの箱庭諸島を
Java+HTML5で作り直して使い勝手、コンセプト含め現代的(?)にしてみようかなと思っています。

Javaを選んだのは仕事でもJavaばっかりでほかの言語チョイスするのはキツいから。。。

コンセプトですが、ゲーム性はあまり変えませんが流れを早くするつもり。

従来は…
島を登録する→島の開拓画面へ→開発コマンドを一通り入力する
(ここで数時間~数十時間待つ必要あり)

運営サイトによりこの数時間という設定は幅がありまくりですが、
概ね1コマンド(ターン)2時間~4時間くらいが多かったと思います。
ガッツリやりたいと思っても1日にほんの僅かしか島に動きが無いということ。
これは現代のスマホゲーに慣れた我々にはつらい。
個人的にはスマホゲーのいわゆる「スタミナ制」も嫌いです。

というわけで開発中のゲームでは1ターンは2分とする見込みです。
実験してみてもっと速くていいと思ったら1分にするつもり。
バッチ処理時間考えると2分でギリかな

ただ、時間の巡りだけ速くして他が元仕様どおりだと少し放置しただけで島が崩壊しますが
そもそも私がやろうとしてるのはPerl→Javaのコンバージョンではなく箱庭諸島を元にフルスクラッチで新たな箱庭諸島を作るって感じなので、一通りの仕様は変えてしまうつもり。

流れを早くする=ゲーム寿命が縮む件はまだ考えられてない。
今はあんまり細かいこと考えずにとりあえずやってみようかなと

続きを読む →

バッチ

今年に入って1度も更新していなかったので、更新しておく。

バッチとかの処理を書くのは最近もっぱらJavaなんだけども、(仕事、趣味いずれも)
もちろんLinux上で動かす軽い処理ならBashだけど、クロスプラットフォームが良かったりDB繋いだりある程度ボリュームがある物という前提で

どうやらpythonとか、rubyとかのほうが同じ処理を書くにしてもJavaが数十行になるものでももっと簡単に書けたりするらしい。

さらにpythonはインデントで処理の終わりを示したりするらしく、興味をそそられた(閉じ括弧の分行数が減るが、自分は結局その部分に空行を空けそうだ)

たまーに新しい物に触ってみたい気持ちも出てくる。
実際時間とかやる気ゲージとか足りなくて難しいけど。。。

 

Jersey2.x(JAX-RS)+Tomcat

忙しかったせいもあって2ヶ月近く放置してしまった。。ようやく落ち着いたので更新してみる。
相変わらず仕事内容的に色々新しいものに触らなければいけないことが多く、今回も予習

前回の記事のApacheAXISはSOAPなのでやや決まり事が多くて面倒な局面が結構あるが、
今回の記事で扱うRESTはいわゆる普通のHTTP通信のGETやPOSTと大差なく扱えてサーバとやりとりが出来る

マッシュアップのために使われたりしますね。気象情報や何かの統計とかもRESTful APIで公開されてたりすると思います。

サンプルの作成は記事の続きで

続きを読む →

Silverlight+ApacheAxis

仕事でSilverlightを使うかもなのでちょっと予習しておきます。
もうJavaアプレットにはうんざりだから同じような使い方が出来るといいんだけど…
ちなみにタイトルのとおりWebサービスと併せて使う感じ。なお同じファミリーなWCFは使わない模様。

OSS推進的なことをやってるからSIlverlightとか真逆だけど、普及してるRIAフレームワークは選択肢が少ないから仕方ないんじゃー

続きを読む →

DataGridViewのComboBoxでフィルタ

DataGridViewのComboBoxで行の内容によって中身をフィルタリングしたいことってありますよね
これが意外と情報が無いんですよね… そんなわけで試行錯誤したらなんとか出来ました。

最初に行ったのはOnEditingControlShowingメソッドでコンボ列に作成される
DataGridViewComboBoxEditingControlクラスのDataSource(DataView)に設定してフィルタする方法。
(クラス名なげぇ)
残念ながらこちらの方法では既存選択項目の内容がフィルタで消えたりしてエラーが起きました。
あとは新規行でコンボを開くとなぜか黒背景で潰れていたり…(描画関係の.NETのバグ?)

その後ふと思いついたことが、データバインド出来る単位で列単位だけだっけ?…という事

早速調べると…あるじゃないですか!セル単位が!

DataSource プロパティを変更すると、セルの Items コレクションが再初期化され、セルが自動的に再描画されます。

DataSource プロパティの値を変更すると、コントロールは、ValueMember プロパティの値と DisplayMember プロパティの値を、新しいデータ ソースに適用しようとします。新しいデータ ソースに対応する値が存在しない場合は、各プロパティを null 参照 (Visual Basic では Nothing) に設定します。 このプロセスで発生する例外は無視されます。ただし、重要な例外 (NullReferenceExceptionStackOverflowExceptionOutOfMemoryExceptionThreadAbortExceptionExecutionEngineExceptionIndexOutOfRangeException、または AccessViolationException) のうちいずれかが発生した場合を除きます。

しかも再設定しても元の値を認識する的なことが書いてありますね。

VB.NETですが、こんな感じのコードで動作確認OKです。
両方書ける方ならC#への読み替えも余裕でしょう。
(※ロジックを示すだけのサンプルです。そのままだと動きません)

これが正解かは正直なところ分かりませんが、

CellBeginEditイベントで対象行の特定コンボを編集開始しようとしているかをチェックして
対象セルであれば元のDataTableからDataViewを新しく作ってRowFilterを設定しています。
(以後は新規作成したDataViewを使い回し)
安全のために元々ある行のRowFilterには選択しているコードを条件につけています

元のデータソースはDataTableである必要があります。

[VS2010]本番config作成を自動化

VisualStudio等の開発では何らかの形でApp.configをほとんどの開発者が利用しているかと思いますが、
コイツは通常の方法ではデバッグ/リリースでの分別が出来ません。
JavaだったらANTとかでどうにでもなるんだけどね…。

毎回本番構成を書き込んで、Releaseモードに切り替えて、、ビルドする…?
いつかミスします。。。人間だもの。。。
まぁ私は仕事で今までこれでやってましたが。。。

じゃあプラグインを使おう。 チーム全員への導入の強制…?ムリムリかたつむり

なんと上記すべてを解決できる方法がありました。
Releaseモードに切り替えてビルドすれば本番構成を書き込んだconfigとともにビルドフォルダに…
そして最初にビルド構成の設定する人だけがプラグインを導入すれば設定が可能という。
実際の内容はつづきへ。。。

続きを読む →

[PHP]テキストファイルの比較表示


テスト用のデータはwikipedia - diff - 利用例のデータを使用させていただいてます
.NETで作ったものを大体そのままPHPに起こしたので最初はPHPのメモリーが足りないエラーが出たりしたので、いろいろひどいです
unsetがあちこちにあるのはこのためです
配列に溜めてるからいけないのは分かるんだけど…
(コレをモジュール化した実運用環境下で動かしてるのでそれ以外の部分もメモリを食ってるせいもあるんだけど)
意外と処理は速い…? 時間を計ったところ
1回目 0.02723503112793秒
2回目 0.0070328712463379秒
3回目 0.0058479309082031秒
4回目 0.0071721076965332秒
1000行とかあるデータを仮に読み込んだらむしろ遅いとも言えるかもしれない
ちなみに.NET版だと同じデータでも平均0.5秒掛かります、DataGridViewを使ってるのがいけないんだろうか
(いろいろいじったら0.12秒くらいになった)
ソースコードを貼っておく事にします、何かアドバイスあればください
(記事内に貼ると残念なことになったのでファイル化、文字化けしたらUTF-8に)
ソース m_compare.phps
DIFFコマンドを使ってるのでWindows系サーバでは動きません
1/14 14:52バグがあったので修正
1/15 何回かバグ修正
これも卒業制作の物の一部なんだけど、今月末までに実物と論文終わらせないといけないんだよね…ヤバイ