かそくそうち このページをアンテナに追加 RSSフィード

2012-07-21

「DQX スキルシミュレータ」v1.0

[]ドラゴンクエストXスキル考察支援「DQX スキルシミュレータ」v1.0が公開 23:29 ドラゴンクエストXのスキル考察支援「DQX スキルシミュレータ」v1.0が公開を含むブックマーク ドラゴンクエストXのスキル考察支援「DQX スキルシミュレータ」v1.0が公開のブックマークコメント

 「DQX スキルシミュレータ」は人気RPGドラゴンクエスト最新作ドラゴンクエストX(DQX)のスキル振り分けを試せるソフト。Windows XP/Vista/7および同64bit版に対応するフリーソフトで、作者のWebサイトからダウンロードできる。


 前作では全職業で獲得したスキルポイントを任意の職業のスキルに振り分ける事ができたが、本作では職業毎の管理となり他の職のスキルへ割り振ることができない。このため、スキルポイントが余っているにも関わらず欲しいスキルを獲得できなかったり、振り分けるスキルがないといったことも発生しうる。ゲーム中では基本的に一度割り振ったスキルポイントを取り消すことはできないが、本ソフトを利用することで事前に様々な振り分け方をシミュレートすることが可能だ。また、各職業でどのスキルに何ポイントを割り振ったか確認できるのも便利。


 なお、初期状態では前作(ドラゴンクエストIX)のスキル設定になっているので注意。設定を変更するには、付属のINIファイルを編集する必要がある。


著作権者】郵便はみがき 氏

【対応OSWindows XP/Vista/7/XP x64/Vista x64/7 x64

【ソフト種別】フリーソフト

【バージョン】1.0(12/07/21)


URL

DQX スキルシミュレータ

http://www12.ocn.ne.jp/~dante98/zip/DQXSkillSim.zip

トラックバック - http://d.hatena.ne.jp/y-hamigaki/20120721

2011-05-14

[][]boost::progress_display++ 21:23 boost::progress_display++を含むブックマーク boost::progress_display++のブックマークコメント

Boost.懇親会 #5 名古屋

http://partake.in/events/e9131e9c-0662-4179-bbd4-b0648909f921

boost::progress_displayの発表をしてきました。


発表資料

http://www12.ocn.ne.jp/~dante98/progress_display.pptx

ソースコード

http://www12.ocn.ne.jp/~dante98/zip/progress_display.zip


前々からboost::progress_displayが苛められているのを見るたびに、インタフェースでなく実装の問題だと思っていたので、二つの別実装を紹介しました。

以下、実装周りの解説です。


一つ目は、単純なWin32 GUI版です。

boost::progress_displayのインタフェースに合わせるためにはメッセージループを別スレッドで回す必要があります。

また、「ウィンドウの生成」、「メッセージループ」、「ウィンドウの破棄」は同じスレッドで行う必要があり、真面目に実装しようとすると意外と面倒だったりします。

progress_displayからメッセージループへの通知はウィンドウメッセージを投げることで行っています。

スレッドに投げるメッセージは

  • destroy_msg(ウィンドウ破棄)
  • set_expected_msg(最大値設定)
  • set_count_msg(現在値設定)

の三つです。

ウィンドウが生きているかどうかは他のスレッドから確認できないので、ウィンドウハンドルではなくスレッドに対してメッセージを投げています。

progress_display一つに対して一つのメッセージループスレッドを使っているからできる手法ですが。


もう一つの実装は、「Progress display - アンサイクロペディア」に載っている例(?)を実装したものです。

AAが「MS Pゴシック」前提なことと、ソースコードにShift JISで書きたかったことから日本語環境(コードページ932)限定です。

普通に論理フォントを作成してGDIで描いています。

ダブルバッファリングは手抜きでWS_EX_COMPOSITEDスタイルを使っていますが、もうXP以降前提でよいでしょう。

引数は、

boost::progress_display progress(count, std::cout,
    "クソスレ\n"
    "普通\n"
    "優良スレ",
    "スレ評価嬢",
"     88彡ミ8。   /)\r\n"
"     8ノ/ノ^^ヾ8。( i )))\r\n"
"     |(| ∩ ∩|| / /   <ココ!\r\n"
"    从ゝ__▽_.从 /\r\n"
"     /||_、_|| /\r\n"
"     / (___)\r\n"
"    \(ミl_,_(\r\n"
"      /.  _ \\r\n"
"     /_ /  \ _.〉\r\n"
"   / /   / /\r\n"
"   (二/     (二)\r\n"
);

こんな感じで設定します。後ろ三つが「凡例」、「タイトル」、「カーソル」になっています。

カーソルのホットスポットは最上部の右端に決め打ちで、かつ最後の文字は省いて計算しています。(つまり「     88彡ミ8。   /」の幅)

なので、アンサイクロペディアの例以外のAAだと上手く動きません。


ついでに、発表に使ったコマンドプロンプトもどきの解説。

というご要望にお応えして、即興で縞模様のコマンドプロンプトを作りました。

時間がなかったのでコマンドの入力はコマンドライン引数から、標準入力標準エラー出力はなしです。

縞模様はGDIでベタ書きして、その上に出力を描画しているだけです。

コマンド実行は、スレッドを起こしてCreateProcess()して、1文字ずつ読んで画面更新してました。(非同期I/O面倒なので)

GetStockObject()で取得できるブラシが白/黒/灰色ぐらいしかなかったので、最初は白と灰色の縞模様だったのですが、色が重要っぽいのでちゃんとブラシを作りました。

あと、よく分かってなくて危うく縦縞にするとこでした。

で、こんな面倒なことしなくてもコンソールの設定変えるだけで出来たらしい、、、。

トラックバック - http://d.hatena.ne.jp/y-hamigaki/20110514

2010-12-05

[]D言語版AATT 16:37 D言語版AATTを含むブックマーク D言語版AATTのブックマークコメント

メタプログラミングの会

http://atnd.org/events/9072

http://d.hatena.ne.jp/kmizushima/20101204/1291479701

以前作成したAATTを発表してきました。


発表資料

http://www12.ocn.ne.jp/~dante98/aatt.pptx

ソース

http://www12.ocn.ne.jp/~dante98/zip/aattd.zip


赤黒木の説明→実装アルゴリズム→Dへの移植話という流れです。

読み返してみるとC++版(.aattを食わせるとC++用のヘッダを出力)の話がなくて、いきなりDへの移植になってたり説明が足りないところがチラホラ。


今回はC++版をDへ単純移植したものでしたが、ソース中にAATTのパターン列を並べると長くて読みにくく、

一つの変換毎にインスタンス化して、パターンマッチの順次評価や再帰D言語側の処理に任せた方が分かりやすそうでした。

質問タイムにも「もっと汎用的に使えないのか?」といった意見をもらいましたし、コードに埋めること前提で再設計してみると面白いかもしれません。


あと、D版動かしていてバグを見つけたのでC++版も修正してあります。

http://www12.ocn.ne.jp/~dante98/zip/aattc.zip (CR/LF改行)

http://www12.ocn.ne.jp/~dante98/zip/aattc.tar.bz2 (LF改行)

count_black()が左部分木の黒高さ同士を比較していたので全くテストになってなかったという、、、。

トラックバック - http://d.hatena.ne.jp/y-hamigaki/20101205

2010-12-04

[]nihongo.pmy 02:56 nihongo.pmyを含むブックマーク nihongo.pmyのブックマークコメント

(12/05 追記、コードも少し加筆)

メタプログラミングの会でk.inabaさんが発表されたプログラミング言語Polemyで、資料中の例にあったnihongoレイヤを作ってみました。

http://www.kmonos.net/repos/polemy/


とりえあず動いた。

@@nihongo = fun(x)
{
  if @value(x) == 1 then
    "いち"
  else if @value(x) == 2 then
    "に"
  else
    "まちがい"
}
@nihongo + = fun(x, y)
{
  @value(@value(@nihongo(x) ~ "たす") ~ @nihongo(y))
}
@value( 1 + 2 )
@nihongo( 1 + 2 )
exit

実行結果

Welcome to Polemy 0.1.0

>> >> >> >> >> >> >> (function:12bffe0:12b4cc0)

>> >> >> >> (function:12c5e80:12b4cc0)

>> 3

>> いちたすに

>>

トラックバック - http://d.hatena.ne.jp/y-hamigaki/20101204

2010-10-24

[]Boost.勉強会#3 01:36 Boost.勉強会#3を含むブックマーク Boost.勉強会#3のブックマークコメント

Boost.勉強会#3でBoost.Buildについて発表しました。

発表資料

http://www12.ocn.ne.jp/~dante98/BoostBuild-pre.pptx

サンプルコード

http://www12.ocn.ne.jp/~dante98/zip/bbv2.zip

名前を言ってはいけないあのプログラミング言語インタプリタ

http://www12.ocn.ne.jp/~dante98/zip/bf.zip

PowerPoint/プレゼンテーション/大阪で緊張しました。

蛇足(蛇足大好きなもので、、、)ばかり話して時間配分も失敗してしまい、Tipsの部分は喋れませんでした。

次やるならラウンドテーブルとかの方がいいかなぁ。

[][]BBv2の警告メッセージ抑制 01:36 BBv2の警告メッセージ抑制を含むブックマーク BBv2の警告メッセージ抑制のブックマークコメント

Boost.勉強会で時間がなくて話せなかった「警告メッセージ抑制」について説明しておきます。

import path ;
local broot =
	[ modules.peek : BOOST_ROOT ] ;
local bdir = [ path.make $(broot) ] ;
for local lib in graph mpi python regex {
	module Jamfile<$(bdir)/libs/$(lib)/build> {
		rule ECHO { }
	}
}

これをuser-config.jam等に書いておくと、「ICUがない」等の警告メッセージを抑止できます。

仕組みが分からずとも使えますが、理解するにはJamfileが個別のモジュール内で動作していることを知る必要があります。

ECHO $(__name__) ;

のようなJamfileを用意して実行してみると、

Jamfile</path/to/dir>

のような出力が得られるはずです。

変数__name__には現在のモジュール名が入っているので、サブプロジェクト毎に上記のような名前のモジュールが使われていることが分かります。

また、

なので、警告メッセージを出力しているモジュール内でECHOを上書きすることで、その呼び出しをフックすることが可能です。

つまり、ECHOを空のルールで上書きすれば警告メッセージが出力されなくなるというわけです。

最近はconfigureというモジュールもメッセージを出力するので、

module configure {
    rule ECHO { }
}

も追加するとよいでしょう。

ただし、バージョンアップした際などは一度警告メッセージを見ておくのがよいです。